Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'master' of git://github.com/nursix/eden

Conflicts:
	VERSION
	static/styles/S3/sahana.css
	views/default/index.html
  • Loading branch information...
commit a39e80bb960b0eb247c5942b1a07e3c34d468fb5 2 parents eed2515 + ac93bfa
@flavour authored
Showing with 101,573 additions and 101,502 deletions.
  1. +2 −1  .gitignore
  2. +5 −5 ABOUT
  3. +5 −5 INSTALL
  4. +24 −24 LICENSE
  5. +5 −5 README
  6. BIN  VERSION
  7. 0  __init__.py
  8. 0  controllers/admin.py
  9. 0  controllers/appadmin.py
  10. 0  controllers/auth.py
  11. 0  controllers/budget.py
  12. 0  controllers/cr.py
  13. 0  controllers/default.py
  14. 0  controllers/delphi.py
  15. 0  controllers/dvi.py
  16. 0  controllers/dvr.py
  17. 0  controllers/hms.py
  18. 0  controllers/pr.py
  19. +144 −144 controllers/sync.py
  20. 0  controllers/test.py
  21. 0  controllers/vol.py
  22. 0  controllers/xforms.py
  23. 0  cron/Zeroconf.py
  24. 0  cron/email_receive.py
  25. 0  cron/import_job_do_import.py
  26. 0  cron/import_job_do_processing.py
  27. 0  cron/sms_handler_modem.py
  28. +22 −22 docs/VM.txt
  29. +21 −21 docs/epydoc.conf
  30. +4,645 −4,645 languages/ar.py
  31. +72 −2 languages/de.py
  32. +5,366 −5,366 languages/el.py
  33. +4,692 −4,692 languages/en-gb.py
  34. +6,594 −6,594 languages/es.py
  35. +5,486 −5,486 languages/fr.py
  36. +4,607 −4,607 languages/it.py
  37. +5,837 −5,837 languages/ja.py
  38. +4,607 −4,607 languages/ko.py
  39. +4,818 −4,818 languages/pt-br.py
  40. +4,778 −4,778 languages/pt.py
  41. +4,608 −4,608 languages/ru.py
  42. +847 −847 languages/tl.py
  43. +5,672 −5,672 languages/ur.py
  44. +5,410 −5,410 languages/vi.py
  45. +4,607 −4,607 languages/zh-cn.py
  46. +6,059 −6,059 languages/zh-tw.py
  47. 0  models/00_settings.py
  48. 0  models/01_menu.py
  49. 0  models/04_pr.py
  50. 0  models/zz_last.py
  51. 0  modules/ClimateDataPortal/import_tabbed_readings.py
  52. 0  modules/EXIF.py
  53. 0  modules/__init__.py
  54. 0  modules/arial10.py
  55. 0  modules/fixed_datetime.py
  56. 0  modules/jsonrpclib.py
  57. +3,767 −3,767 modules/pyparsing.py
  58. 0  modules/s3/__init__.py
  59. 0  modules/s3/codecs/__init__.py
  60. +29 −29 modules/s3/pyvttbl/LICENSE.txt
  61. +10 −10 modules/s3/pyvttbl/README.txt
  62. +256 −256 modules/s3/pyvttbl/SimpleHTML.py
  63. +20 −20 modules/s3/pyvttbl/__init__.py
  64. +99 −99 modules/s3/pyvttbl/data_restructurer.py
  65. +712 −712 modules/s3/pyvttbl/dictset.py
  66. +101 −101 modules/s3/pyvttbl/guided_data_restructurer.py
  67. +957 −957 modules/s3/pyvttbl/pystaggrelite3.py
  68. +3,877 −3,877 modules/s3/pyvttbl/pyvttbl.py
  69. +688 −688 modules/s3/pyvttbl/qsturng.py
  70. +1,066 −1,066 modules/s3/pyvttbl/stats/pstat.py
  71. +4,582 −4,582 modules/s3/pyvttbl/stats/stats.py
  72. +8 −8 modules/s3/pyvttbl/stats/stats_test.py
  73. +2 −2 modules/s3/pyvttbl/test/__init__.py
  74. +49 −49 modules/s3/pyvttbl/test/error~subjectXtimeofdayXcourseXmodel_MISSING.csv
  75. +385 −385 modules/s3/pyvttbl/test/suppression~subjectXgroupXageXcycleXphase.csv
  76. +1,599 −1,599 modules/s3/pyvttbl/test/test__dictset.py
  77. +622 −622 modules/s3/pyvttbl/test/test__pystaggrelite3.py
  78. +2,158 −2,158 modules/s3/pyvttbl/test/test__pyvttbl.py
  79. +61 −61 modules/s3/pyvttbl/test/test__pyvttbl_performance.py
  80. +101 −101 modules/s3/pyvttbl/test/words~ageXcondition.csv
  81. +586 −586 modules/s3/pyvttbl/test_stats.py
  82. 0  modules/s3/s3msg.py
  83. 0  modules/sahana.py
  84. 0  modules/startup/last.py
  85. +247 −247 private/import/countries.csv
  86. +10 −10 private/import/tables/supply_item_category.csv
  87. +42 −42 private/import/tables/supply_item_pakistan.csv
  88. 0  private/prepopulate/default/project_hazard.csv
  89. 0  private/prepopulate/default/project_theme.csv
  90. 0  private/prepopulate/demo/ADAT/layoutPMI.csv
  91. 0  private/prepopulate/demo/ADAT/questionnaire72H.csv
  92. +59 −59 private/prepopulate/demo/Standard/California_L2.csv
  93. +52 −52 private/prepopulate/demo/Standard/USA_L1.csv
  94. +25 −25 private/prepopulate/import_eric.py
  95. +145 −145 private/update_check/eden_update_check.py
  96. +6 −6 run_tests.cmd
  97. +6 −6 static/ckeditor/adapters/jquery.js
  98. +149 −149 static/ckeditor/ckeditor.js
  99. +25 −25 static/ckeditor/contents.css
  100. +6 −6 static/ckeditor/lang/_languages.js
  101. +61 −61 static/ckeditor/lang/_translationstatus.txt
  102. +6 −6 static/ckeditor/lang/af.js
  103. +6 −6 static/ckeditor/lang/ar.js
  104. +6 −6 static/ckeditor/lang/bg.js
  105. +6 −6 static/ckeditor/lang/bn.js
  106. +6 −6 static/ckeditor/lang/bs.js
  107. +6 −6 static/ckeditor/lang/ca.js
  108. +6 −6 static/ckeditor/lang/cs.js
  109. +6 −6 static/ckeditor/lang/cy.js
  110. +6 −6 static/ckeditor/lang/da.js
  111. +6 −6 static/ckeditor/lang/de.js
  112. +6 −6 static/ckeditor/lang/el.js
  113. +6 −6 static/ckeditor/lang/en-au.js
Sorry, we could not display the entire diff because too many files (2,021) changed.
View
3  .gitignore
@@ -21,4 +21,5 @@
*.ttf
.~lock.*.csv#
*.log
-*.pyc
+*.pyc
+*.~*~
View
10 ABOUT 100644 → 100755
@@ -1,5 +1,5 @@
-Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
-
-It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
-
-Please see the website for more details: http://eden.sahanafoundation.org/
+Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
+
+It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
+
+Please see the website for more details: http://eden.sahanafoundation.org/
View
10 INSTALL 100644 → 100755
@@ -1,5 +1,5 @@
-Sahana Eden
------------
-This package is designed to be uploaded into a running instance of Web2Py:
-
-http://eden.sahanafoundation.org/wiki/InstallationGuidelines
+Sahana Eden
+-----------
+This package is designed to be uploaded into a running instance of Web2Py:
+
+http://eden.sahanafoundation.org/wiki/InstallationGuidelines
View
48 LICENSE 100644 → 100755
@@ -1,24 +1,24 @@
-http://en.wikipedia.org/wiki/MIT_License
-
-Copyright: 2010 (c) Sahana Software Foundation
-
-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.
+http://en.wikipedia.org/wiki/MIT_License
+
+Copyright: 2010 (c) Sahana Software Foundation
+
+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.
View
10 README 100644 → 100755
@@ -1,5 +1,5 @@
-Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
-
-It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
-
-Please see the website for more details: http://eden.sahanafoundation.org/
+Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
+
+It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
+
+Please see the website for more details: http://eden.sahanafoundation.org/
View
BIN  VERSION
Binary file not shown
View
0  __init__.py 100644 → 100755
File mode changed
View
0  controllers/admin.py 100644 → 100755
File mode changed
View
0  controllers/appadmin.py 100644 → 100755
File mode changed
View
0  controllers/auth.py 100644 → 100755
File mode changed
View
0  controllers/budget.py 100644 → 100755
File mode changed
View
0  controllers/cr.py 100644 → 100755
File mode changed
View
0  controllers/default.py 100644 → 100755
File mode changed
View
0  controllers/delphi.py 100644 → 100755
File mode changed
View
0  controllers/dvi.py 100644 → 100755
File mode changed
View
0  controllers/dvr.py 100644 → 100755
File mode changed
View
0  controllers/hms.py 100644 → 100755
File mode changed
View
0  controllers/pr.py 100644 → 100755
File mode changed
View
288 controllers/sync.py 100644 → 100755
@@ -1,144 +1,144 @@
-# -*- coding: utf-8 -*-
-
-"""
- Synchronisation, Controllers
-
- @author: Dominic König <dominic[at]aidiq[dot]com>
-"""
-
-module = request.controller
-prefix = "sync" # common table prefix
-module_name = T("Synchronization")
-
-# Options Menu (available in all Functions' Views)
-s3_menu(module)
-
-# -----------------------------------------------------------------------------
-def index():
- """ Module's Home Page """
-
- response.title = module_name
- return dict(module_name=module_name)
-
-# -----------------------------------------------------------------------------
-def config():
- """ Synchronization Settings Controller """
-
- resourcename = "config"
-
- # Get the record ID of the first and only record
- s3mgr.load("sync_config")
- table = db.sync_config
- record = db().select(table.id, limitby=(0, 1)).first()
- if not record:
- record_id = table.insert()
- else:
- record_id = record.id
-
- # Can't do anything else than update here
- r = s3mgr.parse_request(args=[str(record_id), "update"],
- extension="html")
-
- output = r(list_btn=None)
- return output
-
-# -----------------------------------------------------------------------------
-def repository():
- """ Repository Management Controller """
-
- resourcename = "repository"
-
- tabs = [(T("Configuration"), None),
- (T("Resources"), "task"),
- (T("Schedule"), "job"),
- (T("Log"), "log"),
- #(T("Conflicts"), "conflict")
- ]
-
- s3mgr.model.set_method("sync", "repository",
- method="register",
- action=s3mgr.sync)
-
- def prep(r):
- if r.interactive:
- if r.component and r.id:
- if r.component.alias == "job":
- current.s3task.configure_tasktable_crud(
- function="sync_synchronize",
- args = [r.id],
- vars = dict(user_id = auth.user.id))
- response.s3.cancel = URL(c="sync", f="repository",
- args=[str(r.id), r.component.alias])
- return True
- response.s3.prep = prep
-
- def postp(r, output):
- if r.interactive and r.id:
- if r.component and r.component.alias == "job":
- response.s3.actions = [
- dict(label=str(T("Reset")),
- _class="action-btn",
- url=URL(c="sync", f="repository",
- args=[str(r.id), "job", "[id]", "reset"]))
- ]
- s3_action_buttons(r)
- return output
- response.s3.postp = postp
-
- rheader = lambda r: sync_rheader(r, tabs=tabs)
- output = s3_rest_controller(prefix, resourcename, rheader=rheader)
- return output
-
-# -----------------------------------------------------------------------------
-def sync():
- """ Synchronization """
-
- if "resource" in request.get_vars:
- tablename = request.get_vars["resource"]
- if "_" in tablename:
-
- # URL variables from peer
- _vars = request.get_vars
- get_vars=Storage(include_deleted=True)
- if "repository" in _vars:
- get_vars.update(repository=_vars["repository"])
- if "msince" in _vars:
- get_vars.update(msince=_vars["msince"])
-
- # Request
- prefix, name = tablename.split("_", 1)
- r = s3mgr.parse_request(prefix=prefix,
- name=name,
- args=["sync"],
- get_vars=get_vars)
-
- # Response
- output = r()
- return output
-
- raise HTTP(400, body=s3mgr.ERROR.BAD_REQUEST)
-
-# -----------------------------------------------------------------------------
-def log():
- """ Log Reader """
-
- resourcename = "log"
-
- if "return" in request.get_vars:
- there = request.get_vars["return"]
- c, f = there.split(".", 1)
- list_btn = URL(c=c, f=f,
- args="sync_log")
- else:
- list_btn = URL(c="sync", f="log",
- vars=request.get_vars)
-
- list_btn = A(T("List all Entries"), _href=list_btn, _class="action-btn")
-
- output = s3_rest_controller(prefix, resourcename,
- subtitle=None,
- rheader=s3base.S3SyncLog.rheader,
- list_btn=list_btn)
- return output
-
-# END =========================================================================
+# -*- coding: utf-8 -*-
+
+"""
+ Synchronisation, Controllers
+
+ @author: Dominic König <dominic[at]aidiq[dot]com>
+"""
+
+module = request.controller
+prefix = "sync" # common table prefix
+module_name = T("Synchronization")
+
+# Options Menu (available in all Functions' Views)
+s3_menu(module)
+
+# -----------------------------------------------------------------------------
+def index():
+ """ Module's Home Page """
+
+ response.title = module_name
+ return dict(module_name=module_name)
+
+# -----------------------------------------------------------------------------
+def config():
+ """ Synchronization Settings Controller """
+
+ resourcename = "config"
+
+ # Get the record ID of the first and only record
+ s3mgr.load("sync_config")
+ table = db.sync_config
+ record = db().select(table.id, limitby=(0, 1)).first()
+ if not record:
+ record_id = table.insert()
+ else:
+ record_id = record.id
+
+ # Can't do anything else than update here
+ r = s3mgr.parse_request(args=[str(record_id), "update"],
+ extension="html")
+
+ output = r(list_btn=None)
+ return output
+
+# -----------------------------------------------------------------------------
+def repository():
+ """ Repository Management Controller """
+
+ resourcename = "repository"
+
+ tabs = [(T("Configuration"), None),
+ (T("Resources"), "task"),
+ (T("Schedule"), "job"),
+ (T("Log"), "log"),
+ #(T("Conflicts"), "conflict")
+ ]
+
+ s3mgr.model.set_method("sync", "repository",
+ method="register",
+ action=s3mgr.sync)
+
+ def prep(r):
+ if r.interactive:
+ if r.component and r.id:
+ if r.component.alias == "job":
+ current.s3task.configure_tasktable_crud(
+ function="sync_synchronize",
+ args = [r.id],
+ vars = dict(user_id = auth.user.id))
+ response.s3.cancel = URL(c="sync", f="repository",
+ args=[str(r.id), r.component.alias])
+ return True
+ response.s3.prep = prep
+
+ def postp(r, output):
+ if r.interactive and r.id:
+ if r.component and r.component.alias == "job":
+ response.s3.actions = [
+ dict(label=str(T("Reset")),
+ _class="action-btn",
+ url=URL(c="sync", f="repository",
+ args=[str(r.id), "job", "[id]", "reset"]))
+ ]
+ s3_action_buttons(r)
+ return output
+ response.s3.postp = postp
+
+ rheader = lambda r: sync_rheader(r, tabs=tabs)
+ output = s3_rest_controller(prefix, resourcename, rheader=rheader)
+ return output
+
+# -----------------------------------------------------------------------------
+def sync():
+ """ Synchronization """
+
+ if "resource" in request.get_vars:
+ tablename = request.get_vars["resource"]
+ if "_" in tablename:
+
+ # URL variables from peer
+ _vars = request.get_vars
+ get_vars=Storage(include_deleted=True)
+ if "repository" in _vars:
+ get_vars.update(repository=_vars["repository"])
+ if "msince" in _vars:
+ get_vars.update(msince=_vars["msince"])
+
+ # Request
+ prefix, name = tablename.split("_", 1)
+ r = s3mgr.parse_request(prefix=prefix,
+ name=name,
+ args=["sync"],
+ get_vars=get_vars)
+
+ # Response
+ output = r()
+ return output
+
+ raise HTTP(400, body=s3mgr.ERROR.BAD_REQUEST)
+
+# -----------------------------------------------------------------------------
+def log():
+ """ Log Reader """
+
+ resourcename = "log"
+
+ if "return" in request.get_vars:
+ there = request.get_vars["return"]
+ c, f = there.split(".", 1)
+ list_btn = URL(c=c, f=f,
+ args="sync_log")
+ else:
+ list_btn = URL(c="sync", f="log",
+ vars=request.get_vars)
+
+ list_btn = A(T("List all Entries"), _href=list_btn, _class="action-btn")
+
+ output = s3_rest_controller(prefix, resourcename,
+ subtitle=None,
+ rheader=s3base.S3SyncLog.rheader,
+ list_btn=list_btn)
+ return output
+
+# END =========================================================================
View
0  controllers/test.py 100644 → 100755
File mode changed
View
0  controllers/vol.py 100644 → 100755
File mode changed
View
0  controllers/xforms.py 100644 → 100755
File mode changed
View
0  cron/Zeroconf.py 100644 → 100755
File mode changed
View
0  cron/email_receive.py 100644 → 100755
File mode changed
View
0  cron/import_job_do_import.py 100644 → 100755
File mode changed
View
0  cron/import_job_do_processing.py 100644 → 100755
File mode changed
View
0  cron/sms_handler_modem.py 100644 → 100755
File mode changed
View
44 docs/VM.txt
@@ -1,22 +1,22 @@
-Welcome to the Sahana Eden Developer environment
-
-To launch Sahana, double-click on the Eclipse icon & start the debugger.
-
-Firefox will open on the local site & also has other Bookmarks
-
-You should Register in Sahana - 1st user will get Admin rights.
-
-To view the Filesystem in Eclipse, click on the 'PyDev' button in the upper-right of the screen.
-
-For the ticket viewer:
-Admin password: eden
-
-To open an interactive Python shell in the Sahana environment, open the terminal & type:
-w2p
-
-To update this virtual machine, open the terminal & type:
-update
-
-Password for the Sahana user: eden
-
-Happy coding!
+Welcome to the Sahana Eden Developer environment
+
+To launch Sahana, double-click on the Eclipse icon & start the debugger.
+
+Firefox will open on the local site & also has other Bookmarks
+
+You should Register in Sahana - 1st user will get Admin rights.
+
+To view the Filesystem in Eclipse, click on the 'PyDev' button in the upper-right of the screen.
+
+For the ticket viewer:
+Admin password: eden
+
+To open an interactive Python shell in the Sahana environment, open the terminal & type:
+w2p
+
+To update this virtual machine, open the terminal & type:
+update
+
+Password for the Sahana user: eden
+
+Happy coding!
View
42 docs/epydoc.conf 100644 → 100755
@@ -1,21 +1,21 @@
-[epydoc] # Epydoc section marker (required by ConfigParser)
-
-# Information about the project.
-name: Sahana-Eden
-url: http://eden.sahanafoundation.org/
-
-# The list of modules to document. Modules can be named using
-# dotted names, module filenames, or package directory names.
-# This option may be repeated.
-#modules: modules/sahana.py, modules/s3_test.py, modules/t2.py, modules/validators.py, models/__db.py, models/__pr.py, models/_gis.py, models/cr.py, models/or.py, controllers/default.py, controllers/appadmin.py, controllers/gis.py, controllers/or.py, controllers/cr.py, controllers/pr.py
-#modules: modules/*.py, models/*.py, controllers/*.py
-modules: modules/*.py
-
-# Write html output to a directory
-output: html
-target: docs/html/
-
-# Include all automatically generated graphs. These graphs are
-# generated using Graphviz dot.
-#graph: all
-#dotpath: /usr/local/bin/dot
+[epydoc] # Epydoc section marker (required by ConfigParser)
+
+# Information about the project.
+name: Sahana-Eden
+url: http://eden.sahanafoundation.org/
+
+# The list of modules to document. Modules can be named using
+# dotted names, module filenames, or package directory names.
+# This option may be repeated.
+#modules: modules/sahana.py, modules/s3_test.py, modules/t2.py, modules/validators.py, models/__db.py, models/__pr.py, models/_gis.py, models/cr.py, models/or.py, controllers/default.py, controllers/appadmin.py, controllers/gis.py, controllers/or.py, controllers/cr.py, controllers/pr.py
+#modules: modules/*.py, models/*.py, controllers/*.py
+modules: modules/*.py
+
+# Write html output to a directory
+output: html
+target: docs/html/
+
+# Include all automatically generated graphs. These graphs are
+# generated using Graphviz dot.
+#graph: all
+#dotpath: /usr/local/bin/dot
View
9,290 languages/ar.py
4,645 additions, 4,645 deletions not shown
View
74 languages/de.py
@@ -7,6 +7,7 @@
'%(msg)s\nIf the request type is "%(type)s", please enter the %(type)s on the next screen.': '%(msg)s\n Wenn der Anforderungstyp ist "%(type)s", bitte geben sie die %(type)s auf der nächsten Seite ein.',
'%(system_name)s - Verify Email': '%(system_name)s - Email überprüfen',
'%.1f km': '%.1f km',
+'%Y-%m-%d': '%Y-%m-%d',
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
'%m-%d-%Y': '%m-%d-%Y',
'%m-%d-%Y %H:%M:%S': '%m-%d-%Y %H:%M:%S',
@@ -15,6 +16,7 @@
'& then click on the map below to adjust the Lat/Lon fields': '& anschließend klicken Sie auf die Karte weiter unten um die Längen- und Breitengradwerte zu korrigieren',
"'Cancel' will indicate an asset log entry did not occur": "'Abbrechen' wird angeben, dass ein Asset Log Eintrag nicht eingetreten ist",
'* Required Fields': '* erforderliche Felder',
+'-': '-',
'0-15 minutes': '0 - 15 Minuten',
'1 Assessment': '1 Bewertung',
'1 location, shorter time, can contain multiple Tasks': '1 Position, kürzere Zeit, kann mehrere Aufgaben beinhalten',
@@ -87,6 +89,7 @@
'Activity Report': 'Aktionsreport',
'Activity Reports': 'Aktionsberichte',
'Activity Type': 'Aktionstyp',
+'Activity Types': 'Activity Types',
'Activity Updated': 'Aktion aktualisiert',
'Activity added': 'Activity added',
'Activity removed': 'Activity removed',
@@ -105,6 +108,7 @@
'Add Baseline': 'Basislinie hinzufügen',
'Add Baseline Type': 'Basislinien-Typ hinzufügen',
'Add Bed Type': 'Bett-Typ hinzufügen',
+'Add Beneficiary Type': 'Add Beneficiary Type',
'Add Brand': 'Marke hinzufügen',
'Add Budget': 'Budget hinzufügen',
'Add Bundle': 'Paket hinzufügen',
@@ -173,6 +177,7 @@
'Add Need Type': 'Bedarfstyp hinzufügen',
'Add New': 'Neues hinzufügen',
'Add New Activity': 'Neue Aktivität hinzufügen',
+'Add New Activity Type': 'Add New Activity Type',
'Add New Address': 'Neue Adresse hinzufügen',
'Add New Alternative Item': 'Neuen alternativen Artikel hinzufügen',
'Add New Assessment': 'Neue Beurteilung hinzufügen',
@@ -187,9 +192,11 @@
'Add New Camp Service': 'Neues Camp Service hinzufügen',
'Add New Camp Type': 'Neues Camp Typ hinzufügen',
'Add New Catalog': 'Neuen Katalog hinzufügen',
+'Add New Certificate': 'Add New Certificate',
'Add New Cluster': 'Hinzufügen eines neuen Cluster',
'Add New Cluster Subsector': 'Hinzufügen eines neuen Cluster Teilsektor',
'Add New Commitment Item': 'Hinzufügen neuer ENGAGEMENT Element',
+'Add New Competency Rating': 'Add New Competency Rating',
'Add New Contact': 'Neuen Kontakt Hinzufügen',
'Add New Credential': 'Neuen Berechtigungsnachweis hinzufügen',
'Add New Document': 'Neues Dokument hinzufügen',
@@ -213,6 +220,7 @@
'Add New Item Category': 'Neues Element Kategorie hinzufügen',
'Add New Item Pack': 'Neues Pack Element hinzufügen',
'Add New Item to Kit': 'Neues Element hinzufügen zu Kit',
+'Add New Job Role': 'Add New Job Role',
'Add New Key': 'Neuen Schlüssel hinzufügen',
'Add New Kit': 'Hinzufügen neuer Kits',
'Add New Layer': 'Neue Ebene hinzufügen',
@@ -255,6 +263,7 @@
'Add New Shelter Service': 'Neuen Unterkunftsservice hinzufuegen',
'Add New Shelter Type': 'Neuen Unterkunftstyp hinzufuegen',
'Add New Skill': 'Neues Fachgebiet hinzufügen',
+'Add New Skill Type': 'Add New Skill Type',
'Add New Solution': 'Neue Lösung hinzufügen',
'Add New Staff Member': 'Neuen Mitarbeiter hinzufügen',
'Add New Staff Type': 'Neue Mitarbeitertype hinzufügen',
@@ -284,6 +293,7 @@
'Add Position': 'Position hinzufügen',
'Add Problem': 'Problem hinzufügen',
'Add Project': 'Projekt hinzufügen',
+'Add Project Site': 'Add Project Site',
'Add Projection': 'Projektion hinzufügen',
'Add Question': 'Frage hinzufügen',
'Add Rapid Assessment': 'Schnelle Beurteilung hinzufügen',
@@ -333,6 +343,7 @@
'Add a Person': 'Benutzer hinzufügen',
'Add a Reference Document such as a file, URL or contact person to verify this data. If you do not enter a Reference Document, your email will be displayed instead.': 'Fügen Sie ein Referenzdokument wie z. B. eine Datei, URL oder einen Ansprechpartner zur überprüfung dieser Daten ein. Wenn Sie kein Referenzdokument angeben, wird stattdessen ihre Mailadresse angezeigt.',
'Add a Volunteer': 'einen Freiwilligen hinzufügen',
+'Add a new beneficiary type': 'Add a new beneficiary type',
'Add a new certificate to the catalog.': 'Hinzufügen eines neuen Zertifikats im Katalog',
'Add a new competency rating to the catalog.': 'Neue Kompetenzbeurteilung zum Katalog hinzufügen',
'Add a new course to the catalog.': 'Neuen Kurse zum Katalog hinzufügen',
@@ -417,9 +428,11 @@
'Application Deadline': 'Anwendung Frist',
'Approve': 'Bestätigen',
'Approved': 'Genehmigt',
+'Approved By': 'Approved By',
'Approver': 'Genehmiger',
'Arabic': 'Arabic',
'Arctic Outflow': 'Arktischer Abfluss',
+'Are you sure you want to delete this record?': 'Are you sure you want to delete this record?',
'Areas inspected': 'Bereiche inspiziert',
'As of yet, no sections have been added to this template.': 'As of yet, no sections have been added to this template.',
'Assessment': 'Beurteilungen',
@@ -491,7 +504,6 @@
'Available until': 'Verfügbar bis',
'Avalanche': 'Lawine',
'Avoid the subject event as per the <instruction>': 'Vermeiden das Thema Ereignis als je<instruction>',
-'Background Color': 'Background Color',
'Background Color': 'Hintergrunfarbe',
'Background Color for Text blocks': 'Hintergrundfarbe für Textblöcke',
'Bahai': 'Bahai',
@@ -528,6 +540,7 @@
'Bed Type': 'Bett Typ',
'Bed type already registered': 'Bett Typ bereits registriert',
'Below ground level': 'Unter dem Erdgeschoss',
+'Beneficiaries': 'Beneficiaries',
'Beneficiary Type': 'Begünstigter Typ',
"Bing Layers cannot be displayed if there isn't a valid API Key": "Bing Layers cannot be displayed if there isn't a valid API Key",
'Biological Hazard': 'Biologisches Risiko',
@@ -719,6 +732,7 @@
'Clinical Status': 'Klinischer Status',
'Close map': 'Close map',
'Closed': 'Geschlossen',
+'Closed?': 'Closed?',
'Clothing': 'Kleidung',
'Cluster': 'Gruppe',
'Cluster Details': 'Cluster-Details',
@@ -750,6 +764,7 @@
'Combined Method': 'kombinierte Methode',
'Come back later.': 'Kommen Sie später noch einmal',
'Come back later. Everyone visiting this site is probably experiencing the same problem as you.': 'Kommen Sie später noch einmal Jeder, der dieses Gelände besucht hat voraussichtlich das gleiche Problem wie Sie.',
+'Comment': 'Comment',
'Comments': 'Kommentare',
'Commercial/Offices': 'Kommerziell / Büros',
'Commit': 'Festschreiben',
@@ -841,6 +856,7 @@
'Cost Type': 'Kostentyp',
'Cost per Megabyte': 'Kosten pro Megabyte',
'Cost per Minute': 'Kosten pro Minute',
+'Countries': 'Countries',
'Country': 'Land',
'Country of Residence': 'Land, in dem sich Wohnsitz befindet',
'County': 'Bezirk',
@@ -851,7 +867,6 @@
'Course Certificate deleted': 'Kurszertifikat gelöscht',
'Course Certificate updated': 'Kurszertifikat aktualisiert',
'Course Certificates': 'Kurszertifikate',
-'Course Certificates': 'Kurszertifikate',
'Course Details': 'Kursdetails',
'Course added': 'Kurs hinzugefügt',
'Course deleted': 'Kurs gelöscht',
@@ -863,8 +878,10 @@
'Create Impact Assessment': 'Folgenabschätzung erstellen',
'Create Mobile Impact Assessment': 'Erstellen Sie Mobile Folgenabschätzung',
'Create New Asset': 'Neues Anlagegut hinzufügen',
+'Create New Catalog': 'Create New Catalog',
'Create New Catalog Item': 'Neues Katalogartikel hinzufügen',
'Create New Event': 'Neues Ereignis erstellen',
+'Create New Item': 'Create New Item',
'Create New Item Category': 'Neue Kategorie für Artikel erstellen',
'Create New Request': 'Neue Anfrage erstellen',
'Create New Scenario': 'Neues Szenario erstellen',
@@ -937,9 +954,12 @@
'Date': 'Datum',
'Date & Time': 'Datum und Zeit',
'Date Available': 'Datensatz verfügbar',
+'Date Due': 'Date Due',
+'Date Expected': 'Date Expected',
'Date Received': 'Eingangsdatum',
'Date Requested': 'Datum der Anfrage',
'Date Required': 'Datum erforderlich',
+'Date Required Until': 'Date Required Until',
'Date Sent': 'Sendedatum',
'Date Until': 'Datum Bis',
'Date and Time': 'Datum und Zeit',
@@ -949,6 +969,8 @@
'Date of Report': 'Datum des Berichts',
'Date of Treatment': 'Date of Treatment',
'Date/Time': 'Datum/Zeit',
+'Date/Time of Alert': 'Date/Time of Alert',
+'Date/Time of Dispatch': 'Date/Time of Dispatch',
'Date/Time of Find': 'Datum/Zeit des Fundes',
'Date/Time when found': 'Datum / Uhrzeit, wenn festgestellt',
'Date/Time when last seen': 'Datum / Uhrzeit, wenn zuletzt gesehen',
@@ -1098,6 +1120,7 @@
'Desire to remain with family': 'Wunsch bei der Familie zu bleiben',
'Destination': 'Ziel',
'Destroyed': 'zerstört',
+'Detailed Description': 'Detailed Description',
'Details': 'Details',
'Details field is required!': 'Detailfeld ist erforderlich!',
'Dialysis': 'Dialyse',
@@ -1117,6 +1140,7 @@
'Discussion Forum': 'Diskussionsforum',
'Discussion Forum on item': 'Diskussionsforum über Eintrag',
'Disease vectors': 'Krankheitsvektoren',
+'Dispatch Time': 'Dispatch Time',
'Dispensary': 'Ambulatorium',
'Displaced': 'Vertriebenen',
'Displaced Populations': 'Heimatlose Bevölkerung',
@@ -1428,6 +1452,7 @@
'Exits': 'Ausgänge',
'Expected Return Home': 'Expected Return Home',
'Experience': 'Erfahrung',
+'Expiry (months)': 'Expiry (months)',
'Expiry Date': 'Ablaufdatum',
'Explosive Hazard': 'Explosionsgefahr',
'Export': 'Export',
@@ -1567,7 +1592,9 @@
'Full beard': 'Vollbart',
'Fullscreen Map': 'Großbild Karte',
'Functions available': 'Funktionen verfügbar',
+'Funding': 'Funding',
'Funding Organization': 'Finanzierende Organisation',
+'Funds Contributed by this Organization': 'Funds Contributed by this Organization',
'Funeral': 'Beerdigung',
'Further Action Recommended': 'Weitere empfohlene Aktivität',
'GIS Reports of Shelter': 'GIS-Berichte von Shelter',
@@ -1624,6 +1651,7 @@
'Government UID': 'Regierungs-UID',
'Government building': 'Regierungsgebäude',
'Grade': 'Klasse',
+'Greater than 10 matches. Please refine search further': 'Greater than 10 matches. Please refine search further',
'Greek': 'Griechisch',
'Green': 'Grün',
'Ground movement, fissures': 'Bewegung des Bodens, Risse',
@@ -1645,6 +1673,7 @@
'Groups': 'Gruppen',
'Groups removed': 'Gruppen entfernt',
'Guest': 'Gast',
+'HFA Priorities': 'HFA Priorities',
'HR Manager': 'Personalmanager',
'Hail': 'Hagel',
'Hair Color': 'Haarfarbe',
@@ -1656,6 +1685,7 @@
'Hazard Pay': 'Gefahrenzulage',
'Hazardous Material': 'Gefahrengut',
'Hazardous Road Conditions': 'Gefährliche Strassenverhältnisse',
+'Hazards': 'Hazards',
'Header Background': 'Hintergrund der Kopfzeile',
'Header background file %s missing!': 'Hintergrund der Kopfzeile Datei %s fehlt!',
'Headquarters': 'Hauptquartier',
@@ -1793,6 +1823,7 @@
"If you don't see the Hospital in the list, you can add a new one by clicking link 'Add Hospital'.": "Wenn sie das Krankenhaus nicht in der Liste finden, können Sie ein neues hinzufügen, indem sie den Link 'Krankenhaus hinzufügen' anklicken.",
"If you don't see the Office in the list, you can add a new one by clicking link 'Add Office'.": "Wenn sie das Büro nicht in der Liste finden, können Sie ein neues hinzufügen, indem sie den Link 'Büro hinzufügen' anklicken.",
"If you don't see the Organization in the list, you can add a new one by clicking link 'Add Organization'.": 'Wenn sie die Organisation nicht in der Liste sehen, dann können sie einen neue hinzufügen indem sie auf den Link "Organisation hinzufügen" klicken.',
+"If you don't see the site in the list, you can add a new one by clicking link 'Add Project Site'.": "If you don't see the site in the list, you can add a new one by clicking link 'Add Project Site'.",
'If you know what the Geonames ID of this location is then you can enter it here.': 'Wenn sie die Geonames ID Lokation wissen, dann können sie sie hier eingeben.',
'If you know what the OSM ID of this location is then you can enter it here.': 'Wenn sie die OSM ID dieser Lokation wissen, dann können sie sie hier eingeben.',
'If you need to add a new document then you can click here to attach one.': 'Wenn sie ein neues Dokument hinzufügen wollen, dann können sie hier klicken um eines anzufügen.',
@@ -1824,6 +1855,7 @@
'Impacts': 'Auswirkungen',
'Import': 'Importieren',
'Import & Export Data': 'Importiere & Exportiere Daten',
+'Import Assets': 'Import Assets',
'Import Data': 'Importiere Daten',
'Import File': 'Import File',
'Import File Details': 'Import File Details',
@@ -1832,6 +1864,9 @@
'Import Job Count': 'Import Job Count',
'Import Jobs': 'Import Jobs',
'Import New File': 'Import New File',
+'Import Project Activities': 'Import Project Activities',
+'Import Project Organisations': 'Import Project Organisations',
+'Import Projects': 'Import Projects',
'Import and Export': 'Import und Export',
'Import from Ushahidi Instance': 'Import aus Ushahidi INSTANZ',
'Import if Master': 'Wenn Master importieren',
@@ -1851,6 +1886,7 @@
'Inbound Mail Settings': 'Eingehende Mail-Einstellungen',
'Incident': 'Vorfall',
'Incident Categories': 'Vorfall Kategorien',
+'Incident Commander': 'Incident Commander',
'Incident Report': 'Vorfall Report',
'Incident Report Details': 'Details über Incident-Berichte (Vorfälle)',
'Incident Report added': 'Vorfall Report hinzugefügt',
@@ -1949,6 +1985,7 @@
'Item removed from Inventory': 'Element aus dem Bestand entfernt',
'Item updated': 'Element aktualisiert',
'Items': 'Artikel',
+'Items in Category are Vehicles': 'Items in Category are Vehicles',
'Items in Category can be Assets': 'Elemente in der Kategorie können Bestände werden',
'Japanese': 'Japanisch',
'Jerry can': 'Jerry kann',
@@ -2054,18 +2091,24 @@
'List / Add Types': 'Typen auflisten / hinzufügen',
'List Activities': 'Aktivitäten auflisten',
'List All': 'Alle auflisten',
+'List All Activities': 'List All Activities',
+'List All Activity Types': 'List All Activity Types',
'List All Assets': 'Alle Bestände auflisten',
'List All Catalog Items': 'Auflisten aller Artikel aus dem Katalog',
+'List All Catalogs & Add Items to Catalogs': 'List All Catalogs & Add Items to Catalogs',
'List All Commitments': 'Auflisten aller Verpflichtungen',
'List All Entries': 'Alle Einträgen auflisten',
'List All Item Categories': 'Auflisten aller Elemenkategorien',
+'List All Items': 'List All Items',
'List All Memberships': 'Alle Mitgliederschaften auflisten',
+'List All Projects': 'List All Projects',
'List All Received Shipments': 'Auflisten aller empfangenen Versendungen',
'List All Records': 'Auflisten aller Sätze',
'List All Requested Items': 'Auflisten aller angeforderten Einträge',
'List All Requested Skills': 'List All Requested Skills',
'List All Requests': 'Auflisten aller Anforderungen',
'List All Sent Shipments': 'Liste aller gesendeten Lieferungen',
+'List All Tasks': 'List All Tasks',
'List All Vehicles': 'List All Vehicles',
'List Alternative Items': 'Liste alternativer Artikel',
'List Assessment Summaries': 'Zusammenfassungen der Bewertungen auflisten',
@@ -2742,6 +2785,7 @@
'OR Reason': 'oder Grund',
'OR Status': 'oder Status',
'OR Status Reason': 'oder Statusgrund',
+'Objectives': 'Objectives',
'Observer': 'Beobachter',
'Obsolete': 'veraltet',
'Obstetrics/Gynecology': 'Geburtshilfe/Gynäkologie',
@@ -2990,6 +3034,7 @@
'Porridge': 'Haferbrei',
'Port': 'port',
'Port Closure': 'Hafenschließung',
+'Portal at': 'Portal at',
'Portuguese': 'Portuguese',
'Portuguese (Brazil)': 'Portuguese (Brazil)',
'Position': 'Position',
@@ -3032,6 +3077,7 @@
'Profile': 'profile',
'Project': 'Projekt',
'Project Details': 'Projektdetails',
+'Project Details including organizations, activities and beneficiaries': 'Project Details including organizations, activities and beneficiaries',
'Project Status': 'Projektstatus',
'Project added': 'Projekt hinzugefügt',
'Project deleted': 'Projekt gelöscht',
@@ -3061,6 +3107,7 @@
'Pull tickets from external feed': 'Pulldown tickets von externen feed',
'Punjabi': 'Punjabi',
'Purchase Date': 'Kaufdatum',
+'Purpose': 'Purpose',
'Push tickets to external system': 'Transferiere Tickets zu externen System',
'Pyroclastic Flow': 'Pyroklastischer Strom',
'Pyroclastic Surge': 'Pyroclastic Für Spitzenauslastung',
@@ -3141,6 +3188,7 @@
'Red Cross / Red Crescent': 'Rotes Kreuz / Roter Halbmond',
'Reference Document': 'Referenzdokument',
'Refresh Rate (seconds)': 'Aktualisierungsrate (sekunden)',
+'Region': 'Region',
'Region Location': 'Standort Region',
'Regional': 'Ländereinstellungen',
'Regions': 'Regionen',
@@ -3161,6 +3209,7 @@
'Rehabilitation/Long Term Care': 'Rehabilitation/langfristige Versorgung',
'Reinforced masonry': 'Mauerwerk verstärkt',
'Rejected': 'Zurückgewiesen',
+'Relationship': 'Relationship',
'Relative Details': 'Relative Details',
'Relative added': 'Relative added',
'Relative deleted': 'Relative deleted',
@@ -3234,6 +3283,7 @@
'Request Item updated': 'Anforderungselement aktualisiert',
'Request Items': 'Elemente Anfordern',
'Request New People': 'Request New People',
+'Request Number': 'Request Number',
'Request Status': 'Status anfordern',
'Request Type': 'Anforderungstyp',
'Request Updated': 'Anfrageaktualisierung',
@@ -3245,6 +3295,8 @@
'Requested': 'Angefordert',
'Requested By': 'Angefordert von',
'Requested By Facility': 'Angefordert von Einrichtung',
+'Requested For': 'Requested For',
+'Requested For Facility': 'Requested For Facility',
'Requested From': 'Angefordertes Formular',
'Requested Items': 'Angeforderte Artikel',
'Requested Skill': 'Requested Skill',
@@ -3257,6 +3309,7 @@
'Requests': 'Anforderungen',
'Requests Management': 'Anfrage-Management',
'Required Skill': 'Required Skill',
+'Required Skills': 'Required Skills',
'Requires Login!': 'Anmeldung erforderlich!',
'Rescue and recovery': 'Rettung und Wiederherstellung',
'Reset': 'Zurücksetzen',
@@ -3560,6 +3613,7 @@
'Sector updated': 'Sektor aktualisiert',
'Sector(s)': 'Sektor(en)',
'Sectors': 'Sektoren',
+'Security Required': 'Security Required',
'Security Status': 'Sicherheitsstatus',
'Security problems': 'Probleme beim Zugriffsschutz',
'See All Entries': 'Siehe alle Einträge',
@@ -3829,6 +3883,7 @@
'Subject': 'Thema',
'Submission successful - please wait': 'Übergabe erfolgreich-bitte warten',
'Submission successful - please wait...': 'Übergabe erfolgreich-bitte warten......',
+'Submit': 'Submit',
'Submit New': 'Neu übergeben',
'Submit New (full form)': 'Übergeben sie die neuen (vollständige form)',
'Submit New (triage)': 'Neu übergeben (Selektierung)',
@@ -3885,6 +3940,7 @@
'Survey Template deleted': 'Umfragenvorlage gelöscht',
'Survey Template updated': 'Umfragevorlage aktualisiert',
'Survey Templates': 'Umfragevorlagen',
+'Surveys': 'Surveys',
'Symbology': 'Symbologie',
'Sync Conflicts': 'Synchronisierungskonflikte',
'Sync History': 'Synchronisierungshistorie',
@@ -3976,6 +4032,7 @@
'The Messaging Module is the main communications hub of the Sahana system. It is used to send alerts and/or messages using SMS & Email to various groups and individuals before, during and after a disaster.': 'Das Nachrichtenmodul ist der Hauptknotenpunkt der Kommunikation des Sahana Systems. Es wird verwendet um Warnungen und/oder andere Nachrichten mit Hilfe von SMS & email an unterschiedliche Gruppen und Einzelpersonen vor, während und nach einem Katastrophenfall zu schicken.',
'The Organization Registry keeps track of all the relief organizations working in the area.': 'Das Organisationsregister gibt einen Überblick über alle Hilfsorganizationen, die in der Region arbeiten.',
'The Patient Tracking system keeps track of all the evacuated patients & their relatives.': 'The Patient Tracking system keeps track of all the evacuated patients & their relatives.',
+"The Project Tool can be used to record project Information and generate Who's Doing What Where Reports.": "The Project Tool can be used to record project Information and generate Who's Doing What Where Reports.",
'The Project Tracking module allows the creation of Activities to meet Gaps in Needs Assessments.': 'Das Projektüberwachungsmodul ermöglicht die Erstellung von Aktivitäten um Lücken in Anforderungsbewertungen zu füllen.',
'The Role this person plays within this hospital.': 'Die Rolle die diese Person im Krankenhaus spielt.',
'The Shelter Registry tracks all shelters and stores basic details regarding them. It collaborates with other modules to track people associated with a shelter, the services available etc.': 'Die Unterkunftsregistrierung protokolliert alle Unterkünfte und speichert allgemeine Details darin. Es arbeitet mit anderen Modulen zusammen, um Menschen die sich in einer Schutzunterkunft befinden, verfügbare Services etc. zu verfolgen.',
@@ -4074,6 +4131,8 @@
'Tiled': 'Tiled',
'Tilt-up concrete': 'Neigen Sie-bis konkrete',
'Timber frame': 'Holzrahmen',
+'Time Estimate': 'Time Estimate',
+'Time Taken': 'Time Taken',
'Timeline': 'Zeitplan',
'Timeline Report': 'Bericht zur Zeitachse',
'Timestamp': 'Timestamp',
@@ -4081,6 +4140,7 @@
'Title': 'Title',
'Title to show for the Web Map Service panel in the Tools panel.': 'Titel, mit der die Web Map Service-Leiste in der Werkzeugleiste angezeigt wird',
'To': 'in',
+'To Facility': 'To Facility',
'To Location': 'An Standort',
'To Person': 'zu Handen Person',
'To begin the sync process, click the button on the right =>': 'Zum Starten der Synchronisation Prozess, klicken Sie auf die Schaltfläche auf der rechten Seite =>',
@@ -4155,6 +4215,7 @@
'Transit Status': 'Transit Status',
'Transition Effect': 'Übergangseffekt',
'Transparent?': 'Transparent?',
+'Transportation Required': 'Transportation Required',
'Transportation assistance, Rank': 'Transports Unterstützung, Rank',
'Trauma Center': 'Trauma Zentrum',
'Travel Cost': 'Reisekosten',
@@ -4265,6 +4326,7 @@
'Utilities': 'Dienstprogramme',
'Utility, telecommunication, other non-transport infrastructure': 'Dienstprogramm, Telekommunikation, andere nicht-Verkehrsinfrastruktur',
'Value': 'wert',
+'Value per Pack': 'Value per Pack',
'Various Reporting functionalities': 'Verschiedene Berichts Funktionalitäten',
'Vehicle': 'Fahrzeug',
'Vehicle Crime': 'Fahrzeug Kriminalität',
@@ -4351,6 +4413,7 @@
'Wednesday': 'Mittwoch',
'Weight': 'Gewicht',
'Weight (kg)': 'Gewicht (kg)',
+'Welcome to the': 'Welcome to the',
'Welcome to the Sahana Portal at': 'Willkommen beim Sahana Portal',
'Well-Known Text': 'Bekannter Text',
'What order to be contacted in.': 'What order to be contacted in.',
@@ -4358,6 +4421,7 @@
'When reports were entered': 'Wenn Berichte eingegeben wurden',
"When syncing data with others, conflicts happen in cases when two (or more) parties want to sync information which both of them have modified, i.e. conflicting information. Sync module tries to resolve such conflicts automatically but in some cases it can't. In those cases, it is up to you to resolve those conflicts manually, click on the link on the right to go to this page.": 'Beim Synchronisieren der Daten mit anderen treten Konflikte auf in Fällen wenn beide (oder mehr) Parteien Daten geändert haben, d. h. widersprüchliche Informationen. Das Synchronisationsmodul versucht solche Konflikte automatisch zu beheben, was jedoch in manchen Fällen nicht möglich ist. In solchen Fällen ist es Ihre Aufgabe, diese Konflikte manuell zu lösen; klicken Sie auf den rechten Link, um auf diese Seite zu gelangen.',
'Whiskers': 'Ewiglich',
+'Who is doing What Where': 'Who is doing What Where',
'Who is doing what and where': 'Wer macht was und wo',
'Who usually collects water for the family?': 'Wer erfasst Normalerweise Wasser für die Familie?',
'Width (m)': 'Breite (m)',
@@ -4421,6 +4485,7 @@
'Zinc roof': 'Zinkdach',
'Zoom': 'Zoomen',
'Zoom Levels': 'Zoomebenen',
+'access granted': 'access granted',
'active': 'aktiv',
'added': 'hinzugefügt',
'all records': 'Alle Datensätze',
@@ -4466,7 +4531,9 @@
'edit': 'edit',
'eg. gas, electricity, water': 'zum Beispiel Gas, Strom, Wasser',
'enclosed area': 'eingeschlossener Bereich',
+'enter a number': 'enter a number',
'enter a number between %(min)g and %(max)g': 'enter a number between %(min)g and %(max)g',
+'enter a number greater than or equal to %(min)g': 'enter a number greater than or equal to %(min)g',
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
'export as csv file': 'Exportieren als csv-Datei',
'fat': 'fett',
@@ -4484,6 +4551,7 @@
'here': 'hier',
'high': 'Hoch',
'hourly': 'stündlich',
+'hours': 'hours',
'households': 'Haushalte',
'identified': 'identifiziert',
'ignore': 'ignorieren',
@@ -4511,6 +4579,8 @@
'male': 'männlich',
'manual': 'manuell',
'married': 'verheiratet',
+'maxExtent': 'maxExtent',
+'maxResolution': 'maxResolution',
'medium': 'mittel',
'medium<12cm': 'mittel <12 cm',
'meters': 'meter',
View
10,732 languages/el.py
5,366 additions, 5,366 deletions not shown
View
9,384 languages/en-gb.py
4,692 additions, 4,692 deletions not shown
View
13,188 languages/es.py
6,594 additions, 6,594 deletions not shown
View
10,972 languages/fr.py
5,486 additions, 5,486 deletions not shown
View
9,214 languages/it.py
4,607 additions, 4,607 deletions not shown
View
11,674 languages/ja.py
5,837 additions, 5,837 deletions not shown
View
9,214 languages/ko.py
4,607 additions, 4,607 deletions not shown
View
9,636 languages/pt-br.py
4,818 additions, 4,818 deletions not shown
View
9,556 languages/pt.py
4,778 additions, 4,778 deletions not shown
View
9,216 languages/ru.py
4,608 additions, 4,608 deletions not shown
View
1,694 languages/tl.py
847 additions, 847 deletions not shown
View
11,344 languages/ur.py
5,672 additions, 5,672 deletions not shown
View
10,820 languages/vi.py
5,410 additions, 5,410 deletions not shown
View
9,214 languages/zh-cn.py
4,607 additions, 4,607 deletions not shown
View
12,118 languages/zh-tw.py
6,059 additions, 6,059 deletions not shown
View
0  models/00_settings.py 100644 → 100755
File mode changed
View
0  models/01_menu.py 100644 → 100755
File mode changed
View
0  models/04_pr.py 100644 → 100755
File mode changed
View
0  models/zz_last.py 100644 → 100755
File mode changed
View
0  modules/ClimateDataPortal/import_tabbed_readings.py 100644 → 100755
File mode changed
View
0  modules/EXIF.py 100644 → 100755
File mode changed
View
0  modules/__init__.py 100644 → 100755
File mode changed
View
0  modules/arial10.py 100644 → 100755
File mode changed
View
0  modules/fixed_datetime.py 100644 → 100755
File mode changed
View
0  modules/jsonrpclib.py 100644 → 100755
File mode changed
View
7,534 modules/pyparsing.py
3,767 additions, 3,767 deletions not shown
View
0  modules/s3/__init__.py 100644 → 100755
File mode changed
View
0  modules/s3/codecs/__init__.py 100644 → 100755
File mode changed
View
58 modules/s3/pyvttbl/LICENSE.txt
@@ -1,29 +1,29 @@
-Copyright (c) 2011, Roger Lew [see LICENSE.txt]
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of the organizations affiliated with the
- contributors or the names of its contributors themselves may be
- used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
+Copyright (c) 2011, Roger Lew [see LICENSE.txt]
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the organizations affiliated with the
+ contributors or the names of its contributors themselves may be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
View
20 modules/s3/pyvttbl/README.txt
@@ -1,11 +1,11 @@
-
- PyvtTbl
-========================================================
- Python pivot table (contingency tables) with sqlite3
- backend.
-
-========================================================
-
- Author: Roger Lew
- Author email: rogerlew@gmail.com
+
+ PyvtTbl
+========================================================
+ Python pivot table (contingency tables) with sqlite3
+ backend.
+
+========================================================
+
+ Author: Roger Lew
+ Author email: rogerlew@gmail.com
http://code.google.com/p/pyvttbl/updates/list
View
512 modules/s3/pyvttbl/SimpleHTML.py
@@ -1,256 +1,256 @@
-#! /usr/bin/env python
-
-# Roger Lew
-# rogerlew@vandals.uidaho.edu
-# (c) 2008 BSD
-
-"""SimpleHTML Writer Module"""
-import re
-from copy import copy
-from md5 import md5
-
-def isfloat(string):
- """Returns True if string is a float"""
- try: float(string)
- except: return False
- return True
-
-def md5sum(txt):
- return md5(txt).hexdigest()
-
-def a(txt, href='', name='', target=''):
- if href!='': return """\n\t\t\t<a href="%s" target="%s">%s</a>"""%(href, target, txt)
- elif name!='': return """\n\t\t\t<a name="%s">%s</a>"""%(name, txt)
- else : return txt
-
-def div(txt, id=''):
- return """\n\t\t\t<div id="%s">%s</div>"""%(id,txt)
-
-def br(count=1):
- return """\n\t\t\t"""+"""<br/>"""*count
-
-def h(txt, level=3, align='left'):
- return """\n\t\t\t<h%i align="%s">%s</h%i>"""%(level,align,txt,level)
-
-def img(src, width=None, height=None, alt=''):
- rstr="""\n\t\t\t<img src="%s" alt="%s" """%(src,alt)
-
- if width!=None : rstr+="""width=%i """%width
- if height!=None : rstr+="""height=%i """%height
-
- return rstr+"""/>"""
-
-def pre(txt, align='left'):
- return """\n\t\t\t<pre align="%s">%s</pre>"""%(align,txt)
-
-def p(txt, align='left'):
- return """\n\t\t\t<p align="%s">%s</p>"""%(align,txt)
-
-def table(tbodys, thead=None, tfoot=None, border='1', cellpadding='8', rules='groups', frame='box'):
- s=[]
- s.append("""\n\t\t\t<table border=%s cellpadding=%s rules=%s frame=%s>"""%(border,cellpadding,rules,frame))
- if thead!=None:
- s.append("""\n\t\t\t\t<thead><tr>""")
- for x in thead:
- s.append("""<td>%s</td>"""%str(x))
- s.append("""</tr></thead>""")
-
- for tbody in tbodys:
- s.append("""\n\t\t\t\t<tbody>""")
- for x in tbody:
- s.append("""\n\t\t\t\t\t<tr>""")
- for c in x:
- if isfloat(c) : s.append("""<td align='right'>%s</td>"""%str(c))
- else : s.append("""<td>%s</td>"""%str(c))
- s.append("""</tr>""")
- s.append("""\n\t\t\t\t</tbody>""")
-
- if tfoot!=None:
- s.append("""\n\t\t\t\t<tfoot><tr>""")
- for x in tfoot:
- s.append("""<td>%s</td>"""%str(x))
- s.append("""</tr></tfoot>""")
-
- s.append("""\n\t\t\t</table>""")
-
- return ''.join(s)
-
-def ul(depth_and_txt_list):
- """
- Wants a list of tuples containing depths and txt.
- Don't know how robust this function is to depth errors.
-
- depth_and_txt_list = [ (0, 'Things I want for x-mas'),
- (1, 'Computer'),
- (1, 'Fancy shoes'),
- (0, 'New Years Resolutions'),
- (1, 'Exercise more, program less'),
- (1, 'Eat out less'),
- (2, 'Except for Taco Time'),
- (2, 'And Subway') ]
-
- yields:
-
- <ul>
- <li>Things I want for x-mas
- <ul>
- <li>Computer</li>
- <li>Fancy shoes</li>
- </ul></li>
- <li>New Years Resolutions
- <ul>
- <li>Exercise more, program less</li>
- <li>Eat out less
- <ul>
-
- <li>Except for Taco Time</li>
- <li>And Subway</li>
- </ul></li>
- </ul></li>
- </ul>
-
- """
-
- d = [depth_and_txt_list[0][0]]
- li=['\t'*d[-1]+'<ul>\n']
-
- for (req_d,txt) in depth_and_txt_list:
- if req_d == d[-1]:
- li.append('\t'*d[-1]+'<li>%s'%txt)
- li.append('</li>\n')
- d.append(req_d)
-
- elif req_d > d[-1]:
- li.pop()
- li.append('\n'+'\t'*req_d+'<ul>\n')
- li.append('\t'*req_d+'<li>%s'%txt)
- li.append('</li>\n')
- d.append(req_d)
-
- elif req_d < d[-1]:
- li.append('\t'*req_d+'</ul></li>\n')
- li.append('\t'*req_d+'<li>%s'%txt)
- li.append('</li>\n')
- d.append(req_d)
-
-
- for i in range(d[-1]-d[0]):
- li.append('\t'*d[-1]+'</ul></li>\n')
- d.append(d[-1]-1)
-
- li.append('\t'*d[-1]+'</ul>\n')
-
- return ''.join(li)
-
-class SimpleHTML:
- def __init__(self, title='', width='1000px', align='left', padding='1em', stylesheet=''):
- self.html=[]
- self.add("""\n<html>""")
- self.add("""\n\t<head>""")
-
- if title!='':
- self.add("""<title>%s</title>"""%title)
- if stylesheet!='':
- self.add("""<link rel="stylesheet" type="text/css" href="%s"/>"""%stylesheet)
-
- self.add("""</head>""")
-
- if align=='center':
- self.add("""\n\t\t<body><div style="margin:0 auto; width:%s; padding:%s;">"""%(width,padding))
- else:
- self.add("""\n\t\t<body><div style="margin:0 0; width:%s; padding:%s;">"""%(width,padding))
-
- if title!='' : self.add(h(a(title,name='0_'+md5sum(title)),1,'center'))
-
- def add(self,txt):
- self.html.append(txt)
-
- def __str__(self):
- return ''.join(self.html)+"""\n\t</div></body>\n</html>"""
-
- def write(self, fname, opt=False):
- """Closes and writes html file"""
-
- txt2write=str(self)
-
- if opt:
- txt2write=txt2write.replace('\t','')
- txt2write=txt2write.replace('\n','')
-
- fid=open(fname,'wb')
- fid.write(txt2write)
- fid.close()
-
-class NavFrame(SimpleHTML):
- def __init__(self, title='', default=0):
- SimpleHTML.__init__(self, width='500', padding='0em', stylesheet='nav.css')
-
- self.filelist=[]
- self.default=default
- self.pattern=pattern=r'<a name="(.*)">(.*)</a>'
-
- def addfile(self, fname):
- self.filelist.append(fname)
-
- dtxt=[] # list of (depths, hyperlinks)
-
- fid=open(fname,'r')
- matches=re.findall(self.pattern, fid.read())
- fid.close()
-
- for (href,txt) in matches:
- d=int(href[0])
- txt=txt.replace('Estimated Marginal Means for ','')
- txt=txt.replace('Summary Plot of ','')
- href='%s#%s'%(fname,href)
- dtxt.append((d, a(txt,href=href,target='showframe')))
-
- self.add(ul(dtxt))
- self.add(p(' '))
-
- def addfiles(self, filelist):
- for fname in filelist:
- self.addfile(fname)
-
- def getfilelist(self):
- return copy(self.filelist)
-
- def changedefault(self,index):
- self.default=index
-
- def getdefault(self,index):
- return copy(self.default)
-
- def build(self, fname='index.htm'):
-
- self.write('nav.htm')
-
- # nav stylesheet
- fid=open('nav.css','wb')
- fid.write('a { text-decoration:none; color:black; }\n')
- fid.write('a:hover { color:blue; }\n')
- fid.write('ul { list-style-type: none; padding:0; margin:0; }\n')
- fid.write('ul ul li a { margin-left: 15px; }\n')
- fid.write('ul ul ul li a { margin-left: 30px; }\n')
- fid.close()
-
- # write index
- fid=open(fname,'wb')
- fid.write('<html>\n')
- fid.write('<frameset cols="200,*">\n')
- fid.write('<frame src="nav.htm">\n')
- fid.write('<frame src="%s" name="showframe">\n'%self.filelist[self.default])
- fid.write('</frameset>\n')
- fid.write('</html>\n')
- fid.close()
-
-##html=SimpleHTML('Simple HTML Test')
-##html.add(p('This is a python class to write html'))
-##html.add(table([[[10,20,30],[40,50,60]],
-## [[70,80,90],[10,11,12]]],
-## thead=['A','B','C']))
-##html.add(img('that.png',width=1000))
-##
-##print ''.join(html.html)
-##
-##html.write('simpleHTML.htm')
+#! /usr/bin/env python
+
+# Roger Lew
+# rogerlew@vandals.uidaho.edu
+# (c) 2008 BSD
+
+"""SimpleHTML Writer Module"""
+import re
+from copy import copy
+from md5 import md5
+
+def isfloat(string):
+ """Returns True if string is a float"""
+ try: float(string)
+ except: return False
+ return True
+
+def md5sum(txt):
+ return md5(txt).hexdigest()
+
+def a(txt, href='', name='', target=''):
+ if href!='': return """\n\t\t\t<a href="%s" target="%s">%s</a>"""%(href, target, txt)
+ elif name!='': return """\n\t\t\t<a name="%s">%s</a>"""%(name, txt)
+ else : return txt
+
+def div(txt, id=''):
+ return """\n\t\t\t<div id="%s">%s</div>"""%(id,txt)
+
+def br(count=1):
+ return """\n\t\t\t"""+"""<br/>"""*count
+
+def h(txt, level=3, align='left'):
+ return """\n\t\t\t<h%i align="%s">%s</h%i>"""%(level,align,txt,level)
+
+def img(src, width=None, height=None, alt=''):
+ rstr="""\n\t\t\t<img src="%s" alt="%s" """%(src,alt)
+
+ if width!=None : rstr+="""width=%i """%width
+ if height!=None : rstr+="""height=%i """%height
+
+ return rstr+"""/>"""
+
+def pre(txt, align='left'):
+ return """\n\t\t\t<pre align="%s">%s</pre>"""%(align,txt)
+
+def p(txt, align='left'):
+ return """\n\t\t\t<p align="%s">%s</p>"""%(align,txt)
+
+def table(tbodys, thead=None, tfoot=None, border='1', cellpadding='8', rules='groups', frame='box'):
+ s=[]
+ s.append("""\n\t\t\t<table border=%s cellpadding=%s rules=%s frame=%s>"""%(border,cellpadding,rules,frame))
+ if thead!=None:
+ s.append("""\n\t\t\t\t<thead><tr>""")
+ for x in thead:
+ s.append("""<td>%s</td>"""%str(x))
+ s.append("""</tr></thead>""")
+
+ for tbody in tbodys:
+ s.append("""\n\t\t\t\t<tbody>""")
+ for x in tbody:
+ s.append("""\n\t\t\t\t\t<tr>""")
+ for c in x:
+ if isfloat(c) : s.append("""<td align='right'>%s</td>"""%str(c))
+ else : s.append("""<td>%s</td>"""%str(c))
+ s.append("""</tr>""")
+ s.append("""\n\t\t\t\t</tbody>""")
+
+ if tfoot!=None:
+ s.append("""\n\t\t\t\t<tfoot><tr>""")
+ for x in tfoot:
+ s.append("""<td>%s</td>"""%str(x))
+ s.append("""</tr></tfoot>""")
+
+ s.append("""\n\t\t\t</table>""")
+
+ return ''.join(s)
+
+def ul(depth_and_txt_list):
+ """
+ Wants a list of tuples containing depths and txt.
+ Don't know how robust this function is to depth errors.
+
+ depth_and_txt_list = [ (0, 'Things I want for x-mas'),
+ (1, 'Computer'),
+ (1, 'Fancy shoes'),
+ (0, 'New Years Resolutions'),
+ (1, 'Exercise more, program less'),
+ (1, 'Eat out less'),
+ (2, 'Except for Taco Time'),
+ (2, 'And Subway') ]
+
+ yields:
+
+ <ul>
+ <li>Things I want for x-mas
+ <ul>
+ <li>Computer</li>
+ <li>Fancy shoes</li>
+ </ul></li>
+ <li>New Years Resolutions
+ <ul>
+ <li>Exercise more, program less</li>
+ <li>Eat out less
+ <ul>
+
+ <li>Except for Taco Time</li>
+ <li>And Subway</li>
+ </ul></li>
+ </ul></li>
+ </ul>
+
+ """
+
+ d = [depth_and_txt_list[0][0]]
+ li=['\t'*d[-1]+'<ul>\n']
+
+ for (req_d,txt) in depth_and_txt_list:
+ if req_d == d[-1]:
+ li.append('\t'*d[-1]+'<li>%s'%txt)
+ li.append('</li>\n')
+ d.append(req_d)
+
+ elif req_d > d[-1]:
+ li.pop()
+ li.append('\n'+'\t'*req_d+'<ul>\n')
+ li.append('\t'*req_d+'<li>%s'%txt)
+ li.append('</li>\n')
+ d.append(req_d)
+
+ elif req_d < d[-1]:
+ li.append('\t'*req_d+'</ul></li>\n')
+ li.append('\t'*req_d+'<li>%s'%txt)
+ li.append('</li>\n')
+ d.append(req_d)
+
+
+ for i in range(d[-1]-d[0]):
+ li.append('\t'*d[-1]+'</ul></li>\n')
+ d.append(d[-1]-1)
+
+ li.append('\t'*d[-1]+'</ul>\n')
+
+ return ''.join(li)
+
+class SimpleHTML:
+ def __init__(self, title='', width='1000px', align='left', padding='1em', stylesheet=''):
+ self.html=[]
+ self.add("""\n<html>""")
+ self.add("""\n\t<head>""")
+
+ if title!='':
+ self.add("""<title>%s</title>"""%title)
+ if stylesheet!='':
+ self.add("""<link rel="stylesheet" type="text/css" href="%s"/>"""%stylesheet)
+
+ self.add("""</head>""")
+
+ if align=='center':
+ self.add("""\n\t\t<body><div style="margin:0 auto; width:%s; padding:%s;">"""%(width,padding))
+ else:
+ self.add("""\n\t\t<body><div style="margin:0 0; width:%s; padding:%s;">"""%(width,padding))
+
+ if title!='' : self.add(h(a(title,name='0_'+md5sum(title)),1,'center'))
+
+ def add(self,txt):
+ self.html.append(txt)
+
+ def __str__(self):
+ return ''.join(self.html)+"""\n\t</div></body>\n</html>"""
+
+ def write(self, fname, opt=False):
+ """Closes and writes html file"""
+
+ txt2write=str(self)
+
+ if opt:
+ txt2write=txt2write.replace('\t','')
+ txt2write=txt2write.replace('\n','')
+
+ fid=open(fname,'wb')
+ fid.write(txt2write)
+ fid.close()
+
+class NavFrame(SimpleHTML):
+ def __init__(self, title='', default=0):
+ SimpleHTML.__init__(self, width='500', padding='0em', stylesheet='nav.css')
+
+ self.filelist=[]
+ self.default=default
+ self.pattern=pattern=r'<a name="(.*)">(.*)</a>'
+
+ def addfile(self, fname):
+ self.filelist.append(fname)
+
+ dtxt=[] # list of (depths, hyperlinks)
+
+ fid=open(fname,'r')
+ matches=re.findall(self.pattern, fid.read())
+ fid.close()
+
+ for (href,txt) in matches:
+ d=int(href[0])
+ txt=txt.replace('Estimated Marginal Means for ','')
+ txt=txt.replace('Summary Plot of ','')
+ href='%s#%s'%(fname,href)
+ dtxt.append((d, a(txt,href=href,target='showframe')))
+
+ self.add(ul(dtxt))
+ self.add(p(' '))
+
+ def addfiles(self, filelist):
+ for fname in filelist:
+ self.addfile(fname)
+
+ def getfilelist(self):
+ return copy(self.filelist)
+
+ def changedefault(self,index):
+ self.default=index
+
+ def getdefault(self,index):
+ return copy(self.default)
+
+ def build(self, fname='index.htm'):
+
+ self.write('nav.htm')
+
+ # nav stylesheet
+ fid=open('nav.css','wb')
+ fid.write('a { text-decoration:none; color:black; }\n')
+ fid.write('a:hover { color:blue; }\n')
+ fid.write('ul { list-style-type: none; padding:0; margin:0; }\n')
+ fid.write('ul ul li a { margin-left: 15px; }\n')
+ fid.write('ul ul ul li a { margin-left: 30px; }\n')
+ fid.close()
+
+ # write index
+ fid=open(fname,'wb')
+ fid.write('<html>\n')
+ fid.write('<frameset cols="200,*">\n')
+ fid.write('<frame src="nav.htm">\n')
+ fid.write('<frame src="%s" name="showframe">\n'%self.filelist[self.default])
+ fid.write('</frameset>\n')
+ fid.write('</html>\n')
+ fid.close()
+
+##html=SimpleHTML('Simple HTML Test')
+##html.add(p('This is a python class to write html'))
+##html.add(table([[[10,20,30],[40,50,60]],
+## [[70,80,90],[10,11,12]]],
+## thead=['A','B','C']))
+##html.add(img('that.png',width=1000))
+##
+##print ''.join(html.html)
+##
+##html.write('simpleHTML.htm')
View
40 modules/s3/pyvttbl/__init__.py
@@ -1,20 +1,20 @@
-# Copyright (c) 2011, Roger Lew [see LICENSE.txt]
-# This software is funded in part by NIH Grant P20 RR016454.
-
-from pyvttbl import __version__, DataFrame, PyvtTbl, Ttest, Anova1way, \
- Correlation, ChiSquare1way, ChiSquare2way, Marginals, Descriptives, \
- Histogram
-
-from anova import Anova
-
-__all__ = ["DataFrame",
- "PyvtTbl",
- "Ttest",
- "Anova1way",
- "Correlation",
- "ChiSquare1way",
- "ChiSquare2way",
- "Marginals",
- "Descriptives",
- "Histogram",
- "Anova"]
+# Copyright (c) 2011, Roger Lew [see LICENSE.txt]
+# This software is funded in part by NIH Grant P20 RR016454.
+
+from pyvttbl import __version__, DataFrame, PyvtTbl, Ttest, Anova1way, \
+ Correlation, ChiSquare1way, ChiSquare2way, Marginals, Descriptives, \
+ Histogram
+
+from anova import Anova
+
+__all__ = ["DataFrame",
+ "PyvtTbl",
+ "Ttest",
+ "Anova1way",
+ "Correlation",
+ "ChiSquare1way",
+ "ChiSquare2way",
+ "Marginals",
+ "Descriptives",
+ "Histogram",
+ "Anova"]
View
198 modules/s3/pyvttbl/data_restructurer.py
@@ -1,99 +1,99 @@
-from __future__ import print_function
-
-# Copyright (c) 2011, Roger Lew [see LICENSE.txt]
-# This software is funded in part by NIH Grant P20 RR016454.
-
-# Python 2 to 3 workarounds
-import sys
-if sys.version_info[0] == 2:
- _xrange = xrange
-elif sys.version_info[0] == 3:
- _xrange = range
-
-import csv
-from pyvttbl import DataFrame, _xunique_combinations
-
-def long2wide(in_fname, id, dvs, between=[], within=[],
- covariates=[], out_fname=None, nested=True):
-
- # load in_fname into a PyvtTbl object
- print('reading "%s"...'%in_fname)
- cls = DataFrame()
- cls.read_tbl(in_fname)
-
- # loop through DVs and append within columns
- d = [sorted(set(cls[id]))]
- header = [id] + covariates + between
-
- for col in covariates+between:
- z = cls.pivot(col, cols=[id], aggregate='arbitrary')
- d.extend(list(z))
-
- # start controls whether nested factors are examined
- if nested : start = 1
- else : start = len(within)
-
- for i, dv in enumerate(dvs):
- print('\ncollaborating %s'%dv)
- for j in _xrange(start, len(within)+1):
-
- for factors in _xunique_combinations(within, j):
- print(' pivoting', factors, '...')
- z = cls.pivot(dv, rows=factors, cols=[id],
- aggregate='avg')
- d.extend(list(z))
-
- # process headers
- for names in z.rnames:
- h = '_'.join(('%s.%s'%(f, str(c)) for (f,c) in names))
- header.append('%s__%s'%(dv, h))
-
- # Now we can write the data
- if out_fname == None:
- out_fname = 'wide_data.csv'
-
- with open(out_fname,'wb') as f:
- wtr = csv.writer(f)
- wtr.writerow([n.upper() for n in header])
- wtr.writerows(zip(*d)) # transpose and write
-
-##long2wide(in_fname='long_test_data.csv',
-## id='participant',
-## dvs=['dv1','dv2'],
-## between=['bfactor1'],
-## within=['wfactor1','wfactor2','wfactor3'],
-## covariates=['cov1','cov2'],
-## out_fname='formatted.csv',
-## nested=False)
-
-##import time
-##
-##t0=time.time()
-##print('need to format data for spss... (this may take a few minutes)')
-##
-##fname='collaborated.csv'
-##
-##covariates='age,gender,dicho_correct,dicho_misses,dicho_FA,SAAT_noncomp_correct,'\
-## 'SAAT_noncomp_incorrect,SAAT_comp_correct,SAAT_comp_incorrect'.split(',')
-##
-##within='speed,target_dir,agreement'.split(',')
-##
-##dvs='correct_decision_raw,decision_at_safe_distance_raw,decision_distance_raw,'\
-## 'decision_latency_raw,decision_proportion_raw,decision_ttc_proportion_raw,'\
-## 'decision_ttc_raw,detection_distance_raw,detection_latency_raw,'\
-## 'detection_proportion_raw,detection_ttc_proportion_raw,detection_ttc_raw,'\
-## 'position_distance_raw,position_latency_raw,risk_level_raw,trial_raw'.split(',')
-##
-####long2wide(fname, 'participant',dvs=dvs,within=within,covariates=covariates,nested=False)
-##
-##long2wide(in_fname=fname,
-## id='participant',
-## dvs=dvs,
-## between=[],
-## within=within,
-## covariates=covariates,
-## out_fname='formatted.csv',
-## nested=True)
-##
-##print('\ndone.')
-##print(time.time()-t0)
+from __future__ import print_function
+
+# Copyright (c) 2011, Roger Lew [see LICENSE.txt]
+# This software is funded in part by NIH Grant P20 RR016454.
+
+# Python 2 to 3 workarounds
+import sys
+if sys.version_info[0] == 2:
+ _xrange = xrange
+elif sys.version_info[0] == 3:
+ _xrange = range
+
+import csv
+from pyvttbl import DataFrame, _xunique_combinations
+
+def long2wide(in_fname, id, dvs, between=[], within=[],
+ covariates=[], out_fname=None, nested=True):
+
+ # load in_fname into a PyvtTbl object
+ print('reading "%s"...'%in_fname)
+ cls = DataFrame()
+ cls.read_tbl(in_fname)