From 8e74562cc381e9f67c985ef2446e0ecb389c8c9a Mon Sep 17 00:00:00 2001 From: John-Henrique Date: Tue, 26 Jul 2011 19:55:24 -0400 Subject: [PATCH] Base de tarefas --- .htaccess | 6 + analytics.txt | 9 + app/.DS_Store | Bin 0 -> 15364 bytes app/.gitignore | 11 + app/.gitmodules | 3 + app/.htaccess | 5 + app/LICENSE.txt | 22 + app/PERSONALIZADO/config/.svn/entries | 164 + .../.svn/text-base/croogo_routes.php.svn-base | 106 + .../text-base/database-local.php.svn-base | 111 + .../.svn/text-base/database.php.svn-base | 116 + .../.svn/text-base/settings.yml.svn-base | 31 + app/PERSONALIZADO/config/croogo_routes.php | 106 + app/PERSONALIZADO/config/database-local.php | 111 + app/PERSONALIZADO/config/database.php | 116 + app/PERSONALIZADO/config/settings.yml | 31 + app/PERSONALIZADO/views/.svn/entries | 31 + app/PERSONALIZADO/views/elements/.svn/entries | 31 + .../views/elements/admin/.svn/entries | 62 + .../.svn/text-base/navigation.ctp.svn-base | 182 + .../views/elements/admin/navigation.ctp | 179 + app/README.mdown | 42 + app/VERSION.txt | 1 + app/app_controller.php | 143 + app/app_error.php | 26 + app/app_helper.php | 33 + app/app_model.php | 121 + app/config/acl.ini.php | 74 + app/config/bootstrap.php | 53 + app/config/core.php | 298 + app/config/croogo_bootstrap.php | 74 + app/config/croogo_routes.php | 106 + app/config/database.php.install | 104 + app/config/inflections.php | 70 + app/config/routes.php | 32 + app/config/schema/.DS_Store | Bin 0 -> 6148 bytes app/config/schema/data/.svn/entries | 810 +++ .../data/.svn/text-base/aco_data.php.svn-base | 1594 +++++ .../data/.svn/text-base/aro_data.php.svn-base | 46 + .../.svn/text-base/aros_aco_data.php.svn-base | 253 + .../.svn/text-base/block_data.php.svn-base | 118 + .../.svn/text-base/comment_data.php.svn-base | 31 + .../.svn/text-base/contact_data.php.svn-base | 35 + .../.svn/text-base/i18n_data.php.svn-base | 10 + .../.svn/text-base/language_data.php.svn-base | 20 + .../.svn/text-base/link_data.php.svn-base | 214 + .../.svn/text-base/menu_data.php.svn-base | 58 + .../.svn/text-base/message_data.php.svn-base | 10 + .../.svn/text-base/meta_data.php.svn-base | 18 + .../.svn/text-base/node_data.php.svn-base | 56 + .../nodes_taxonomy_data.php.svn-base | 15 + .../.svn/text-base/region_data.php.svn-base | 108 + .../.svn/text-base/role_data.php.svn-base | 31 + .../.svn/text-base/setting_data.php.svn-base | 263 + .../.svn/text-base/taxonomy_data.php.svn-base | 34 + .../.svn/text-base/term_data.php.svn-base | 34 + .../.svn/text-base/type_data.php.svn-base | 58 + .../types_vocabulary_data.php.svn-base | 34 + .../.svn/text-base/user_data.php.svn-base | 26 + .../text-base/vocabulary_data.php.svn-base | 36 + app/config/schema/data/aco_data.php | 1594 +++++ app/config/schema/data/aro_data.php | 46 + app/config/schema/data/aros_aco_data.php | 253 + app/config/schema/data/block_data.php | 118 + app/config/schema/data/comment_data.php | 31 + app/config/schema/data/contact_data.php | 35 + app/config/schema/data/i18n_data.php | 10 + app/config/schema/data/language_data.php | 20 + app/config/schema/data/link_data.php | 214 + app/config/schema/data/menu_data.php | 58 + app/config/schema/data/message_data.php | 10 + app/config/schema/data/meta_data.php | 18 + app/config/schema/data/node_data.php | 56 + .../schema/data/nodes_taxonomy_data.php | 15 + app/config/schema/data/region_data.php | 108 + app/config/schema/data/role_data.php | 31 + app/config/schema/data/setting_data.php | 263 + app/config/schema/data/taxonomy_data.php | 34 + app/config/schema/data/term_data.php | 34 + app/config/schema/data/type_data.php | 58 + .../schema/data/types_vocabulary_data.php | 34 + app/config/schema/data/user_data.php | 26 + app/config/schema/data/vocabulary_data.php | 36 + app/config/schema/db_acl.php | 74 + app/config/schema/i18n.php | 51 + app/config/schema/schema.php | 341 + app/config/schema/sessions.php | 48 + app/config/schema/sql/.svn/entries | 198 + .../sql/.svn/text-base/croogo.sql.svn-base | 479 ++ .../.svn/text-base/croogo_data.sql.svn-base | 429 ++ .../sql/.svn/text-base/db_acl.sql.svn-base | 40 + .../sql/.svn/text-base/i18n.sql.svn-base | 26 + .../sql/.svn/text-base/sessions.sql.svn-base | 16 + app/config/schema/sql/croogo.sql | 479 ++ app/config/schema/sql/croogo_data.sql | 429 ++ app/config/schema/sql/db_acl.sql | 40 + app/config/schema/sql/i18n.sql | 26 + app/config/schema/sql/sessions.sql | 16 + app/config/settings.yml.install | 24 + app/config/sql/.svn/entries | 300 + .../sql/.svn/text-base/croogo.sql.svn-base | 472 ++ .../.svn/text-base/croogo_data.sql.svn-base | 448 ++ .../sql/.svn/text-base/db_acl.php.svn-base | 79 + .../sql/.svn/text-base/db_acl.sql.svn-base | 40 + .../sql/.svn/text-base/i18n.php.svn-base | 56 + .../sql/.svn/text-base/i18n.sql.svn-base | 26 + .../sql/.svn/text-base/sessions.php.svn-base | 53 + .../sql/.svn/text-base/sessions.sql.svn-base | 16 + app/config/sql/croogo.sql | 472 ++ app/config/sql/croogo_data.sql | 448 ++ app/config/sql/db_acl.php | 79 + app/config/sql/db_acl.sql | 40 + app/config/sql/i18n.php | 56 + app/config/sql/i18n.sql | 26 + app/config/sql/sessions.php | 53 + app/config/sql/sessions.sql | 16 + app/controllers/attachments_controller.php | 216 + app/controllers/avisos_controller.php | 495 ++ app/controllers/blocks_controller.php | 159 + app/controllers/clientes_controller.php | 186 + app/controllers/codigos_controller.php | 551 ++ app/controllers/comments_controller.php | 302 + app/controllers/components/akismet.php | 391 ++ app/controllers/components/botao.php | 49 + app/controllers/components/calculadora.php | 473 ++ app/controllers/components/croogo.php | 802 +++ app/controllers/components/empty | 0 app/controllers/components/frete.php | 224 + app/controllers/components/rastreamento.php | 201 + app/controllers/components/recaptcha.php | 140 + app/controllers/contacts_controller.php | 206 + app/controllers/filemanager_controller.php | 259 + app/controllers/languages_controller.php | 124 + app/controllers/links_controller.php | 271 + app/controllers/menus_controller.php | 88 + app/controllers/messages_controller.php | 125 + app/controllers/nodes_controller.php | 748 ++ app/controllers/opcaos_controller.php | 152 + app/controllers/opcoes_controller.php | 147 + app/controllers/produtos_controller(2).php | 916 +++ app/controllers/produtos_controller.php | 1018 +++ app/controllers/produtos_controller2.php | 917 +++ app/controllers/regions_controller.php | 88 + app/controllers/roles_controller.php | 88 + app/controllers/settings_controller.php | 154 + app/controllers/terms_controller.php | 328 + app/controllers/types_controller.php | 100 + app/controllers/urls_controller.php | 62 + app/controllers/users_controller.php | 301 + app/controllers/vocabularies_controller.php | 114 + app/index.php | 19 + app/libs/croogo.php | 180 + app/libs/croogo_router.php | 67 + app/libs/empty | 0 app/locale/.DS_Store | Bin 0 -> 6148 bytes app/locale/README.mdown | 3 + app/locale/default.pot | 2352 +++++++ app/locale/eng/.DS_Store | Bin 0 -> 6148 bytes app/locale/eng/.svn/entries | 31 + app/locale/eng/LC_MESSAGES/.DS_Store | Bin 0 -> 6148 bytes app/locale/eng/LC_MESSAGES/.svn/entries | 62 + .../LC_MESSAGES/.svn/text-base/empty.svn-base | 0 app/locale/eng/LC_MESSAGES/empty | 0 app/locale/por/LC_MESSAGES/default.po | 2284 ++++++ app/models/aviso.php | 34 + app/models/behaviors/.svn/entries | 300 + .../.svn/text-base/cached.php.svn-base | 66 + .../text-base/croogo_translate.php.svn-base | 295 + .../behaviors/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/encoder.php.svn-base | 87 + .../.svn/text-base/meta.php.svn-base | 103 + .../.svn/text-base/ordered.php.svn-base | 664 ++ .../.svn/text-base/params.php.svn-base | 86 + .../behaviors/.svn/text-base/url.php.svn-base | 82 + app/models/behaviors/cached.php | 66 + app/models/behaviors/croogo_translate.php | 302 + app/models/behaviors/empty | 0 app/models/behaviors/encoder.php | 87 + app/models/behaviors/meta.php | 103 + app/models/behaviors/ordered.php | 664 ++ app/models/behaviors/params.php | 86 + app/models/behaviors/url.php | 82 + app/models/block.php | 83 + app/models/cliente.php | 110 + app/models/codigo.php | 43 + app/models/comment.php | 75 + app/models/company.php | 28 + app/models/contact.php | 83 + app/models/datasources/.svn/entries | 164 + .../datasources/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/frete_source.php.svn-base | 147 + .../.svn/text-base/imap_source.php.svn-base | 635 ++ .../rastreamento_source.php.svn-base | 41 + app/models/datasources/empty | 0 app/models/datasources/frete_source.php | 147 + app/models/datasources/imap_source.php | 635 ++ .../datasources/rastreamento_source.php | 41 + app/models/frete.php | 9 + app/models/language.php | 55 + app/models/link.php | 66 + app/models/menu.php | 81 + app/models/message.php | 64 + app/models/meta.php | 46 + app/models/node.php | 199 + app/models/opcao.php | 23 + app/models/produto.php | 204 + app/models/region.php | 82 + app/models/role.php | 61 + app/models/setting.php | 175 + app/models/taxonomy.php | 171 + app/models/term.php | 105 + app/models/type.php | 84 + app/models/user.php | 110 + app/models/vocabulary.php | 87 + app/plugins/acl/.svn/entries | 108 + .../text-base/acl_app_controller.php.svn-base | 5 + .../.svn/text-base/acl_app_model.php.svn-base | 5 + app/plugins/acl/acl_app_controller.php | 5 + app/plugins/acl/acl_app_model.php | 5 + app/plugins/acl/controllers/.DS_Store | Bin 0 -> 6148 bytes app/plugins/acl/controllers/.svn/entries | 167 + .../acl_acos_controller.php.svn-base | 75 + .../acl_actions_controller.php.svn-base | 194 + .../acl_aros_controller.php.svn-base | 75 + .../acl_permissions_controller.php.svn-base | 132 + .../acl/controllers/acl_acos_controller.php | 75 + .../controllers/acl_actions_controller.php | 194 + .../acl/controllers/acl_aros_controller.php | 75 + .../acl_permissions_controller.php | 132 + .../acl/controllers/components/.svn/entries | 96 + .../.svn/text-base/acl_filter.php.svn-base | 102 + .../.svn/text-base/acl_generate.php.svn-base | 120 + .../acl/controllers/components/acl_filter.php | 115 + .../controllers/components/acl_generate.php | 120 + app/plugins/acl/models/.svn/entries | 130 + .../.svn/text-base/acl_aco.php.svn-base | 11 + .../.svn/text-base/acl_aro.php.svn-base | 11 + .../.svn/text-base/acl_aros_aco.php.svn-base | 19 + app/plugins/acl/models/acl_aco.php | 11 + app/plugins/acl/models/acl_aro.php | 11 + app/plugins/acl/models/acl_aros_aco.php | 19 + app/plugins/acl/views/.DS_Store | Bin 0 -> 6148 bytes app/plugins/acl/views/.svn/entries | 40 + app/plugins/acl/views/acl_acos/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 13 + .../.svn/text-base/admin_edit.ctp.svn-base | 14 + .../.svn/text-base/admin_index.ctp.svn-base | 48 + app/plugins/acl/views/acl_acos/admin_add.ctp | 13 + app/plugins/acl/views/acl_acos/admin_edit.ctp | 14 + .../acl/views/acl_acos/admin_index.ctp | 48 + .../acl/views/acl_actions/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 15 + .../.svn/text-base/admin_edit.ctp.svn-base | 17 + .../.svn/text-base/admin_index.ctp.svn-base | 61 + .../acl/views/acl_actions/admin_add.ctp | 15 + .../acl/views/acl_actions/admin_edit.ctp | 17 + .../acl/views/acl_actions/admin_index.ctp | 61 + app/plugins/acl/views/acl_aros/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 13 + .../.svn/text-base/admin_edit.ctp.svn-base | 14 + .../.svn/text-base/admin_index.ctp.svn-base | 48 + app/plugins/acl/views/acl_aros/admin_add.ctp | 13 + app/plugins/acl/views/acl_aros/admin_edit.ctp | 14 + .../acl/views/acl_aros/admin_index.ctp | 48 + .../acl/views/acl_permissions/.svn/entries | 96 + .../.svn/text-base/admin_index.ctp.svn-base | 71 + .../.svn/text-base/admin_toggle.ctp.svn-base | 13 + .../acl/views/acl_permissions/admin_index.ctp | 71 + .../views/acl_permissions/admin_toggle.ctp | 13 + app/plugins/acl/webroot/.svn/entries | 31 + app/plugins/acl/webroot/js/.svn/entries | 62 + .../text-base/acl_permissions.js.svn-base | 75 + app/plugins/acl/webroot/js/acl_permissions.js | 75 + .../block-bot/block_bot_app_controller.php | 8 + .../block-bot/config/block_bot_bootstrap.php | 161 + .../block-bot/config/block_bot_routes.php | 3 + app/plugins/block-bot/config/plugin.yml | 8 + .../block-bot/models/behaviors/block_bot.php | 53 + .../views/helpers/block_bot_hook.php | 327 + app/plugins/cake_ptbr/.gitignore | 1 + app/plugins/cake_ptbr/README.textile | 10 + app/plugins/cake_ptbr/config/bootstrap.php | 17 + app/plugins/cake_ptbr/config/inflections.php | 110 + .../cake_ptbr/config/traducao_core.php | 18 + .../locale/pt_br/LC_MESSAGES/core.po | 3071 ++++++++ app/plugins/cake_ptbr/locale/pt_br/LC_TIME | 68 + .../models/behaviors/ajuste_data.php | 113 + .../models/behaviors/ajuste_float.php | 146 + .../cake_ptbr/models/behaviors/correios.php | 215 + .../cake_ptbr/models/estado_brasileiro.php | 216 + .../tests/cases/config/i18n.test.php | 63 + .../tests/cases/config/inflections.test.php | 110 + .../models/behaviors/ajuste_data.test.php | 298 + .../models/behaviors/ajuste_float.test.php | 213 + .../cases/models/behaviors/correios.test.php | 266 + .../cases/models/estado_brasileiro.test.php | 232 + .../templates/default/inflexao.test.php | 39 + .../cases/views/helpers/estados.test.php | 106 + .../cases/views/helpers/formatacao.test.php | 172 + .../tests/fixtures/produto_fixture.php | 64 + app/plugins/cake_ptbr/vendors/estados.php | 57 + .../vendors/shells/cake_ptbr_installer.php | 58 + .../default/actions/controller_actions.ctp | 141 + .../templates/default/classes/controller.ctp | 61 + .../templates/default/classes/fixture.ctp | 42 + .../templates/default/classes/model.ctp | 142 + .../shells/templates/default/classes/test.ctp | 57 + .../shells/templates/default/inflexao.php | 56 + .../shells/templates/default/views/form.ctp | 74 + .../shells/templates/default/views/home.ctp | 84 + .../shells/templates/default/views/index.ctp | 97 + .../shells/templates/default/views/view.ctp | 147 + .../cake_ptbr/views/helpers/estados.php | 49 + .../cake_ptbr/views/helpers/formatacao.php | 331 + app/plugins/example/.svn/entries | 111 + .../example_app_controller.php.svn-base | 5 + .../text-base/example_app_model.php.svn-base | 5 + app/plugins/example/config/.svn/entries | 164 + .../text-base/example_activation.php.svn-base | 85 + .../text-base/example_bootstrap.php.svn-base | 49 + .../text-base/example_routes.php.svn-base | 3 + .../config/.svn/text-base/plugin.yml.svn-base | 11 + .../example/config/example_activation.php | 85 + .../example/config/example_bootstrap.php | 49 + app/plugins/example/config/example_routes.php | 3 + app/plugins/example/config/plugin.yml | 11 + app/plugins/example/controllers/.svn/entries | 65 + .../text-base/example_controller.php.svn-base | 40 + .../controllers/components/.svn/entries | 62 + .../.svn/text-base/example.php.svn-base | 43 + .../controllers/components/example.php | 43 + .../controllers/example_controller.php | 40 + .../example/example_app_controller.php | 5 + app/plugins/example/example_app_model.php | 5 + app/plugins/example/models/.svn/entries | 31 + .../example/models/behaviors/.svn/entries | 62 + .../.svn/text-base/example.php.svn-base | 53 + .../example/models/behaviors/example.php | 53 + app/plugins/example/views/.svn/entries | 37 + .../example/views/elements/.svn/entries | 96 + .../.svn/text-base/admin_menu.ctp.svn-base | 5 + .../text-base/admin_tab_node.ctp.svn-base | 3 + .../example/views/elements/admin_menu.ctp | 5 + .../example/views/elements/admin_tab_node.ctp | 3 + .../example/views/example/.svn/entries | 96 + .../.svn/text-base/admin_index.ctp.svn-base | 4 + .../example/.svn/text-base/index.ctp.svn-base | 4 + .../example/views/example/admin_index.ctp | 4 + app/plugins/example/views/example/index.ctp | 4 + .../example/views/helpers/.svn/entries | 62 + .../.svn/text-base/example.php.svn-base | 112 + app/plugins/example/views/helpers/example.php | 112 + app/plugins/example/webroot/.svn/entries | 37 + app/plugins/example/webroot/css/.svn/entries | 62 + .../webroot/css/.svn/text-base/empty.svn-base | 0 app/plugins/example/webroot/css/empty | 0 app/plugins/example/webroot/img/.svn/entries | 62 + .../webroot/img/.svn/text-base/empty.svn-base | 0 app/plugins/example/webroot/img/empty | 0 app/plugins/example/webroot/js/.svn/entries | 62 + .../webroot/js/.svn/text-base/empty.svn-base | 0 app/plugins/example/webroot/js/empty | 0 app/plugins/extensions/.svn/entries | 102 + .../extensions_app_controller.php.svn-base | 5 + .../extensions_app_model.php.svn-base | 5 + .../extensions/controllers/.svn/entries | 130 + ...extensions_locales_controller.php.svn-base | 195 + ...extensions_plugins_controller.php.svn-base | 207 + .../extensions_themes_controller.php.svn-base | 195 + .../extensions_locales_controller.php | 195 + .../extensions_plugins_controller.php | 212 + .../extensions_themes_controller.php | 195 + .../extensions/extensions_app_controller.php | 5 + .../extensions/extensions_app_model.php | 5 + app/plugins/extensions/views/.svn/entries | 37 + .../views/extensions_locales/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 19 + .../.svn/text-base/admin_edit.ctp.svn-base | 24 + .../.svn/text-base/admin_index.ctp.svn-base | 53 + .../views/extensions_locales/admin_add.ctp | 29 + .../views/extensions_locales/admin_edit.ctp | 34 + .../views/extensions_locales/admin_index.ctp | 53 + .../views/extensions_plugins/.svn/entries | 96 + .../.svn/text-base/admin_add.ctp.svn-base | 19 + .../.svn/text-base/admin_index.ctp.svn-base | 69 + .../views/extensions_plugins/admin_add.ctp | 29 + .../views/extensions_plugins/admin_index.ctp | 69 + .../views/extensions_themes/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 19 + .../.svn/text-base/admin_editor.ctp.svn-base | 4 + .../.svn/text-base/admin_index.ctp.svn-base | 76 + .../views/extensions_themes/admin_add.ctp | 29 + .../views/extensions_themes/admin_editor.ctp | 4 + .../views/extensions_themes/admin_index.ctp | 76 + app/plugins/install/.DS_Store | Bin 0 -> 6148 bytes app/plugins/install/.svn/entries | 108 + .../install_app_controller.php.svn-base | 9 + .../text-base/install_app_model.php.svn-base | 5 + app/plugins/install/config/.DS_Store | Bin 0 -> 6148 bytes app/plugins/install/config/data/aco_data.php | 1594 +++++ app/plugins/install/config/data/aro_data.php | 46 + .../install/config/data/aros_aco_data.php | 253 + .../install/config/data/block_data.php | 118 + .../install/config/data/comment_data.php | 31 + .../install/config/data/contact_data.php | 35 + app/plugins/install/config/data/i18n_data.php | 10 + .../install/config/data/language_data.php | 20 + app/plugins/install/config/data/link_data.php | 214 + app/plugins/install/config/data/menu_data.php | 58 + .../install/config/data/message_data.php | 10 + app/plugins/install/config/data/meta_data.php | 18 + app/plugins/install/config/data/node_data.php | 56 + .../config/data/nodes_taxonomy_data.php | 15 + .../install/config/data/region_data.php | 108 + app/plugins/install/config/data/role_data.php | 31 + .../install/config/data/setting_data.php | 263 + .../install/config/data/taxonomy_data.php | 34 + app/plugins/install/config/data/term_data.php | 34 + app/plugins/install/config/data/type_data.php | 58 + .../config/data/types_vocabulary_data.php | 34 + app/plugins/install/config/data/user_data.php | 26 + .../install/config/data/vocabulary_data.php | 36 + app/plugins/install/controllers/.svn/entries | 62 + .../text-base/install_controller.php.svn-base | 245 + .../controllers/install_controller.php | 245 + .../install/install_app_controller.php | 9 + app/plugins/install/install_app_model.php | 5 + app/plugins/install/models/.svn/entries | 62 + .../.svn/text-base/install.php.svn-base | 8 + app/plugins/install/models/install.php | 8 + app/plugins/install/views/.svn/entries | 34 + .../install/views/install/.svn/entries | 164 + .../install/.svn/text-base/data.ctp.svn-base | 12 + .../.svn/text-base/database.ctp.svn-base | 30 + .../.svn/text-base/finish.ctp.svn-base | 28 + .../install/.svn/text-base/index.ctp.svn-base | 36 + app/plugins/install/views/install/data.ctp | 12 + .../install/views/install/database.ctp | 30 + app/plugins/install/views/install/finish.ctp | 28 + app/plugins/install/views/install/index.ctp | 36 + .../install/views/layouts/.svn/entries | 62 + .../.svn/text-base/install.ctp.svn-base | 39 + app/plugins/install/views/layouts/install.ctp | 39 + app/plugins/install/webroot/.svn/entries | 31 + app/plugins/install/webroot/css/.svn/entries | 62 + .../css/.svn/text-base/install.css.svn-base | 14 + app/plugins/install/webroot/css/install.css | 14 + app/plugins/rastreamento/config/plugin.yml | 6 + .../config/rastreamento_activation.php | 102 + .../config/rastreamento_bootstrap.php | 49 + .../config/rastreamento_routes.php | 38 + .../rastreamento/controllers/components/empty | 0 .../controllers/rastreamentos_controller.php | 441 ++ app/plugins/rastreamento/libs/empty | 0 .../rastreamento/models/behaviors/empty | 0 .../rastreamento/models/datasources/empty | 0 .../rastreamento/models/rastreamento.php | 116 + .../rastreamento_app_controller.php | 7 + .../rastreamento/rastreamento_app_model.php | 7 + .../rastreamento/tests/cases/behaviors/empty | 0 .../rastreamento/tests/cases/components/empty | 0 .../tests/cases/controllers/empty | 0 .../rastreamentos_controller.test.php | 25 + .../rastreamento/tests/cases/helpers/empty | 0 .../rastreamento/tests/cases/models/empty | 0 .../tests/cases/models/rastreamento.test.php | 16 + app/plugins/rastreamento/tests/fixtures/empty | 0 .../tests/fixtures/rastreamento_fixture.php | 24 + app/plugins/rastreamento/tests/groups/empty | 0 .../rastreamento/vendors/correios/LICENSE | 27 + .../rastreamento/vendors/correios/README | 1 + .../rastreamento/vendors/correios/correio.php | 98 + .../vendors/correios/rss/index.php | 37 + .../vendors/correios/samples/class.php | 51 + .../vendors/correios/samples/webservice.php | 50 + .../vendors/correios/webservice/index.php | 67 + .../vendors/correios/webservice/x2xml.php | 30 + .../rastreamento/vendors/correios/x2xml.php | 30 + app/plugins/rastreamento/vendors/empty | 0 .../rastreamento/vendors/shells/tasks/empty | 0 .../views/elements/admin_menu.ctp | 6 + .../views/elements/email/html/aviso.ctp | 79 + .../views/elements/email/text/aviso.ctp | 72 + .../rastreamento/views/layouts/json/ajax.ctp | 8 + .../views/layouts/json/default.ctp | 8 + .../views/layouts/rss/default.ctp | 3 + .../views/layouts/webservice/webservice.ctp | 3 + .../rastreamento/views/rastreamentos/add.ctp | 48 + .../views/rastreamentos/admin_add.ctp | 21 + .../views/rastreamentos/admin_edit.ctp | 24 + .../views/rastreamentos/admin_index.ctp | 53 + .../views/rastreamentos/admin_view.ctp | 55 + .../views/rastreamentos/automatico.ctp | 1 + .../rastreamento/views/rastreamentos/edit.ctp | 21 + .../views/rastreamentos/index.ctp | 51 + .../rastreamento/views/rastreamentos/rss.ctp | 60 + .../rastreamento/views/rastreamentos/view.ctp | 30 + .../views/rastreamentos/webservice.ctp | 41 + .../rastreamento/webroot/css/style.css | 18 + app/plugins/rastreamento/webroot/empty | 0 app/plugins/tinymce/.svn/entries | 37 + app/plugins/tinymce/config/.svn/entries | 96 + .../config/.svn/text-base/plugin.yml.svn-base | 6 + .../text-base/tinymce_bootstrap.php.svn-base | 32 + app/plugins/tinymce/config/plugin.yml | 6 + .../tinymce/config/tinymce_bootstrap.php | 32 + app/plugins/tinymce/views/.svn/entries | 31 + .../tinymce/views/helpers/.svn/entries | 62 + .../.svn/text-base/tinymce.php.svn-base | 131 + app/plugins/tinymce/views/helpers/tinymce.php | 131 + app/plugins/tinymce/webroot/.svn/entries | 31 + app/plugins/tinymce/webroot/js/.svn/entries | 142 + .../js/.svn/text-base/license.txt.svn-base | 504 ++ .../js/.svn/text-base/tiny_mce.js.svn-base | 1 + .../.svn/text-base/tiny_mce_popup.js.svn-base | 5 + .../tinymce/webroot/js/langs/.svn/entries | 62 + .../js/langs/.svn/text-base/en.js.svn-base | 170 + app/plugins/tinymce/webroot/js/langs/en.js | 170 + app/plugins/tinymce/webroot/js/license.txt | 504 ++ .../tinymce/webroot/js/plugins/.svn/entries | 133 + .../webroot/js/plugins/advhr/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 57 + .../advhr/.svn/text-base/rule.htm.svn-base | 57 + .../webroot/js/plugins/advhr/css/.svn/entries | 62 + .../css/.svn/text-base/advhr.css.svn-base | 5 + .../webroot/js/plugins/advhr/css/advhr.css | 5 + .../webroot/js/plugins/advhr/editor_plugin.js | 1 + .../js/plugins/advhr/editor_plugin_src.js | 57 + .../webroot/js/plugins/advhr/js/.svn/entries | 62 + .../advhr/js/.svn/text-base/rule.js.svn-base | 43 + .../webroot/js/plugins/advhr/js/rule.js | 43 + .../js/plugins/advhr/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 5 + .../webroot/js/plugins/advhr/langs/en_dlg.js | 5 + .../tinymce/webroot/js/plugins/advhr/rule.htm | 57 + .../webroot/js/plugins/advimage/.svn/entries | 142 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 50 + .../.svn/text-base/image.htm.svn-base | 232 + .../js/plugins/advimage/css/.svn/entries | 62 + .../css/.svn/text-base/advimage.css.svn-base | 13 + .../js/plugins/advimage/css/advimage.css | 13 + .../js/plugins/advimage/editor_plugin.js | 1 + .../js/plugins/advimage/editor_plugin_src.js | 50 + .../webroot/js/plugins/advimage/image.htm | 232 + .../js/plugins/advimage/img/.svn/entries | 62 + .../img/.svn/prop-base/sample.gif.svn-base | 5 + .../img/.svn/text-base/sample.gif.svn-base | Bin 0 -> 1624 bytes .../js/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes .../js/plugins/advimage/js/.svn/entries | 62 + .../js/.svn/text-base/image.js.svn-base | 443 ++ .../webroot/js/plugins/advimage/js/image.js | 443 ++ .../js/plugins/advimage/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 43 + .../js/plugins/advimage/langs/en_dlg.js | 43 + .../webroot/js/plugins/advlink/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 61 + .../advlink/.svn/text-base/link.htm.svn-base | 333 + .../js/plugins/advlink/css/.svn/entries | 62 + .../css/.svn/text-base/advlink.css.svn-base | 8 + .../js/plugins/advlink/css/advlink.css | 8 + .../js/plugins/advlink/editor_plugin.js | 1 + .../js/plugins/advlink/editor_plugin_src.js | 61 + .../js/plugins/advlink/js/.svn/entries | 62 + .../js/.svn/text-base/advlink.js.svn-base | 528 ++ .../webroot/js/plugins/advlink/js/advlink.js | 528 ++ .../js/plugins/advlink/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 52 + .../js/plugins/advlink/langs/en_dlg.js | 52 + .../webroot/js/plugins/advlink/link.htm | 333 + .../webroot/js/plugins/advlist/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 154 + .../js/plugins/advlist/editor_plugin.js | 1 + .../js/plugins/advlist/editor_plugin_src.js | 154 + .../js/plugins/autoresize/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 119 + .../js/plugins/autoresize/editor_plugin.js | 1 + .../plugins/autoresize/editor_plugin_src.js | 119 + .../webroot/js/plugins/autosave/.svn/entries | 99 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 422 ++ .../js/plugins/autosave/editor_plugin.js | 1 + .../js/plugins/autosave/editor_plugin_src.js | 422 ++ .../js/plugins/autosave/langs/.svn/entries | 62 + .../langs/.svn/text-base/en.js.svn-base | 4 + .../webroot/js/plugins/autosave/langs/en.js | 4 + .../webroot/js/plugins/bbcode/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 120 + .../js/plugins/bbcode/editor_plugin.js | 1 + .../js/plugins/bbcode/editor_plugin_src.js | 120 + .../js/plugins/contextmenu/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 147 + .../js/plugins/contextmenu/editor_plugin.js | 1 + .../plugins/contextmenu/editor_plugin_src.js | 147 + .../js/plugins/directionality/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 82 + .../plugins/directionality/editor_plugin.js | 1 + .../directionality/editor_plugin_src.js | 82 + .../webroot/js/plugins/emotions/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 43 + .../.svn/text-base/emotions.htm.svn-base | 40 + .../js/plugins/emotions/editor_plugin.js | 1 + .../js/plugins/emotions/editor_plugin_src.js | 43 + .../webroot/js/plugins/emotions/emotions.htm | 40 + .../js/plugins/emotions/img/.svn/entries | 572 ++ .../.svn/prop-base/smiley-cool.gif.svn-base | 5 + .../.svn/prop-base/smiley-cry.gif.svn-base | 5 + .../prop-base/smiley-embarassed.gif.svn-base | 5 + .../smiley-foot-in-mouth.gif.svn-base | 5 + .../.svn/prop-base/smiley-frown.gif.svn-base | 5 + .../prop-base/smiley-innocent.gif.svn-base | 5 + .../.svn/prop-base/smiley-kiss.gif.svn-base | 5 + .../prop-base/smiley-laughing.gif.svn-base | 5 + .../prop-base/smiley-money-mouth.gif.svn-base | 5 + .../.svn/prop-base/smiley-sealed.gif.svn-base | 5 + .../.svn/prop-base/smiley-smile.gif.svn-base | 5 + .../prop-base/smiley-surprised.gif.svn-base | 5 + .../prop-base/smiley-tongue-out.gif.svn-base | 5 + .../prop-base/smiley-undecided.gif.svn-base | 5 + .../.svn/prop-base/smiley-wink.gif.svn-base | 5 + .../.svn/prop-base/smiley-yell.gif.svn-base | 5 + .../.svn/text-base/smiley-cool.gif.svn-base | Bin 0 -> 354 bytes .../.svn/text-base/smiley-cry.gif.svn-base | Bin 0 -> 329 bytes .../text-base/smiley-embarassed.gif.svn-base | Bin 0 -> 331 bytes .../smiley-foot-in-mouth.gif.svn-base | Bin 0 -> 344 bytes .../.svn/text-base/smiley-frown.gif.svn-base | Bin 0 -> 340 bytes .../text-base/smiley-innocent.gif.svn-base | Bin 0 -> 336 bytes .../.svn/text-base/smiley-kiss.gif.svn-base | Bin 0 -> 338 bytes .../text-base/smiley-laughing.gif.svn-base | Bin 0 -> 344 bytes .../text-base/smiley-money-mouth.gif.svn-base | Bin 0 -> 321 bytes .../.svn/text-base/smiley-sealed.gif.svn-base | Bin 0 -> 325 bytes .../.svn/text-base/smiley-smile.gif.svn-base | Bin 0 -> 345 bytes .../text-base/smiley-surprised.gif.svn-base | Bin 0 -> 342 bytes .../text-base/smiley-tongue-out.gif.svn-base | Bin 0 -> 328 bytes .../text-base/smiley-undecided.gif.svn-base | Bin 0 -> 337 bytes .../.svn/text-base/smiley-wink.gif.svn-base | Bin 0 -> 351 bytes .../.svn/text-base/smiley-yell.gif.svn-base | Bin 0 -> 336 bytes .../js/plugins/emotions/img/smiley-cool.gif | Bin 0 -> 354 bytes .../js/plugins/emotions/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes .../js/plugins/emotions/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emotions/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../js/plugins/emotions/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emotions/img/smiley-laughing.gif | Bin 0 -> 344 bytes .../emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../js/plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 325 bytes .../js/plugins/emotions/img/smiley-smile.gif | Bin 0 -> 345 bytes .../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 342 bytes .../emotions/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../plugins/emotions/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../js/plugins/emotions/img/smiley-wink.gif | Bin 0 -> 351 bytes .../js/plugins/emotions/img/smiley-yell.gif | Bin 0 -> 336 bytes .../js/plugins/emotions/js/.svn/entries | 62 + .../js/.svn/text-base/emotions.js.svn-base | 22 + .../js/plugins/emotions/js/emotions.js | 22 + .../js/plugins/emotions/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 20 + .../js/plugins/emotions/langs/en_dlg.js | 20 + .../webroot/js/plugins/example/.svn/entries | 139 + .../.svn/text-base/dialog.htm.svn-base | 22 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 84 + .../webroot/js/plugins/example/dialog.htm | 22 + .../js/plugins/example/editor_plugin.js | 1 + .../js/plugins/example/editor_plugin_src.js | 84 + .../js/plugins/example/img/.svn/entries | 62 + .../img/.svn/prop-base/example.gif.svn-base | 5 + .../img/.svn/text-base/example.gif.svn-base | Bin 0 -> 87 bytes .../js/plugins/example/img/example.gif | Bin 0 -> 87 bytes .../js/plugins/example/js/.svn/entries | 62 + .../js/.svn/text-base/dialog.js.svn-base | 19 + .../webroot/js/plugins/example/js/dialog.js | 19 + .../js/plugins/example/langs/.svn/entries | 96 + .../langs/.svn/text-base/en.js.svn-base | 3 + .../langs/.svn/text-base/en_dlg.js.svn-base | 3 + .../webroot/js/plugins/example/langs/en.js | 3 + .../js/plugins/example/langs/en_dlg.js | 3 + .../webroot/js/plugins/fullpage/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 153 + .../.svn/text-base/fullpage.htm.svn-base | 571 ++ .../js/plugins/fullpage/css/.svn/entries | 62 + .../css/.svn/text-base/fullpage.css.svn-base | 182 + .../js/plugins/fullpage/css/fullpage.css | 182 + .../js/plugins/fullpage/editor_plugin.js | 1 + .../js/plugins/fullpage/editor_plugin_src.js | 153 + .../webroot/js/plugins/fullpage/fullpage.htm | 571 ++ .../js/plugins/fullpage/js/.svn/entries | 62 + .../js/.svn/text-base/fullpage.js.svn-base | 471 ++ .../js/plugins/fullpage/js/fullpage.js | 471 ++ .../js/plugins/fullpage/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 85 + .../js/plugins/fullpage/langs/en_dlg.js | 85 + .../js/plugins/fullscreen/.svn/entries | 130 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 151 + .../.svn/text-base/fullscreen.htm.svn-base | 109 + .../js/plugins/fullscreen/editor_plugin.js | 1 + .../plugins/fullscreen/editor_plugin_src.js | 151 + .../js/plugins/fullscreen/fullscreen.htm | 109 + .../webroot/js/plugins/iespell/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 54 + .../js/plugins/iespell/editor_plugin.js | 1 + .../js/plugins/iespell/editor_plugin_src.js | 54 + .../js/plugins/inlinepopups/.svn/entries | 133 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 635 ++ .../.svn/text-base/template.htm.svn-base | 387 + .../js/plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 635 ++ .../plugins/inlinepopups/skins/.svn/entries | 31 + .../skins/clearlooks2/.svn/entries | 65 + .../.svn/text-base/window.css.svn-base | 90 + .../skins/clearlooks2/img/.svn/entries | 266 + .../img/.svn/prop-base/alert.gif.svn-base | 5 + .../img/.svn/prop-base/button.gif.svn-base | 5 + .../img/.svn/prop-base/buttons.gif.svn-base | 5 + .../img/.svn/prop-base/confirm.gif.svn-base | 5 + .../img/.svn/prop-base/corners.gif.svn-base | 5 + .../.svn/prop-base/horizontal.gif.svn-base | 5 + .../img/.svn/prop-base/vertical.gif.svn-base | 5 + .../img/.svn/text-base/alert.gif.svn-base | Bin 0 -> 818 bytes .../img/.svn/text-base/button.gif.svn-base | Bin 0 -> 280 bytes .../img/.svn/text-base/buttons.gif.svn-base | Bin 0 -> 1195 bytes .../img/.svn/text-base/confirm.gif.svn-base | Bin 0 -> 915 bytes .../img/.svn/text-base/corners.gif.svn-base | Bin 0 -> 911 bytes .../.svn/text-base/horizontal.gif.svn-base | Bin 0 -> 769 bytes .../img/.svn/text-base/vertical.gif.svn-base | Bin 0 -> 92 bytes .../skins/clearlooks2/img/alert.gif | Bin 0 -> 818 bytes .../skins/clearlooks2/img/button.gif | Bin 0 -> 280 bytes .../skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes .../skins/clearlooks2/img/confirm.gif | Bin 0 -> 915 bytes .../skins/clearlooks2/img/corners.gif | Bin 0 -> 911 bytes .../skins/clearlooks2/img/horizontal.gif | Bin 0 -> 769 bytes .../skins/clearlooks2/img/vertical.gif | Bin 0 -> 92 bytes .../inlinepopups/skins/clearlooks2/window.css | 90 + .../js/plugins/inlinepopups/template.htm | 387 + .../js/plugins/insertdatetime/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 83 + .../plugins/insertdatetime/editor_plugin.js | 1 + .../insertdatetime/editor_plugin_src.js | 83 + .../webroot/js/plugins/layer/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 212 + .../webroot/js/plugins/layer/editor_plugin.js | 1 + .../js/plugins/layer/editor_plugin_src.js | 212 + .../js/plugins/legacyoutput/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 136 + .../js/plugins/legacyoutput/editor_plugin.js | 1 + .../plugins/legacyoutput/editor_plugin_src.js | 136 + .../webroot/js/plugins/media/.svn/entries | 142 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 414 ++ .../media/.svn/text-base/media.htm.svn-base | 817 +++ .../webroot/js/plugins/media/css/.svn/entries | 96 + .../css/.svn/text-base/content.css.svn-base | 6 + .../css/.svn/text-base/media.css.svn-base | 16 + .../webroot/js/plugins/media/css/content.css | 6 + .../webroot/js/plugins/media/css/media.css | 16 + .../webroot/js/plugins/media/editor_plugin.js | 1 + .../js/plugins/media/editor_plugin_src.js | 414 ++ .../webroot/js/plugins/media/img/.svn/entries | 266 + .../img/.svn/prop-base/flash.gif.svn-base | 5 + .../.svn/prop-base/flv_player.swf.svn-base | 5 + .../img/.svn/prop-base/quicktime.gif.svn-base | 5 + .../img/.svn/prop-base/realmedia.gif.svn-base | 5 + .../img/.svn/prop-base/shockwave.gif.svn-base | 5 + .../img/.svn/prop-base/trans.gif.svn-base | 5 + .../.svn/prop-base/windowsmedia.gif.svn-base | 5 + .../img/.svn/text-base/flash.gif.svn-base | Bin 0 -> 241 bytes .../.svn/text-base/flv_player.swf.svn-base | Bin 0 -> 11668 bytes .../img/.svn/text-base/quicktime.gif.svn-base | Bin 0 -> 303 bytes .../img/.svn/text-base/realmedia.gif.svn-base | Bin 0 -> 439 bytes .../img/.svn/text-base/shockwave.gif.svn-base | Bin 0 -> 387 bytes .../img/.svn/text-base/trans.gif.svn-base | Bin 0 -> 43 bytes .../.svn/text-base/windowsmedia.gif.svn-base | Bin 0 -> 415 bytes .../webroot/js/plugins/media/img/flash.gif | Bin 0 -> 241 bytes .../js/plugins/media/img/flv_player.swf | Bin 0 -> 11668 bytes .../js/plugins/media/img/quicktime.gif | Bin 0 -> 303 bytes .../js/plugins/media/img/realmedia.gif | Bin 0 -> 439 bytes .../js/plugins/media/img/shockwave.gif | Bin 0 -> 387 bytes .../webroot/js/plugins/media/img/trans.gif | Bin 0 -> 43 bytes .../js/plugins/media/img/windowsmedia.gif | Bin 0 -> 415 bytes .../webroot/js/plugins/media/js/.svn/entries | 96 + .../media/js/.svn/text-base/embed.js.svn-base | 73 + .../media/js/.svn/text-base/media.js.svn-base | 630 ++ .../webroot/js/plugins/media/js/embed.js | 73 + .../webroot/js/plugins/media/js/media.js | 630 ++ .../js/plugins/media/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 103 + .../webroot/js/plugins/media/langs/en_dlg.js | 103 + .../webroot/js/plugins/media/media.htm | 817 +++ .../js/plugins/nonbreaking/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 53 + .../js/plugins/nonbreaking/editor_plugin.js | 1 + .../plugins/nonbreaking/editor_plugin_src.js | 53 + .../js/plugins/noneditable/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 90 + .../js/plugins/noneditable/editor_plugin.js | 1 + .../plugins/noneditable/editor_plugin_src.js | 90 + .../webroot/js/plugins/pagebreak/.svn/entries | 102 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 77 + .../js/plugins/pagebreak/css/.svn/entries | 62 + .../css/.svn/text-base/content.css.svn-base | 1 + .../js/plugins/pagebreak/css/content.css | 1 + .../js/plugins/pagebreak/editor_plugin.js | 1 + .../js/plugins/pagebreak/editor_plugin_src.js | 77 + .../js/plugins/pagebreak/img/.svn/entries | 96 + .../img/.svn/prop-base/pagebreak.gif.svn-base | 5 + .../img/.svn/prop-base/trans.gif.svn-base | 5 + .../img/.svn/text-base/pagebreak.gif.svn-base | Bin 0 -> 325 bytes .../img/.svn/text-base/trans.gif.svn-base | Bin 0 -> 43 bytes .../js/plugins/pagebreak/img/pagebreak.gif | Bin 0 -> 325 bytes .../js/plugins/pagebreak/img/trans.gif | Bin 0 -> 43 bytes .../webroot/js/plugins/paste/.svn/entries | 170 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 952 +++ .../.svn/text-base/pastetext.htm.svn-base | 27 + .../.svn/text-base/pasteword.htm.svn-base | 21 + .../webroot/js/plugins/paste/editor_plugin.js | 1 + .../js/plugins/paste/editor_plugin_src.js | 952 +++ .../webroot/js/plugins/paste/js/.svn/entries | 96 + .../js/.svn/text-base/pastetext.js.svn-base | 36 + .../js/.svn/text-base/pasteword.js.svn-base | 51 + .../webroot/js/plugins/paste/js/pastetext.js | 36 + .../webroot/js/plugins/paste/js/pasteword.js | 51 + .../js/plugins/paste/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 5 + .../webroot/js/plugins/paste/langs/en_dlg.js | 5 + .../webroot/js/plugins/paste/pastetext.htm | 27 + .../webroot/js/plugins/paste/pasteword.htm | 21 + .../webroot/js/plugins/preview/.svn/entries | 167 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 53 + .../.svn/text-base/example.html.svn-base | 28 + .../.svn/text-base/preview.html.svn-base | 17 + .../js/plugins/preview/editor_plugin.js | 1 + .../js/plugins/preview/editor_plugin_src.js | 53 + .../webroot/js/plugins/preview/example.html | 28 + .../js/plugins/preview/jscripts/.svn/entries | 62 + .../jscripts/.svn/text-base/embed.js.svn-base | 73 + .../js/plugins/preview/jscripts/embed.js | 73 + .../webroot/js/plugins/preview/preview.html | 17 + .../webroot/js/plugins/print/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 34 + .../webroot/js/plugins/print/editor_plugin.js | 1 + .../js/plugins/print/editor_plugin_src.js | 34 + .../webroot/js/plugins/save/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 101 + .../webroot/js/plugins/save/editor_plugin.js | 1 + .../js/plugins/save/editor_plugin_src.js | 101 + .../js/plugins/searchreplace/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 57 + .../.svn/text-base/searchreplace.htm.svn-base | 99 + .../js/plugins/searchreplace/css/.svn/entries | 62 + .../.svn/text-base/searchreplace.css.svn-base | 6 + .../searchreplace/css/searchreplace.css | 6 + .../js/plugins/searchreplace/editor_plugin.js | 1 + .../searchreplace/editor_plugin_src.js | 57 + .../js/plugins/searchreplace/js/.svn/entries | 62 + .../.svn/text-base/searchreplace.js.svn-base | 130 + .../plugins/searchreplace/js/searchreplace.js | 130 + .../plugins/searchreplace/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 16 + .../js/plugins/searchreplace/langs/en_dlg.js | 16 + .../plugins/searchreplace/searchreplace.htm | 99 + .../js/plugins/spellchecker/.svn/entries | 102 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 417 ++ .../js/plugins/spellchecker/css/.svn/entries | 62 + .../css/.svn/text-base/content.css.svn-base | 1 + .../js/plugins/spellchecker/css/content.css | 1 + .../js/plugins/spellchecker/editor_plugin.js | 1 + .../plugins/spellchecker/editor_plugin_src.js | 417 ++ .../js/plugins/spellchecker/img/.svn/entries | 62 + .../img/.svn/prop-base/wline.gif.svn-base | 5 + .../img/.svn/text-base/wline.gif.svn-base | Bin 0 -> 46 bytes .../js/plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes .../webroot/js/plugins/style/.svn/entries | 139 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 55 + .../style/.svn/text-base/props.htm.svn-base | 723 ++ .../webroot/js/plugins/style/css/.svn/entries | 62 + .../css/.svn/text-base/props.css.svn-base | 13 + .../webroot/js/plugins/style/css/props.css | 13 + .../webroot/js/plugins/style/editor_plugin.js | 1 + .../js/plugins/style/editor_plugin_src.js | 55 + .../webroot/js/plugins/style/js/.svn/entries | 62 + .../style/js/.svn/text-base/props.js.svn-base | 641 ++ .../webroot/js/plugins/style/js/props.js | 641 ++ .../js/plugins/style/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 63 + .../webroot/js/plugins/style/langs/en_dlg.js | 63 + .../webroot/js/plugins/style/props.htm | 723 ++ .../webroot/js/plugins/tabfocus/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 112 + .../js/plugins/tabfocus/editor_plugin.js | 1 + .../js/plugins/tabfocus/editor_plugin_src.js | 112 + .../webroot/js/plugins/table/.svn/entries | 241 + .../table/.svn/text-base/cell.htm.svn-base | 178 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 1125 +++ .../.svn/text-base/merge_cells.htm.svn-base | 32 + .../table/.svn/text-base/row.htm.svn-base | 155 + .../table/.svn/text-base/table.htm.svn-base | 187 + .../tinymce/webroot/js/plugins/table/cell.htm | 178 + .../webroot/js/plugins/table/css/.svn/entries | 130 + .../css/.svn/text-base/cell.css.svn-base | 17 + .../table/css/.svn/text-base/row.css.svn-base | 25 + .../css/.svn/text-base/table.css.svn-base | 13 + .../webroot/js/plugins/table/css/cell.css | 17 + .../webroot/js/plugins/table/css/row.css | 25 + .../webroot/js/plugins/table/css/table.css | 13 + .../webroot/js/plugins/table/editor_plugin.js | 1 + .../js/plugins/table/editor_plugin_src.js | 1125 +++ .../webroot/js/plugins/table/js/.svn/entries | 164 + .../table/js/.svn/text-base/cell.js.svn-base | 286 + .../js/.svn/text-base/merge_cells.js.svn-base | 27 + .../table/js/.svn/text-base/row.js.svn-base | 237 + .../table/js/.svn/text-base/table.js.svn-base | 449 ++ .../webroot/js/plugins/table/js/cell.js | 286 + .../js/plugins/table/js/merge_cells.js | 27 + .../webroot/js/plugins/table/js/row.js | 237 + .../webroot/js/plugins/table/js/table.js | 449 ++ .../js/plugins/table/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 74 + .../webroot/js/plugins/table/langs/en_dlg.js | 74 + .../webroot/js/plugins/table/merge_cells.htm | 32 + .../tinymce/webroot/js/plugins/table/row.htm | 155 + .../webroot/js/plugins/table/table.htm | 187 + .../webroot/js/plugins/template/.svn/entries | 173 + .../.svn/text-base/blank.htm.svn-base | 12 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 159 + .../.svn/text-base/template.htm.svn-base | 31 + .../webroot/js/plugins/template/blank.htm | 12 + .../js/plugins/template/css/.svn/entries | 62 + .../css/.svn/text-base/template.css.svn-base | 23 + .../js/plugins/template/css/template.css | 23 + .../js/plugins/template/editor_plugin.js | 1 + .../js/plugins/template/editor_plugin_src.js | 159 + .../js/plugins/template/js/.svn/entries | 62 + .../js/.svn/text-base/template.js.svn-base | 106 + .../js/plugins/template/js/template.js | 106 + .../js/plugins/template/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 15 + .../js/plugins/template/langs/en_dlg.js | 15 + .../webroot/js/plugins/template/template.htm | 31 + .../js/plugins/visualchars/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 83 + .../js/plugins/visualchars/editor_plugin.js | 1 + .../plugins/visualchars/editor_plugin_src.js | 83 + .../webroot/js/plugins/wordcount/.svn/entries | 96 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 98 + .../js/plugins/wordcount/editor_plugin.js | 1 + .../js/plugins/wordcount/editor_plugin_src.js | 98 + .../js/plugins/xhtmlxtras/.svn/entries | 309 + .../.svn/text-base/abbr.htm.svn-base | 141 + .../.svn/text-base/acronym.htm.svn-base | 141 + .../.svn/text-base/attributes.htm.svn-base | 148 + .../.svn/text-base/cite.htm.svn-base | 141 + .../.svn/text-base/del.htm.svn-base | 161 + .../.svn/text-base/editor_plugin.js.svn-base | 1 + .../text-base/editor_plugin_src.js.svn-base | 132 + .../.svn/text-base/ins.htm.svn-base | 161 + .../webroot/js/plugins/xhtmlxtras/abbr.htm | 141 + .../webroot/js/plugins/xhtmlxtras/acronym.htm | 141 + .../js/plugins/xhtmlxtras/attributes.htm | 148 + .../webroot/js/plugins/xhtmlxtras/cite.htm | 141 + .../js/plugins/xhtmlxtras/css/.svn/entries | 96 + .../.svn/text-base/attributes.css.svn-base | 11 + .../css/.svn/text-base/popup.css.svn-base | 9 + .../js/plugins/xhtmlxtras/css/attributes.css | 11 + .../js/plugins/xhtmlxtras/css/popup.css | 9 + .../webroot/js/plugins/xhtmlxtras/del.htm | 161 + .../js/plugins/xhtmlxtras/editor_plugin.js | 1 + .../plugins/xhtmlxtras/editor_plugin_src.js | 132 + .../webroot/js/plugins/xhtmlxtras/ins.htm | 161 + .../js/plugins/xhtmlxtras/js/.svn/entries | 266 + .../js/.svn/text-base/abbr.js.svn-base | 28 + .../js/.svn/text-base/acronym.js.svn-base | 28 + .../js/.svn/text-base/attributes.js.svn-base | 126 + .../js/.svn/text-base/cite.js.svn-base | 28 + .../js/.svn/text-base/del.js.svn-base | 63 + .../.svn/text-base/element_common.js.svn-base | 231 + .../js/.svn/text-base/ins.js.svn-base | 62 + .../webroot/js/plugins/xhtmlxtras/js/abbr.js | 28 + .../js/plugins/xhtmlxtras/js/acronym.js | 28 + .../js/plugins/xhtmlxtras/js/attributes.js | 126 + .../webroot/js/plugins/xhtmlxtras/js/cite.js | 28 + .../webroot/js/plugins/xhtmlxtras/js/del.js | 63 + .../plugins/xhtmlxtras/js/element_common.js | 231 + .../webroot/js/plugins/xhtmlxtras/js/ins.js | 62 + .../js/plugins/xhtmlxtras/langs/.svn/entries | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 32 + .../js/plugins/xhtmlxtras/langs/en_dlg.js | 32 + .../tinymce/webroot/js/themes/.svn/entries | 34 + .../webroot/js/themes/advanced/.svn/entries | 346 + .../.svn/text-base/about.htm.svn-base | 54 + .../.svn/text-base/anchor.htm.svn-base | 26 + .../.svn/text-base/charmap.htm.svn-base | 52 + .../.svn/text-base/color_picker.htm.svn-base | 73 + .../text-base/editor_template.js.svn-base | 1 + .../text-base/editor_template_src.js.svn-base | 1217 ++++ .../.svn/text-base/image.htm.svn-base | 80 + .../advanced/.svn/text-base/link.htm.svn-base | 58 + .../.svn/text-base/source_editor.htm.svn-base | 25 + .../webroot/js/themes/advanced/about.htm | 54 + .../webroot/js/themes/advanced/anchor.htm | 26 + .../webroot/js/themes/advanced/charmap.htm | 52 + .../js/themes/advanced/color_picker.htm | 73 + .../js/themes/advanced/editor_template.js | 1 + .../js/themes/advanced/editor_template_src.js | 1217 ++++ .../webroot/js/themes/advanced/image.htm | 80 + .../js/themes/advanced/img/.svn/entries | 96 + .../.svn/prop-base/colorpicker.jpg.svn-base | 5 + .../img/.svn/prop-base/icons.gif.svn-base | 5 + .../.svn/text-base/colorpicker.jpg.svn-base | Bin 0 -> 3189 bytes .../img/.svn/text-base/icons.gif.svn-base | Bin 0 -> 11794 bytes .../js/themes/advanced/img/colorpicker.jpg | Bin 0 -> 3189 bytes .../webroot/js/themes/advanced/img/icons.gif | Bin 0 -> 11794 bytes .../js/themes/advanced/js/.svn/entries | 266 + .../js/.svn/text-base/about.js.svn-base | 72 + .../js/.svn/text-base/anchor.js.svn-base | 37 + .../js/.svn/text-base/charmap.js.svn-base | 335 + .../.svn/text-base/color_picker.js.svn-base | 253 + .../js/.svn/text-base/image.js.svn-base | 245 + .../js/.svn/text-base/link.js.svn-base | 156 + .../.svn/text-base/source_editor.js.svn-base | 62 + .../webroot/js/themes/advanced/js/about.js | 72 + .../webroot/js/themes/advanced/js/anchor.js | 37 + .../webroot/js/themes/advanced/js/charmap.js | 335 + .../js/themes/advanced/js/color_picker.js | 253 + .../webroot/js/themes/advanced/js/image.js | 245 + .../webroot/js/themes/advanced/js/link.js | 156 + .../js/themes/advanced/js/source_editor.js | 62 + .../js/themes/advanced/langs/.svn/entries | 96 + .../langs/.svn/text-base/en.js.svn-base | 62 + .../langs/.svn/text-base/en_dlg.js.svn-base | 51 + .../webroot/js/themes/advanced/langs/en.js | 62 + .../js/themes/advanced/langs/en_dlg.js | 51 + .../webroot/js/themes/advanced/link.htm | 58 + .../js/themes/advanced/skins/.svn/entries | 34 + .../advanced/skins/default/.svn/entries | 133 + .../.svn/text-base/content.css.svn-base | 36 + .../.svn/text-base/dialog.css.svn-base | 117 + .../default/.svn/text-base/ui.css.svn-base | 213 + .../themes/advanced/skins/default/content.css | 36 + .../themes/advanced/skins/default/dialog.css | 117 + .../advanced/skins/default/img/.svn/entries | 232 + .../img/.svn/prop-base/buttons.png.svn-base | 5 + .../img/.svn/prop-base/items.gif.svn-base | 5 + .../.svn/prop-base/menu_arrow.gif.svn-base | 5 + .../.svn/prop-base/menu_check.gif.svn-base | 5 + .../img/.svn/prop-base/progress.gif.svn-base | 5 + .../img/.svn/prop-base/tabs.gif.svn-base | 5 + .../img/.svn/text-base/buttons.png.svn-base | Bin 0 -> 3274 bytes .../img/.svn/text-base/items.gif.svn-base | Bin 0 -> 70 bytes .../.svn/text-base/menu_arrow.gif.svn-base | Bin 0 -> 68 bytes .../.svn/text-base/menu_check.gif.svn-base | Bin 0 -> 70 bytes .../img/.svn/text-base/progress.gif.svn-base | Bin 0 -> 1787 bytes .../img/.svn/text-base/tabs.gif.svn-base | Bin 0 -> 1326 bytes .../advanced/skins/default/img/buttons.png | Bin 0 -> 3274 bytes .../advanced/skins/default/img/items.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/menu_arrow.gif | Bin 0 -> 68 bytes .../advanced/skins/default/img/menu_check.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes .../advanced/skins/default/img/tabs.gif | Bin 0 -> 1326 bytes .../js/themes/advanced/skins/default/ui.css | 213 + .../themes/advanced/skins/o2k7/.svn/entries | 201 + .../o2k7/.svn/text-base/content.css.svn-base | 36 + .../o2k7/.svn/text-base/dialog.css.svn-base | 116 + .../skins/o2k7/.svn/text-base/ui.css.svn-base | 215 + .../o2k7/.svn/text-base/ui_black.css.svn-base | 8 + .../.svn/text-base/ui_silver.css.svn-base | 5 + .../js/themes/advanced/skins/o2k7/content.css | 36 + .../js/themes/advanced/skins/o2k7/dialog.css | 116 + .../advanced/skins/o2k7/img/.svn/entries | 130 + .../img/.svn/prop-base/button_bg.png.svn-base | 5 + .../prop-base/button_bg_black.png.svn-base | 5 + .../prop-base/button_bg_silver.png.svn-base | 5 + .../img/.svn/text-base/button_bg.png.svn-base | Bin 0 -> 5859 bytes .../text-base/button_bg_black.png.svn-base | Bin 0 -> 3736 bytes .../text-base/button_bg_silver.png.svn-base | Bin 0 -> 5358 bytes .../advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 5859 bytes .../skins/o2k7/img/button_bg_black.png | Bin 0 -> 3736 bytes .../skins/o2k7/img/button_bg_silver.png | Bin 0 -> 5358 bytes .../js/themes/advanced/skins/o2k7/ui.css | 215 + .../themes/advanced/skins/o2k7/ui_black.css | 8 + .../themes/advanced/skins/o2k7/ui_silver.css | 5 + .../js/themes/advanced/source_editor.htm | 25 + .../webroot/js/themes/simple/.svn/entries | 105 + .../text-base/editor_template.js.svn-base | 1 + .../text-base/editor_template_src.js.svn-base | 85 + .../js/themes/simple/editor_template.js | 1 + .../js/themes/simple/editor_template_src.js | 85 + .../webroot/js/themes/simple/img/.svn/entries | 62 + .../img/.svn/prop-base/icons.gif.svn-base | 5 + .../img/.svn/text-base/icons.gif.svn-base | Bin 0 -> 1440 bytes .../webroot/js/themes/simple/img/icons.gif | Bin 0 -> 1440 bytes .../js/themes/simple/langs/.svn/entries | 62 + .../langs/.svn/text-base/en.js.svn-base | 11 + .../webroot/js/themes/simple/langs/en.js | 11 + .../js/themes/simple/skins/.svn/entries | 34 + .../themes/simple/skins/default/.svn/entries | 96 + .../.svn/text-base/content.css.svn-base | 25 + .../default/.svn/text-base/ui.css.svn-base | 32 + .../themes/simple/skins/default/content.css | 25 + .../js/themes/simple/skins/default/ui.css | 32 + .../js/themes/simple/skins/o2k7/.svn/entries | 99 + .../o2k7/.svn/text-base/content.css.svn-base | 17 + .../skins/o2k7/.svn/text-base/ui.css.svn-base | 35 + .../js/themes/simple/skins/o2k7/content.css | 17 + .../themes/simple/skins/o2k7/img/.svn/entries | 62 + .../img/.svn/prop-base/button_bg.png.svn-base | 5 + .../img/.svn/text-base/button_bg.png.svn-base | Bin 0 -> 5102 bytes .../simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes .../js/themes/simple/skins/o2k7/ui.css | 35 + app/plugins/tinymce/webroot/js/tiny_mce.js | 1 + .../tinymce/webroot/js/tiny_mce_popup.js | 5 + .../tinymce/webroot/js/utils/.svn/entries | 164 + .../text-base/editable_selects.js.svn-base | 70 + .../.svn/text-base/form_utils.js.svn-base | 200 + .../utils/.svn/text-base/mctabs.js.svn-base | 77 + .../utils/.svn/text-base/validate.js.svn-base | 220 + .../webroot/js/utils/editable_selects.js | 70 + .../tinymce/webroot/js/utils/form_utils.js | 200 + .../tinymce/webroot/js/utils/mctabs.js | 77 + .../tinymce/webroot/js/utils/validate.js | 220 + app/plugins/translate/.svn/entries | 105 + .../translate_app_controller.php.svn-base | 5 + .../translate_app_model.php.svn-base | 5 + app/plugins/translate/config/.svn/entries | 130 + .../config/.svn/text-base/plugin.yml.svn-base | 6 + .../translate_activation.php.svn-base | 51 + .../translate_bootstrap.php.svn-base | 29 + app/plugins/translate/config/plugin.yml | 6 + .../translate/config/translate_activation.php | 51 + .../translate/config/translate_bootstrap.php | 29 + .../translate/controllers/.svn/entries | 62 + .../translate_controller.php.svn-base | 198 + .../controllers/translate_controller.php | 198 + .../translate/translate_app_controller.php | 5 + app/plugins/translate/translate_app_model.php | 5 + app/plugins/translate/views/.svn/entries | 31 + .../translate/views/translate/.svn/entries | 96 + .../.svn/text-base/admin_edit.ctp.svn-base | 28 + .../.svn/text-base/admin_index.ctp.svn-base | 66 + .../translate/views/translate/admin_edit.ctp | 33 + .../translate/views/translate/admin_index.ctp | 66 + app/tests/.DS_Store | Bin 0 -> 6148 bytes app/tests/.svn/entries | 37 + app/tests/cases/.DS_Store | Bin 0 -> 6148 bytes app/tests/cases/.svn/entries | 43 + app/tests/cases/behaviors/.svn/entries | 232 + .../croogo_translate.test.php.svn-base | 56 + .../behaviors/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/encoder.test.php.svn-base | 73 + .../.svn/text-base/meta.test.php.svn-base | 80 + .../.svn/text-base/params.test.php.svn-base | 67 + .../.svn/text-base/url.test.php.svn-base | 62 + .../cases/behaviors/croogo_translate.test.php | 56 + app/tests/cases/behaviors/empty | 0 app/tests/cases/behaviors/encoder.test.php | 73 + app/tests/cases/behaviors/meta.test.php | 80 + app/tests/cases/behaviors/params.test.php | 67 + app/tests/cases/behaviors/url.test.php | 62 + app/tests/cases/components/.svn/entries | 62 + .../components/.svn/text-base/empty.svn-base | 0 app/tests/cases/components/croogo.test.php | 70 + app/tests/cases/components/empty | 0 app/tests/cases/controllers/.DS_Store | Bin 0 -> 12292 bytes app/tests/cases/controllers/.svn/entries | 470 ++ .../blocks_controller.test.php.svn-base | 469 ++ .../comments_controller.test.php.svn-base | 297 + .../contacts_controller.test.php.svn-base | 188 + .../controllers/.svn/text-base/empty.svn-base | 0 .../languages_controller.test.php.svn-base | 292 + .../links_controller.test.php.svn-base | 333 + .../menus_controller.test.php.svn-base | 165 + .../produtos_controller.test.php.svn-base | 71 + .../regions_controller.test.php.svn-base | 165 + .../roles_controller.test.php.svn-base | 167 + .../terms_controller.test.php.svn-base | 266 + .../types_controller.test.php.svn-base | 165 + .../vocabularies_controller.test.php.svn-base | 219 + .../controllers/blocks_controller.test.php | 469 ++ .../controllers/comments_controller.test.php | 297 + .../controllers/contacts_controller.test.php | 188 + app/tests/cases/controllers/empty | 0 .../controllers/languages_controller.test.php | 292 + .../controllers/links_controller.test.php | 333 + .../controllers/menus_controller.test.php | 165 + .../controllers/nodes_controller.test.php | 182 + .../controllers/produtos_controller.test.php | 71 + .../controllers/regions_controller.test.php | 165 + .../controllers/roles_controller.test.php | 171 + .../controllers/terms_controller.test.php | 266 + .../controllers/types_controller.test.php | 165 + .../controllers/users_controller.test.php | 166 + .../vocabularies_controller.test.php | 219 + app/tests/cases/helpers/.svn/entries | 62 + .../helpers/.svn/text-base/empty.svn-base | 0 app/tests/cases/helpers/empty | 0 app/tests/cases/helpers/layout.test.php | 136 + app/tests/cases/models/.svn/entries | 164 + .../models/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/node.test.php.svn-base | 52 + .../.svn/text-base/setting.test.php.svn-base | 67 + .../.svn/text-base/taxonomy.test.php.svn-base | 55 + app/tests/cases/models/empty | 0 app/tests/cases/models/node.test.php | 52 + app/tests/cases/models/setting.test.php | 67 + app/tests/cases/models/taxonomy.test.php | 55 + app/tests/fixtures/.svn/entries | 844 +++ .../.svn/text-base/aco_fixture.php.svn-base | 1605 +++++ .../.svn/text-base/aro_fixture.php.svn-base | 57 + .../text-base/aros_aco_fixture.php.svn-base | 264 + .../.svn/text-base/block_fixture.php.svn-base | 138 + .../text-base/comment_fixture.php.svn-base | 54 + .../text-base/contact_fixture.php.svn-base | 62 + .../fixtures/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/i18n_fixture.php.svn-base | 19 + .../text-base/language_fixture.php.svn-base | 32 + .../.svn/text-base/link_fixture.php.svn-base | 233 + .../.svn/text-base/menu_fixture.php.svn-base | 72 + .../text-base/message_fixture.php.svn-base | 27 + .../.svn/text-base/meta_fixture.php.svn-base | 32 + .../.svn/text-base/node_fixture.php.svn-base | 81 + .../nodes_taxonomy_fixture.php.svn-base | 22 + .../text-base/region_fixture.php.svn-base | 117 + .../.svn/text-base/role_fixture.php.svn-base | 40 + .../text-base/setting_fixture.php.svn-base | 276 + .../text-base/taxonomy_fixture.php.svn-base | 44 + .../.svn/text-base/term_fixture.php.svn-base | 44 + .../.svn/text-base/type_fixture.php.svn-base | 76 + .../types_vocabulary_fixture.php.svn-base | 42 + .../.svn/text-base/user_fixture.php.svn-base | 44 + .../text-base/vocabulary_fixture.php.svn-base | 51 + app/tests/fixtures/aco_fixture.php | 1605 +++++ app/tests/fixtures/aro_fixture.php | 57 + app/tests/fixtures/aros_aco_fixture.php | 264 + app/tests/fixtures/block_fixture.php | 138 + app/tests/fixtures/comment_fixture.php | 54 + app/tests/fixtures/contact_fixture.php | 62 + app/tests/fixtures/empty | 0 app/tests/fixtures/i18n_fixture.php | 19 + app/tests/fixtures/language_fixture.php | 32 + app/tests/fixtures/link_fixture.php | 233 + app/tests/fixtures/menu_fixture.php | 72 + app/tests/fixtures/message_fixture.php | 27 + app/tests/fixtures/meta_fixture.php | 32 + app/tests/fixtures/node_fixture.php | 81 + app/tests/fixtures/nodes_taxonomy_fixture.php | 22 + app/tests/fixtures/region_fixture.php | 117 + app/tests/fixtures/role_fixture.php | 40 + app/tests/fixtures/setting_fixture.php | 276 + app/tests/fixtures/taxonomy_fixture.php | 44 + app/tests/fixtures/term_fixture.php | 44 + app/tests/fixtures/type_fixture.php | 76 + .../fixtures/types_vocabulary_fixture.php | 42 + app/tests/fixtures/user_fixture.php | 44 + app/tests/fixtures/vocabulary_fixture.php | 51 + app/tests/groups/.svn/entries | 164 + .../text-base/behaviors.group.php.svn-base | 15 + .../text-base/controllers.group.php.svn-base | 15 + .../groups/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/models.group.php.svn-base | 15 + app/tests/groups/behaviors.group.php | 15 + app/tests/groups/controllers.group.php | 15 + app/tests/groups/empty | 0 app/tests/groups/models.group.php | 15 + app/vendors/.DS_Store | Bin 0 -> 6148 bytes app/vendors/.svn/entries | 34 + app/vendors/shells/.svn/entries | 68 + .../shells/.svn/text-base/croogo.php.svn-base | 77 + app/vendors/shells/croogo.php | 77 + app/vendors/shells/tasks/.svn/entries | 62 + .../tasks/.svn/text-base/empty.svn-base | 0 app/vendors/shells/tasks/empty | 0 app/vendors/shells/templates/.svn/entries | 62 + .../templates/.svn/text-base/empty.svn-base | 0 app/vendors/shells/templates/empty | 0 app/vendors/spyc/.svn/entries | 62 + .../spyc/.svn/text-base/spyc.php.svn-base | 1024 +++ app/vendors/spyc/spyc.php | 1024 +++ app/views/.svn/entries | 115 + app/views/attachments/.svn/entries | 164 + .../.svn/text-base/admin_add.ctp.svn-base | 16 + .../.svn/text-base/admin_browse.ctp.svn-base | 70 + .../.svn/text-base/admin_edit.ctp.svn-base | 43 + .../.svn/text-base/admin_index.ctp.svn-base | 60 + app/views/attachments/admin_add.ctp | 27 + app/views/attachments/admin_browse.ctp | 70 + app/views/attachments/admin_edit.ctp | 52 + app/views/attachments/admin_index.ctp | 60 + app/views/avisos/.svn/entries | 368 + .../avisos/.svn/text-base/add.ctp.svn-base | 17 + .../.svn/text-base/admin_add.ctp.svn-base | 20 + .../.svn/text-base/admin_delete.ctp.svn-base | 0 .../.svn/text-base/admin_edit.ctp.svn-base | 22 + .../.svn/text-base/admin_index.ctp.svn-base | 75 + .../.svn/text-base/admin_view.ctp.svn-base | 46 + .../.svn/text-base/atualiza.ctp.svn-base | 0 .../avisos/.svn/text-base/delete.ctp.svn-base | 0 .../.svn/text-base/index(2).ctp.svn-base | 60 + .../avisos/.svn/text-base/index.ctp.svn-base | 1 + app/views/avisos/add.ctp | 17 + app/views/avisos/admin_add(2).ctp | 20 + app/views/avisos/admin_add.ctp | 20 + app/views/avisos/admin_delete.ctp | 0 app/views/avisos/admin_edit.ctp | 22 + app/views/avisos/admin_index.ctp | 75 + app/views/avisos/admin_view.ctp | 46 + app/views/avisos/atualiza.ctp | 0 app/views/avisos/delete.ctp | 0 app/views/avisos/index(2).ctp | 60 + app/views/avisos/index.ctp | 1 + app/views/blocks/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 48 + .../.svn/text-base/admin_edit.ctp.svn-base | 49 + .../.svn/text-base/admin_index.ctp.svn-base | 69 + app/views/blocks/admin_add.ctp | 59 + app/views/blocks/admin_edit.ctp | 60 + app/views/blocks/admin_index.ctp | 69 + app/views/codigos/.svn/entries | 269 + .../codigos/.svn/text-base/add.ctp.svn-base | 76 + .../.svn/text-base/admin_add.ctp.svn-base | 99 + .../.svn/text-base/admin_edit.ctp.svn-base | 28 + .../.svn/text-base/admin_index.ctp.svn-base | 65 + .../text-base/admin_rastrear.ctp.svn-base | 61 + .../.svn/text-base/admin_view.ctp.svn-base | 78 + .../.svn/text-base/rastrear.ctp.svn-base | 57 + app/views/codigos/add.ctp | 76 + app/views/codigos/admin_add.ctp | 99 + app/views/codigos/admin_delete.ctp | 0 app/views/codigos/admin_edit.ctp | 28 + app/views/codigos/admin_index.ctp | 65 + app/views/codigos/admin_rastrear.ctp | 61 + app/views/codigos/admin_view.ctp | 78 + app/views/codigos/rastrear.ctp | 57 + app/views/codigos/xml/.svn/entries | 164 + .../xml/.svn/text-base/delete.ctp.svn-base | 3 + .../xml/.svn/text-base/edit.ctp.svn-base | 3 + .../xml/.svn/text-base/index.ctp.svn-base | 3 + .../xml/.svn/text-base/view.ctp.svn-base | 4 + app/views/codigos/xml/delete.ctp | 3 + app/views/codigos/xml/edit.ctp | 3 + app/views/codigos/xml/index.ctp | 3 + app/views/codigos/xml/view.ctp | 4 + app/views/comments/.svn/entries | 167 + .../comments/.svn/text-base/add.ctp.svn-base | 3 + .../.svn/text-base/admin_edit.ctp.svn-base | 34 + .../.svn/text-base/admin_index.ctp.svn-base | 85 + .../.svn/text-base/index.ctp.svn-base | 3 + app/views/comments/add.ctp | 3 + app/views/comments/admin_edit.ctp | 44 + app/views/comments/admin_index.ctp | 85 + app/views/comments/index.ctp | 3 + app/views/comments/rss/.svn/entries | 62 + .../rss/.svn/text-base/index.ctp.svn-base | 25 + app/views/comments/rss/index.ctp | 25 + app/views/contacts/.svn/entries | 164 + .../.svn/text-base/admin_add.ctp.svn-base | 69 + .../.svn/text-base/admin_edit.ctp.svn-base | 70 + .../.svn/text-base/admin_index.ctp.svn-base | 54 + .../contacts/.svn/text-base/view.ctp.svn-base | 28 + app/views/contacts/admin_add.ctp | 79 + app/views/contacts/admin_edit.ctp | 80 + app/views/contacts/admin_index.ctp | 54 + app/views/contacts/view.ctp | 28 + app/views/elements/.svn/entries | 510 ++ .../.svn/text-base/blank.ctp.svn-base | 0 .../.svn/text-base/block.ctp.svn-base | 15 + .../.svn/text-base/comment.ctp.svn-base | 36 + .../.svn/text-base/comments.ctp.svn-base | 15 + .../.svn/text-base/comments_form.ctp.svn-base | 50 + .../elements/.svn/text-base/empty.svn-base | 0 .../elements/.svn/text-base/menu.ctp.svn-base | 5 + .../.svn/text-base/node_body.ctp.svn-base | 3 + .../.svn/text-base/node_excerpt.ctp.svn-base | 3 + .../.svn/text-base/node_info.ctp.svn-base | 24 + .../.svn/text-base/node_list.ctp.svn-base | 21 + .../text-base/node_more_info.ctp.svn-base | 37 + .../.svn/text-base/search.ctp.svn-base | 28 + .../.svn/text-base/vocabulary.ctp.svn-base | 5 + app/views/elements/admin/.svn/entries | 198 + .../admin/.svn/text-base/footer.ctp.svn-base | 3 + .../admin/.svn/text-base/logo.ctp.svn-base | 5 + .../.svn/text-base/navigation.ctp.svn-base | 182 + .../.svn/text-base/nodes_filter.ctp.svn-base | 45 + .../admin/.svn/text-base/quick.ctp.svn-base | 8 + app/views/elements/admin/footer.ctp | 3 + app/views/elements/admin/header.ctp | 21 + app/views/elements/admin/logo.ctp | 5 + app/views/elements/admin/navigation.ctp | 179 + app/views/elements/admin/nodes_filter.ctp | 55 + app/views/elements/admin/quick.ctp | 8 + app/views/elements/blank.ctp | 0 app/views/elements/block.ctp | 15 + app/views/elements/comment.ctp | 36 + app/views/elements/comments.ctp | 15 + app/views/elements/comments_form.ctp | 50 + app/views/elements/email/.svn/entries | 34 + app/views/elements/email/html/.svn/entries | 62 + .../email/html/.svn/text-base/empty.svn-base | 0 app/views/elements/email/html/empty | 0 app/views/elements/email/text/.svn/entries | 164 + .../text/.svn/text-base/comment.ctp.svn-base | 11 + .../text/.svn/text-base/contact.ctp.svn-base | 13 + .../text-base/forgot_password.ctp.svn-base | 17 + .../text/.svn/text-base/register.ctp.svn-base | 11 + app/views/elements/email/text/comment.ctp | 11 + app/views/elements/email/text/contact.ctp | 13 + .../elements/email/text/forgot_password.ctp | 17 + app/views/elements/email/text/register.ctp | 11 + app/views/elements/empty | 0 app/views/elements/menu.ctp | 5 + app/views/elements/node_body.ctp | 3 + app/views/elements/node_excerpt.ctp | 3 + app/views/elements/node_info.ctp | 24 + app/views/elements/node_list.ctp | 21 + app/views/elements/node_more_info.ctp | 37 + app/views/elements/search.ctp | 28 + app/views/elements/vocabulary.ctp | 5 + app/views/errors/.svn/entries | 708 ++ .../errors/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/error404.ctp.svn-base | 26 + .../.svn/text-base/error500.ctp.svn-base | 24 + .../text-base/missing_action.ctp.svn-base | 7 + .../missing_behavior_class.ctp.svn-base | 39 + .../missing_behavior_file.ctp.svn-base | 39 + .../missing_component_class.ctp.svn-base | 39 + .../missing_component_file.ctp.svn-base | 39 + .../text-base/missing_connection.ctp.svn-base | 32 + .../text-base/missing_controller.ctp.svn-base | 7 + .../missing_helper_class.ctp.svn-base | 39 + .../missing_helper_file.ctp.svn-base | 39 + .../text-base/missing_layout.ctp.svn-base | 32 + .../.svn/text-base/missing_model.ctp.svn-base | 41 + .../text-base/missing_scaffolddb.ctp.svn-base | 32 + .../.svn/text-base/missing_table.ctp.svn-base | 28 + .../.svn/text-base/missing_view.ctp.svn-base | 32 + .../text-base/private_action.ctp.svn-base | 28 + .../text-base/scaffold_error.ctp.svn-base | 35 + .../.svn/text-base/security.ctp.svn-base | 6 + app/views/errors/empty | 0 app/views/errors/error404.ctp | 26 + app/views/errors/error500.ctp | 24 + app/views/errors/missing_action.ctp | 7 + app/views/errors/missing_behavior_class.ctp | 39 + app/views/errors/missing_behavior_file.ctp | 39 + app/views/errors/missing_component_class.ctp | 39 + app/views/errors/missing_component_file.ctp | 39 + app/views/errors/missing_connection.ctp | 32 + app/views/errors/missing_controller.ctp | 7 + app/views/errors/missing_helper_class.ctp | 39 + app/views/errors/missing_helper_file.ctp | 39 + app/views/errors/missing_layout.ctp | 32 + app/views/errors/missing_model.ctp | 41 + app/views/errors/missing_scaffolddb.ctp | 32 + app/views/errors/missing_table.ctp | 28 + app/views/errors/missing_view.ctp | 32 + app/views/errors/private_action.ctp | 28 + app/views/errors/scaffold_error.ctp | 35 + app/views/errors/security.ctp | 6 + app/views/filemanager/.svn/entries | 198 + .../.svn/text-base/admin_browse.ctp.svn-base | 75 + .../admin_create_directory.ctp.svn-base | 27 + .../text-base/admin_create_file.ctp.svn-base | 27 + .../text-base/admin_editfile.ctp.svn-base | 27 + .../.svn/text-base/admin_upload.ctp.svn-base | 29 + app/views/filemanager/admin_browse.ctp | 75 + .../filemanager/admin_create_directory.ctp | 36 + app/views/filemanager/admin_create_file.ctp | 37 + app/views/filemanager/admin_editfile.ctp | 37 + app/views/filemanager/admin_upload.ctp | 39 + app/views/helpers/.svn/entries | 266 + .../.svn/text-base/custom.php.svn-base | 29 + .../helpers/.svn/text-base/empty.svn-base | 0 .../.svn/text-base/filemanager.php.svn-base | 207 + .../helpers/.svn/text-base/image.php.svn-base | 78 + .../.svn/text-base/layout.php.svn-base | 838 +++ .../helpers/.svn/text-base/meta.php.svn-base | 61 + .../.svn/text-base/recaptcha.php.svn-base | 123 + app/views/helpers/custom.php | 29 + app/views/helpers/empty | 0 app/views/helpers/filemanager.php | 207 + app/views/helpers/image.php | 78 + app/views/helpers/layout.php | 834 +++ app/views/helpers/meta.php | 61 + app/views/helpers/recaptcha.php | 123 + app/views/languages/.svn/entries | 164 + .../.svn/text-base/admin_add.ctp.svn-base | 23 + .../.svn/text-base/admin_edit.ctp.svn-base | 24 + .../.svn/text-base/admin_index.ctp.svn-base | 51 + .../.svn/text-base/admin_select.ctp.svn-base | 24 + app/views/languages/admin_add.ctp | 33 + app/views/languages/admin_edit.ctp | 34 + app/views/languages/admin_index.ctp | 51 + app/views/languages/admin_select.ctp | 24 + app/views/layouts/.svn/entries | 216 + .../layouts/.svn/text-base/admin.ctp.svn-base | 74 + .../.svn/text-base/admin_full.ctp.svn-base | 67 + .../.svn/text-base/admin_login.ctp.svn-base | 40 + .../.svn/text-base/default.ctp.svn-base | 78 + .../.svn/text-base/maintenance.ctp.svn-base | 16 + app/views/layouts/admin.ctp | 62 + app/views/layouts/admin_full.ctp | 55 + app/views/layouts/admin_login.ctp | 40 + app/views/layouts/default.ctp | 78 + app/views/layouts/email/.svn/entries | 34 + app/views/layouts/email/html/.svn/entries | 62 + .../html/.svn/text-base/default.ctp.svn-base | 6 + app/views/layouts/email/html/default.ctp | 6 + app/views/layouts/email/text/.svn/entries | 62 + .../text/.svn/text-base/default.ctp.svn-base | 1 + app/views/layouts/email/text/default.ctp | 1 + app/views/layouts/js/.svn/entries | 62 + .../layouts/js/.svn/text-base/empty.svn-base | 0 app/views/layouts/js/empty | 0 app/views/layouts/json/.svn/entries | 130 + .../json/.svn/text-base/admin.ctp.svn-base | 8 + .../json/.svn/text-base/ajax.ctp.svn-base | 8 + .../json/.svn/text-base/default.ctp.svn-base | 8 + app/views/layouts/json/admin.ctp | 8 + app/views/layouts/json/ajax.ctp | 8 + app/views/layouts/json/default.ctp | 8 + app/views/layouts/maintenance.ctp | 16 + app/views/layouts/rss/.svn/entries | 96 + .../rss/.svn/text-base/default.ctp.svn-base | 14 + .../layouts/rss/.svn/text-base/empty.svn-base | 0 app/views/layouts/rss/default.ctp | 14 + app/views/layouts/rss/empty | 0 app/views/layouts/webservice/.svn/entries | 62 + .../.svn/text-base/webservice.ctp.svn-base | 3 + app/views/layouts/webservice/webservice.ctp | 3 + app/views/layouts/xml/.svn/entries | 62 + .../layouts/xml/.svn/text-base/empty.svn-base | 0 app/views/layouts/xml/empty | 0 app/views/links/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 53 + .../.svn/text-base/admin_edit.ctp.svn-base | 54 + .../.svn/text-base/admin_index.ctp.svn-base | 75 + app/views/links/admin_add.ctp | 64 + app/views/links/admin_edit.ctp | 64 + app/views/links/admin_index.ctp | 75 + app/views/menus/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 30 + .../.svn/text-base/admin_edit.ctp.svn-base | 31 + .../.svn/text-base/admin_index.ctp.svn-base | 49 + app/views/menus/admin_add.ctp | 40 + app/views/menus/admin_edit.ctp | 41 + app/views/menus/admin_index.ctp | 49 + app/views/messages/.svn/entries | 96 + .../.svn/text-base/admin_edit.ctp.svn-base | 17 + .../.svn/text-base/admin_index.ctp.svn-base | 77 + app/views/messages/admin_edit.ctp | 27 + app/views/messages/admin_index.ctp | 77 + app/views/nodes/.svn/entries | 476 ++ .../.svn/text-base/admin_add.ctp.svn-base | 107 + .../text-base/admin_add_meta.ctp.svn-base | 4 + .../.svn/text-base/admin_create.ctp.svn-base | 12 + .../.svn/text-base/admin_edit.ctp.svn-base | 103 + .../.svn/text-base/admin_index.ctp.svn-base | 93 + .../.svn/text-base/admin_links.ctp.svn-base | 51 + .../text-base/admin_translate.ctp.svn-base | 33 + .../text-base/admin_translations.ctp.svn-base | 55 + .../nodes/.svn/text-base/index.ctp.svn-base | 29 + .../.svn/text-base/promoted.ctp.svn-base | 29 + .../nodes/.svn/text-base/search.ctp.svn-base | 31 + .../nodes/.svn/text-base/term.ctp.svn-base | 31 + .../nodes/.svn/text-base/view.ctp.svn-base | 23 + app/views/nodes/admin_add.ctp | 117 + app/views/nodes/admin_add_meta.ctp | 4 + app/views/nodes/admin_create.ctp | 12 + app/views/nodes/admin_edit.ctp | 114 + app/views/nodes/admin_index.ctp | 92 + app/views/nodes/admin_links.ctp | 51 + app/views/nodes/admin_translate.ctp | 33 + app/views/nodes/admin_translations.ctp | 55 + app/views/nodes/index.ctp | 29 + app/views/nodes/json/.svn/entries | 62 + .../text-base/admin_delete_meta.ctp.svn-base | 4 + app/views/nodes/json/admin_delete_meta.ctp | 4 + app/views/nodes/promoted.ctp | 29 + app/views/nodes/rss/.svn/entries | 130 + .../rss/.svn/text-base/index.ctp.svn-base | 13 + .../rss/.svn/text-base/promoted.ctp.svn-base | 13 + .../rss/.svn/text-base/term.ctp.svn-base | 13 + app/views/nodes/rss/index.ctp | 13 + app/views/nodes/rss/promoted.ctp | 13 + app/views/nodes/rss/term.ctp | 13 + app/views/nodes/search.ctp | 31 + app/views/nodes/term.ctp | 31 + app/views/nodes/view.ctp | 23 + app/views/opcaos/.svn/entries | 300 + .../opcaos/.svn/text-base/add.ctp.svn-base | 17 + .../.svn/text-base/admin_add.ctp.svn-base | 18 + .../.svn/text-base/admin_edit.ctp.svn-base | 19 + .../.svn/text-base/admin_index.ctp.svn-base | 56 + .../.svn/text-base/admin_view.ctp.svn-base | 33 + .../opcaos/.svn/text-base/edit.ctp.svn-base | 19 + .../opcaos/.svn/text-base/index.ctp.svn-base | 56 + .../opcaos/.svn/text-base/view.ctp.svn-base | 34 + app/views/opcaos/add.ctp | 17 + app/views/opcaos/admin_add.ctp | 18 + app/views/opcaos/admin_edit.ctp | 19 + app/views/opcaos/admin_index.ctp | 56 + app/views/opcaos/admin_view.ctp | 33 + app/views/opcaos/edit.ctp | 19 + app/views/opcaos/index.ctp | 56 + app/views/opcaos/view.ctp | 34 + app/views/opcoes/.svn/entries | 300 + .../opcoes/.svn/text-base/add.ctp.svn-base | 17 + .../.svn/text-base/admin_add.ctp.svn-base | 20 + .../.svn/text-base/admin_edit.ctp.svn-base | 23 + .../.svn/text-base/admin_index.ctp.svn-base | 56 + .../.svn/text-base/admin_view.ctp.svn-base | 33 + .../opcoes/.svn/text-base/edit.ctp.svn-base | 19 + .../opcoes/.svn/text-base/index.ctp.svn-base | 56 + .../opcoes/.svn/text-base/view.ctp.svn-base | 34 + app/views/opcoes/add.ctp | 17 + app/views/opcoes/admin_add.ctp | 20 + app/views/opcoes/admin_edit.ctp | 23 + app/views/opcoes/admin_index.ctp | 56 + app/views/opcoes/admin_view.ctp | 33 + app/views/opcoes/edit.ctp | 19 + app/views/opcoes/index.ctp | 56 + app/views/opcoes/view.ctp | 34 + app/views/produtos/.svn/entries | 643 ++ .../produtos/.svn/text-base/add.ctp.svn-base | 23 + .../.svn/text-base/admin_add(2).ctp.svn-base | 181 + .../.svn/text-base/admin_add.ctp.svn-base | 236 + .../text-base/admin_botoes(2).ctp.svn-base | 96 + .../.svn/text-base/admin_botoes.ctp.svn-base | 96 + .../text-base/admin_delete(2).ctp.svn-base | 0 .../.svn/text-base/admin_delete.ctp.svn-base | 0 .../.svn/text-base/admin_edit(2).ctp.svn-base | 170 + .../.svn/text-base/admin_edit.ctp.svn-base | 236 + .../.svn/text-base/admin_index.ctp.svn-base | 103 + .../.svn/text-base/admin_view.ctp.svn-base | 257 + .../.svn/text-base/botoes(2).ctp.svn-base | 43 + .../.svn/text-base/botoes.ctp.svn-base | 43 + .../produtos/.svn/text-base/edit.ctp.svn-base | 25 + .../.svn/text-base/frete(2).ctp.svn-base | 191 + .../.svn/text-base/frete.ctp.svn-base | 253 + .../.svn/text-base/index.ctp.svn-base | 59 + .../produtos/.svn/text-base/view.ctp.svn-base | 83 + app/views/produtos/add.ctp | 23 + app/views/produtos/admin_add(2).ctp | 181 + app/views/produtos/admin_add.ctp | 299 + app/views/produtos/admin_botoes(2).ctp | 96 + app/views/produtos/admin_botoes.ctp | 96 + app/views/produtos/admin_delete(2).ctp | 0 app/views/produtos/admin_delete.ctp | 0 app/views/produtos/admin_edit(2).ctp | 170 + app/views/produtos/admin_edit.ctp | 304 + app/views/produtos/admin_index.ctp | 103 + app/views/produtos/admin_view.ctp | 257 + app/views/produtos/botoes(2).ctp | 43 + app/views/produtos/botoes.ctp | 43 + app/views/produtos/edit.ctp | 25 + app/views/produtos/frete(2).ctp | 191 + app/views/produtos/frete.ctp | 314 + app/views/produtos/frete2.ctp | 253 + app/views/produtos/index.ctp | 59 + app/views/produtos/view.ctp | 83 + app/views/produtos/xml/.svn/entries | 164 + .../xml/.svn/text-base/delete.ctp.svn-base | 3 + .../xml/.svn/text-base/edit.ctp.svn-base | 3 + .../xml/.svn/text-base/index.ctp.svn-base | 3 + .../xml/.svn/text-base/view.ctp.svn-base | 3 + app/views/produtos/xml/delete.ctp | 3 + app/views/produtos/xml/edit.ctp | 3 + app/views/produtos/xml/index.ctp | 3 + app/views/produtos/xml/view.ctp | 3 + app/views/regions/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 21 + .../.svn/text-base/admin_edit.ctp.svn-base | 22 + .../.svn/text-base/admin_index.ctp.svn-base | 46 + app/views/regions/admin_add.ctp | 31 + app/views/regions/admin_edit.ctp | 32 + app/views/regions/admin_index.ctp | 46 + app/views/roles/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 21 + .../.svn/text-base/admin_edit.ctp.svn-base | 23 + .../.svn/text-base/admin_index.ctp.svn-base | 46 + app/views/roles/admin_add.ctp | 31 + app/views/roles/admin_edit.ctp | 33 + app/views/roles/admin_index.ctp | 46 + app/views/scaffolds/.svn/entries | 62 + .../scaffolds/.svn/text-base/empty.svn-base | 0 app/views/scaffolds/empty | 0 app/views/settings/.svn/entries | 232 + .../.svn/text-base/admin_add.ctp.svn-base | 32 + .../text-base/admin_dashboard.ctp.svn-base | 3 + .../.svn/text-base/admin_edit.ctp.svn-base | 33 + .../.svn/text-base/admin_index.ctp.svn-base | 59 + .../.svn/text-base/admin_prefix.ctp.svn-base | 63 + .../.svn/text-base/admin_view.ctp.svn-base | 48 + app/views/settings/admin_add.ctp | 42 + app/views/settings/admin_dashboard.ctp | 3 + app/views/settings/admin_edit.ctp | 42 + app/views/settings/admin_index.ctp | 59 + app/views/settings/admin_prefix.ctp | 68 + app/views/settings/admin_view.ctp | 48 + app/views/terms/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 38 + .../.svn/text-base/admin_edit.ctp.svn-base | 31 + .../.svn/text-base/admin_index.ctp.svn-base | 74 + app/views/terms/admin_add.ctp | 49 + app/views/terms/admin_edit.ctp | 42 + app/views/terms/admin_index.ctp | 74 + app/views/types/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 84 + .../.svn/text-base/admin_edit.ctp.svn-base | 85 + .../.svn/text-base/admin_index.ctp.svn-base | 48 + app/views/types/admin_add.ctp | 94 + app/views/types/admin_edit.ctp | 95 + app/views/types/admin_index.ctp | 48 + app/views/urls/.svn/entries | 130 + .../urls/.svn/text-base/index.ctp.svn-base | 4 + .../urls/.svn/text-base/teste.ctp.svn-base | 10 + .../urls/.svn/text-base/url.ctp.svn-base | 4 + app/views/urls/index.ctp | 4 + app/views/urls/teste.ctp | 10 + app/views/urls/url.ctp | 4 + app/views/users/.svn/entries | 402 ++ .../users/.svn/text-base/add.ctp.svn-base | 14 + .../.svn/text-base/admin_add.ctp.svn-base | 26 + .../.svn/text-base/admin_edit.ctp.svn-base | 32 + .../.svn/text-base/admin_index.ctp.svn-base | 50 + .../.svn/text-base/admin_login.ctp.svn-base | 19 + .../admin_reset_password.ctp.svn-base | 13 + .../users/.svn/text-base/forgot.ctp.svn-base | 10 + .../users/.svn/text-base/index.ctp.svn-base | 5 + .../users/.svn/text-base/login.ctp.svn-base | 11 + .../users/.svn/text-base/reset.ctp.svn-base | 10 + .../users/.svn/text-base/view.ctp.svn-base | 4 + app/views/users/add.ctp | 14 + app/views/users/admin_add.ctp | 36 + app/views/users/admin_edit.ctp | 43 + app/views/users/admin_index.ctp | 50 + app/views/users/admin_login.ctp | 19 + app/views/users/admin_reset_password.ctp | 23 + app/views/users/forgot.ctp | 10 + app/views/users/index.ctp | 5 + app/views/users/login.ctp | 11 + app/views/users/reset.ctp | 10 + app/views/users/view.ctp | 4 + app/views/vocabularies/.svn/entries | 130 + .../.svn/text-base/admin_add.ctp.svn-base | 35 + .../.svn/text-base/admin_edit.ctp.svn-base | 34 + .../.svn/text-base/admin_index.ctp.svn-base | 49 + app/views/vocabularies/admin_add.ctp | 45 + app/views/vocabularies/admin_edit.ctp | 44 + app/views/vocabularies/admin_index.ctp | 49 + app/webroot/.htaccess | 6 + app/webroot/.svn/entries | 284 + .../.svn/prop-base/favicon.ico.svn-base | 5 + app/webroot/.svn/text-base/.htaccess.svn-base | 6 + app/webroot/.svn/text-base/css.php.svn-base | 95 + .../.svn/text-base/favicon.ico.svn-base | Bin 0 -> 372 bytes app/webroot/.svn/text-base/index.php.svn-base | 88 + ...querimento-revisao-de-tributo.pdf.svn-base | Bin 0 -> 374265 bytes app/webroot/.svn/text-base/test.php.svn-base | 96 + app/webroot/.svn/text-base/theme.yml.svn-base | 14 + app/webroot/css.php | 95 + app/webroot/css/.svn/entries | 232 + .../css/.svn/text-base/960.css.svn-base | 1 + .../css/.svn/text-base/admin.css.svn-base | 267 + .../.svn/text-base/cake.generic.css.svn-base | 479 ++ .../css/.svn/text-base/reset.css.svn-base | 4 + .../css/.svn/text-base/theme.css.svn-base | 142 + .../css/.svn/text-base/thickbox.css.svn-base | 163 + app/webroot/css/960.css | 1 + app/webroot/css/admin.css | 267 + app/webroot/css/cake.generic.css | 479 ++ app/webroot/css/reset.css | 4 + app/webroot/css/theme.css | 142 + app/webroot/css/thickbox.css | 163 + app/webroot/favicon.ico | Bin 0 -> 372 bytes app/webroot/img/.svn/entries | 241 + .../img/.svn/prop-base/Thumbs.db.svn-base | 5 + .../img/.svn/prop-base/cake.icon.gif.svn-base | 5 + .../.svn/prop-base/cake.power.gif.svn-base | 5 + .../img/.svn/prop-base/croogo.png.svn-base | 5 + .../.svn/prop-base/screenshot.png.svn-base | 5 + .../img/.svn/text-base/Thumbs.db.svn-base | Bin 0 -> 10240 bytes .../img/.svn/text-base/cake.icon.gif.svn-base | Bin 0 -> 233 bytes .../.svn/text-base/cake.power.gif.svn-base | Bin 0 -> 201 bytes .../img/.svn/text-base/croogo.png.svn-base | Bin 0 -> 4602 bytes .../img/.svn/text-base/index.html.svn-base | 1 + .../.svn/text-base/screenshot.png.svn-base | Bin 0 -> 31398 bytes app/webroot/img/Thumbs.db | Bin 0 -> 10240 bytes app/webroot/img/ajax/.svn/entries | 198 + .../ajax/.svn/prop-base/Thumbs.db.svn-base | 5 + .../.svn/prop-base/circle_ball.gif.svn-base | 5 + .../prop-base/loadingAnimation.gif.svn-base | 5 + .../prop-base/wheel_throbber.gif.svn-base | 5 + .../ajax/.svn/text-base/Thumbs.db.svn-base | Bin 0 -> 9216 bytes .../.svn/text-base/circle_ball.gif.svn-base | Bin 0 -> 673 bytes .../ajax/.svn/text-base/index.html.svn-base | 1 + .../text-base/loadingAnimation.gif.svn-base | Bin 0 -> 5886 bytes .../text-base/wheel_throbber.gif.svn-base | Bin 0 -> 9427 bytes app/webroot/img/ajax/Thumbs.db | Bin 0 -> 9216 bytes app/webroot/img/ajax/circle_ball.gif | Bin 0 -> 673 bytes app/webroot/img/ajax/index.html | 1 + app/webroot/img/ajax/loadingAnimation.gif | Bin 0 -> 5886 bytes app/webroot/img/ajax/wheel_throbber.gif | Bin 0 -> 9427 bytes app/webroot/img/botoes/.svn/entries | 1048 +++ .../botoes/.svn/prop-base/Thumbs.db.svn-base | 5 + ...lcularFreteCaminhaoCinzaFAzul.jpg.svn-base | 5 + ...larFreteCaminhaoCinzaFLaranja.jpg.svn-base | 5 + ...cularFreteCaminhaoCinzaFPreto.jpg.svn-base | 5 + ...cularFreteCaminhaoCinzaFTerra.jpg.svn-base | 5 + ...arFreteCaminhaoCinzaFVermelho.jpg.svn-base | 5 + ...ularFreteCaminhaoLaranjaFAzul.jpg.svn-base | 5 + ...rFreteCaminhaoLaranjaFLaranja.jpg.svn-base | 5 + ...larFreteCaminhaoLaranjaFPreto.jpg.svn-base | 5 + ...larFreteCaminhaoLaranjaFTerra.jpg.svn-base | 5 + ...larFreteCaminhaoLaranjaFVerde.jpg.svn-base | 5 + ...FreteCaminhaoLaranjaFVermelho.jpg.svn-base | 5 + ...reteCaminhaoLaranjaLongoFAzul.jpg.svn-base | 5 + ...eCaminhaoLaranjaLongoFLaranja.jpg.svn-base | 5 + ...eteCaminhaoLaranjaLongoFPreto.jpg.svn-base | 5 + ...eteCaminhaoLaranjaLongoFTerra.jpg.svn-base | 5 + ...eteCaminhaoLaranjaLongoFVerde.jpg.svn-base | 5 + ...CaminhaoLaranjaLongoFVermelho.jpg.svn-base | 5 + ...lcularFreteCaminhaoPretoFAzul.jpg.svn-base | 5 + ...larFreteCaminhaoPretoFLaranja.jpg.svn-base | 5 + ...cularFreteCaminhaoPretoFPreto.jpg.svn-base | 5 + ...cularFreteCaminhaoPretoFTerra.jpg.svn-base | 5 + ...cularFreteCaminhaoPretoFVerde.jpg.svn-base | 5 + ...arFreteCaminhaoPretoFVermelho.jpg.svn-base | 5 + ...lcularFreteCaminhaoVerdeFAzul.jpg.svn-base | 5 + ...larFreteCaminhaoVerdeFLaranja.jpg.svn-base | 5 + ...cularFreteCaminhaoVerdeFPreto.jpg.svn-base | 5 + ...cularFreteCaminhaoVerdeFTerra.jpg.svn-base | 5 + ...cularFreteCaminhaoVerdeFVerde.jpg.svn-base | 5 + ...arFreteCaminhaoVerdeFVermelho.jpg.svn-base | 5 + .../botoes/.svn/text-base/Thumbs.db.svn-base | Bin 0 -> 6144 bytes ...lcularFreteCaminhaoCinzaFAzul.jpg.svn-base | Bin 0 -> 40546 bytes ...larFreteCaminhaoCinzaFLaranja.jpg.svn-base | Bin 0 -> 39888 bytes ...cularFreteCaminhaoCinzaFPreto.jpg.svn-base | Bin 0 -> 21963 bytes ...cularFreteCaminhaoCinzaFTerra.jpg.svn-base | Bin 0 -> 39585 bytes ...arFreteCaminhaoCinzaFVermelho.jpg.svn-base | Bin 0 -> 38121 bytes ...ularFreteCaminhaoLaranjaFAzul.jpg.svn-base | Bin 0 -> 40860 bytes ...rFreteCaminhaoLaranjaFLaranja.jpg.svn-base | Bin 0 -> 39803 bytes ...larFreteCaminhaoLaranjaFPreto.jpg.svn-base | Bin 0 -> 23525 bytes ...larFreteCaminhaoLaranjaFTerra.jpg.svn-base | Bin 0 -> 39577 bytes ...larFreteCaminhaoLaranjaFVerde.jpg.svn-base | Bin 0 -> 39946 bytes ...FreteCaminhaoLaranjaFVermelho.jpg.svn-base | Bin 0 -> 39841 bytes ...reteCaminhaoLaranjaLongoFAzul.jpg.svn-base | Bin 0 -> 41699 bytes ...eCaminhaoLaranjaLongoFLaranja.jpg.svn-base | Bin 0 -> 40202 bytes ...eteCaminhaoLaranjaLongoFPreto.jpg.svn-base | Bin 0 -> 23001 bytes ...eteCaminhaoLaranjaLongoFTerra.jpg.svn-base | Bin 0 -> 39943 bytes ...eteCaminhaoLaranjaLongoFVerde.jpg.svn-base | Bin 0 -> 39991 bytes ...CaminhaoLaranjaLongoFVermelho.jpg.svn-base | Bin 0 -> 38815 bytes ...lcularFreteCaminhaoPretoFAzul.jpg.svn-base | Bin 0 -> 40725 bytes ...larFreteCaminhaoPretoFLaranja.jpg.svn-base | Bin 0 -> 40134 bytes ...cularFreteCaminhaoPretoFPreto.jpg.svn-base | Bin 0 -> 20695 bytes ...cularFreteCaminhaoPretoFTerra.jpg.svn-base | Bin 0 -> 39775 bytes ...cularFreteCaminhaoPretoFVerde.jpg.svn-base | Bin 0 -> 39331 bytes ...arFreteCaminhaoPretoFVermelho.jpg.svn-base | Bin 0 -> 38207 bytes ...lcularFreteCaminhaoVerdeFAzul.jpg.svn-base | Bin 0 -> 42560 bytes ...larFreteCaminhaoVerdeFLaranja.jpg.svn-base | Bin 0 -> 42118 bytes ...cularFreteCaminhaoVerdeFPreto.jpg.svn-base | Bin 0 -> 24860 bytes ...cularFreteCaminhaoVerdeFTerra.jpg.svn-base | Bin 0 -> 41951 bytes ...cularFreteCaminhaoVerdeFVerde.jpg.svn-base | Bin 0 -> 41222 bytes ...arFreteCaminhaoVerdeFVermelho.jpg.svn-base | Bin 0 -> 40833 bytes app/webroot/img/botoes/Thumbs.db | Bin 0 -> 6144 bytes .../btnCalcularFreteCaminhaoCinzaFAzul.jpg | Bin 0 -> 40546 bytes .../btnCalcularFreteCaminhaoCinzaFLaranja.jpg | Bin 0 -> 39888 bytes .../btnCalcularFreteCaminhaoCinzaFPreto.jpg | Bin 0 -> 21963 bytes .../btnCalcularFreteCaminhaoCinzaFTerra.jpg | Bin 0 -> 39585 bytes ...btnCalcularFreteCaminhaoCinzaFVermelho.jpg | Bin 0 -> 38121 bytes .../btnCalcularFreteCaminhaoLaranjaFAzul.jpg | Bin 0 -> 40860 bytes ...tnCalcularFreteCaminhaoLaranjaFLaranja.jpg | Bin 0 -> 39803 bytes .../btnCalcularFreteCaminhaoLaranjaFPreto.jpg | Bin 0 -> 23525 bytes .../btnCalcularFreteCaminhaoLaranjaFTerra.jpg | Bin 0 -> 39577 bytes .../btnCalcularFreteCaminhaoLaranjaFVerde.jpg | Bin 0 -> 39946 bytes ...nCalcularFreteCaminhaoLaranjaFVermelho.jpg | Bin 0 -> 39841 bytes ...CalcularFreteCaminhaoLaranjaLongoFAzul.jpg | Bin 0 -> 41699 bytes ...cularFreteCaminhaoLaranjaLongoFLaranja.jpg | Bin 0 -> 40202 bytes ...alcularFreteCaminhaoLaranjaLongoFPreto.jpg | Bin 0 -> 23001 bytes ...alcularFreteCaminhaoLaranjaLongoFTerra.jpg | Bin 0 -> 39943 bytes ...alcularFreteCaminhaoLaranjaLongoFVerde.jpg | Bin 0 -> 39991 bytes ...ularFreteCaminhaoLaranjaLongoFVermelho.jpg | Bin 0 -> 38815 bytes .../btnCalcularFreteCaminhaoPretoFAzul.jpg | Bin 0 -> 40725 bytes .../btnCalcularFreteCaminhaoPretoFLaranja.jpg | Bin 0 -> 40134 bytes .../btnCalcularFreteCaminhaoPretoFPreto.jpg | Bin 0 -> 20695 bytes .../btnCalcularFreteCaminhaoPretoFTerra.jpg | Bin 0 -> 39775 bytes .../btnCalcularFreteCaminhaoPretoFVerde.jpg | Bin 0 -> 39331 bytes ...btnCalcularFreteCaminhaoPretoFVermelho.jpg | Bin 0 -> 38207 bytes .../btnCalcularFreteCaminhaoVerdeFAzul.jpg | Bin 0 -> 42560 bytes .../btnCalcularFreteCaminhaoVerdeFLaranja.jpg | Bin 0 -> 42118 bytes .../btnCalcularFreteCaminhaoVerdeFPreto.jpg | Bin 0 -> 24860 bytes .../btnCalcularFreteCaminhaoVerdeFTerra.jpg | Bin 0 -> 41951 bytes .../btnCalcularFreteCaminhaoVerdeFVerde.jpg | Bin 0 -> 41222 bytes ...btnCalcularFreteCaminhaoVerdeFVermelho.jpg | Bin 0 -> 40833 bytes app/webroot/img/cake.icon.gif | Bin 0 -> 233 bytes app/webroot/img/cake.power.gif | Bin 0 -> 201 bytes app/webroot/img/croogo.png | Bin 0 -> 4602 bytes app/webroot/img/icons/.svn/entries | 708 ++ .../icons/.svn/prop-base/Thumbs.db.svn-base | 5 + .../prop-base/bullet_arrow_down.png.svn-base | 5 + .../prop-base/bullet_arrow_right.png.svn-base | 5 + .../icons/.svn/prop-base/cancel.png.svn-base | 5 + .../icons/.svn/prop-base/comment.png.svn-base | 5 + .../icons/.svn/prop-base/cross.png.svn-base | 5 + .../img/icons/.svn/prop-base/css.png.svn-base | 5 + .../.svn/prop-base/exclamation.png.svn-base | 5 + .../icons/.svn/prop-base/feed.png.svn-base | 5 + .../icons/.svn/prop-base/folder.png.svn-base | 5 + .../icons/.svn/prop-base/html.png.svn-base | 5 + .../.svn/prop-base/information.png.svn-base | 5 + .../.svn/prop-base/page_white.png.svn-base | 5 + .../page_white_compressed.png.svn-base | 5 + .../prop-base/page_white_php.png.svn-base | 5 + .../icons/.svn/prop-base/picture.png.svn-base | 5 + .../icons/.svn/prop-base/tick.png.svn-base | 5 + .../.svn/prop-base/tick_disabled.png.svn-base | 5 + .../icons/.svn/prop-base/tipsy.gif.svn-base | 5 + .../icons/.svn/text-base/Thumbs.db.svn-base | Bin 0 -> 25600 bytes .../text-base/bullet_arrow_down.png.svn-base | Bin 0 -> 201 bytes .../text-base/bullet_arrow_right.png.svn-base | Bin 0 -> 1024 bytes .../icons/.svn/text-base/cancel.png.svn-base | Bin 0 -> 587 bytes .../icons/.svn/text-base/comment.png.svn-base | Bin 0 -> 413 bytes .../icons/.svn/text-base/cross.png.svn-base | Bin 0 -> 655 bytes .../img/icons/.svn/text-base/css.png.svn-base | Bin 0 -> 524 bytes .../.svn/text-base/exclamation.png.svn-base | Bin 0 -> 701 bytes .../icons/.svn/text-base/feed.png.svn-base | Bin 0 -> 691 bytes .../icons/.svn/text-base/folder.png.svn-base | Bin 0 -> 537 bytes .../icons/.svn/text-base/html.png.svn-base | Bin 0 -> 578 bytes .../icons/.svn/text-base/index.html.svn-base | 1 + .../.svn/text-base/information.png.svn-base | Bin 0 -> 778 bytes .../.svn/text-base/page_white.png.svn-base | Bin 0 -> 294 bytes .../page_white_compressed.png.svn-base | Bin 0 -> 724 bytes .../text-base/page_white_php.png.svn-base | Bin 0 -> 538 bytes .../icons/.svn/text-base/picture.png.svn-base | Bin 0 -> 606 bytes .../icons/.svn/text-base/tick.png.svn-base | Bin 0 -> 537 bytes .../.svn/text-base/tick_disabled.png.svn-base | Bin 0 -> 1154 bytes .../icons/.svn/text-base/tipsy.gif.svn-base | Bin 0 -> 58 bytes app/webroot/img/icons/Thumbs.db | Bin 0 -> 25600 bytes app/webroot/img/icons/bullet_arrow_down.png | Bin 0 -> 201 bytes app/webroot/img/icons/bullet_arrow_right.png | Bin 0 -> 1024 bytes app/webroot/img/icons/cancel.png | Bin 0 -> 587 bytes app/webroot/img/icons/comment.png | Bin 0 -> 413 bytes app/webroot/img/icons/cross.png | Bin 0 -> 655 bytes app/webroot/img/icons/css.png | Bin 0 -> 524 bytes app/webroot/img/icons/exclamation.png | Bin 0 -> 701 bytes app/webroot/img/icons/feed.png | Bin 0 -> 691 bytes app/webroot/img/icons/folder.png | Bin 0 -> 537 bytes app/webroot/img/icons/html.png | Bin 0 -> 578 bytes app/webroot/img/icons/index.html | 1 + app/webroot/img/icons/information.png | Bin 0 -> 778 bytes app/webroot/img/icons/page_white.png | Bin 0 -> 294 bytes .../img/icons/page_white_compressed.png | Bin 0 -> 724 bytes app/webroot/img/icons/page_white_php.png | Bin 0 -> 538 bytes app/webroot/img/icons/picture.png | Bin 0 -> 606 bytes app/webroot/img/icons/tick.png | Bin 0 -> 537 bytes app/webroot/img/icons/tick_disabled.png | Bin 0 -> 1154 bytes app/webroot/img/icons/tipsy.gif | Bin 0 -> 58 bytes app/webroot/img/index.html | 1 + app/webroot/img/screenshot.png | Bin 0 -> 31398 bytes app/webroot/index.php | 88 + app/webroot/js/.svn/entries | 303 + .../js/.svn/text-base/admin.js.svn-base | 92 + .../js/.svn/text-base/croogo.js.svn-base | 9 + .../js/.svn/text-base/index.html.svn-base | 1 + .../js/.svn/text-base/nodes.js.svn-base | 133 + .../js/.svn/text-base/terms.js.svn-base | 43 + .../js/.svn/text-base/theme.js.svn-base | 16 + .../js/.svn/text-base/vendors.php.svn-base | 42 + .../.svn/text-base/vocabularies.js.svn-base | 43 + app/webroot/js/admin.js | 92 + app/webroot/js/croogo.js | 9 + app/webroot/js/index.html | 1 + app/webroot/js/jquery/.svn/entries | 470 ++ .../jquery/.svn/text-base/index.html.svn-base | 1 + .../.svn/text-base/jquery-ui.min.js.svn-base | 763 ++ .../.svn/text-base/jquery.cookie.js.svn-base | 96 + .../jquery.elastic-1.6.1.js.svn-base | 1 + .../text-base/jquery.field.min.js.svn-base | 13 + .../jquery.hoverIntent.minified.js.svn-base | 9 + .../.svn/text-base/jquery.min.js.svn-base | 154 + .../.svn/text-base/jquery.slug.js.svn-base | 36 + .../.svn/text-base/jquery.tipsy.js.svn-base | 198 + .../.svn/text-base/jquery.uuid.js.svn-base | 24 + .../.svn/text-base/superfish.js.svn-base | 121 + .../.svn/text-base/supersubs.js.svn-base | 90 + .../text-base/thickbox-compressed.js.svn-base | 10 + app/webroot/js/jquery/index.html | 1 + app/webroot/js/jquery/jquery-1.4.2.js | 6240 +++++++++++++++++ app/webroot/js/jquery/jquery-ui.min.js | 763 ++ app/webroot/js/jquery/jquery.cookie.js | 96 + app/webroot/js/jquery/jquery.elastic-1.6.1.js | 1 + app/webroot/js/jquery/jquery.field.min.js | 13 + .../js/jquery/jquery.hoverIntent.minified.js | 9 + .../js/jquery/jquery.maskedinput-1.2.2.min.js | 7 + app/webroot/js/jquery/jquery.min.js | 154 + app/webroot/js/jquery/jquery.numeric.js | 142 + app/webroot/js/jquery/jquery.slug.js | 36 + app/webroot/js/jquery/jquery.tipsy.js | 198 + app/webroot/js/jquery/jquery.uuid.js | 24 + app/webroot/js/jquery/jquery.validate.js | 1146 +++ app/webroot/js/jquery/superfish.js | 121 + app/webroot/js/jquery/supersubs.js | 90 + app/webroot/js/jquery/thickbox-compressed.js | 10 + app/webroot/js/nodes.js | 133 + app/webroot/js/terms.js | 43 + app/webroot/js/theme.js | 16 + app/webroot/js/vendors.php | 42 + app/webroot/js/vocabularies.js | 43 + app/webroot/produto/.svn/entries | 130 + .../prop-base/John-produto-3-2.jpg.svn-base | 5 + .../prop-base/John-produto-3.jpg.svn-base | 5 + .../produto/.svn/prop-base/Thumbs.db.svn-base | 5 + .../text-base/John-produto-3-2.jpg.svn-base | Bin 0 -> 342941 bytes .../text-base/John-produto-3.jpg.svn-base | Bin 0 -> 5674 bytes .../produto/.svn/text-base/Thumbs.db.svn-base | Bin 0 -> 8704 bytes app/webroot/produto/John-produto-3-2.jpg | Bin 0 -> 342941 bytes app/webroot/produto/John-produto-3.jpg | Bin 0 -> 5674 bytes app/webroot/produto/Thumbs.db | Bin 0 -> 12800 bytes app/webroot/produto/demonstracao.jpg | Bin 0 -> 16052 bytes .../requerimento-revisao-de-tributo.pdf | Bin 0 -> 374265 bytes app/webroot/test.php | 96 + app/webroot/theme.yml | 14 + app/webroot/ui-themes/.svn/entries | 31 + app/webroot/ui-themes/smoothness/.svn/entries | 65 + .../.svn/text-base/jquery-ui.css.svn-base | 572 ++ .../ui-themes/smoothness/images/.svn/entries | 470 ++ .../ui-bg_flat_0_aaaaaa_40x100.png.svn-base | 5 + .../ui-bg_flat_75_ffffff_40x100.png.svn-base | 5 + .../ui-bg_glass_55_fbf9ee_1x400.png.svn-base | 5 + .../ui-bg_glass_65_ffffff_1x400.png.svn-base | 5 + .../ui-bg_glass_75_dadada_1x400.png.svn-base | 5 + .../ui-bg_glass_75_e6e6e6_1x400.png.svn-base | 5 + .../ui-bg_glass_95_fef1ec_1x400.png.svn-base | 5 + ...ighlight-soft_75_cccccc_1x100.png.svn-base | 5 + .../ui-icons_222222_256x240.png.svn-base | 5 + .../ui-icons_2e83ff_256x240.png.svn-base | 5 + .../ui-icons_454545_256x240.png.svn-base | 5 + .../ui-icons_888888_256x240.png.svn-base | 5 + .../ui-icons_cd0a0a_256x240.png.svn-base | 5 + .../ui-bg_flat_0_aaaaaa_40x100.png.svn-base | Bin 0 -> 180 bytes .../ui-bg_flat_75_ffffff_40x100.png.svn-base | Bin 0 -> 178 bytes .../ui-bg_glass_55_fbf9ee_1x400.png.svn-base | Bin 0 -> 120 bytes .../ui-bg_glass_65_ffffff_1x400.png.svn-base | Bin 0 -> 105 bytes .../ui-bg_glass_75_dadada_1x400.png.svn-base | Bin 0 -> 111 bytes .../ui-bg_glass_75_e6e6e6_1x400.png.svn-base | Bin 0 -> 110 bytes .../ui-bg_glass_95_fef1ec_1x400.png.svn-base | Bin 0 -> 119 bytes ...ighlight-soft_75_cccccc_1x100.png.svn-base | Bin 0 -> 101 bytes .../ui-icons_222222_256x240.png.svn-base | Bin 0 -> 4369 bytes .../ui-icons_2e83ff_256x240.png.svn-base | Bin 0 -> 4369 bytes .../ui-icons_454545_256x240.png.svn-base | Bin 0 -> 4369 bytes .../ui-icons_888888_256x240.png.svn-base | Bin 0 -> 4369 bytes .../ui-icons_cd0a0a_256x240.png.svn-base | Bin 0 -> 4369 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../ui-themes/smoothness/jquery-ui.css | 572 ++ app/webroot/webservice-simples.php | 24 + cake/.DS_Store | Bin 0 -> 6148 bytes cake/LICENSE.txt | 22 + cake/README | 34 + cake/VERSION.txt | 21 + cake/basics.php | 1026 +++ cake/bootstrap.php | 39 + cake/config/.svn/entries | 99 + .../config/.svn/text-base/config.php.svn-base | 20 + cake/config/.svn/text-base/paths.php.svn-base | 231 + cake/config/config.php | 20 + cake/config/paths.php | 231 + cake/config/unicode/.svn/entries | 31 + cake/config/unicode/casefolding/.svn/entries | 606 ++ .../.svn/text-base/0080_00ff.php.svn-base | 74 + .../.svn/text-base/0100_017f.php.svn-base | 107 + .../.svn/text-base/0180_024F.php.svn-base | 149 + .../.svn/text-base/0250_02af.php.svn-base | 42 + .../.svn/text-base/0370_03ff.php.svn-base | 103 + .../.svn/text-base/0400_04ff.php.svn-base | 165 + .../.svn/text-base/0500_052f.php.svn-base | 49 + .../.svn/text-base/0530_058f.php.svn-base | 79 + .../.svn/text-base/1e00_1eff.php.svn-base | 169 + .../.svn/text-base/1f00_1fff.php.svn-base | 217 + .../.svn/text-base/2100_214f.php.svn-base | 45 + .../.svn/text-base/2150_218f.php.svn-base | 58 + .../.svn/text-base/2460_24ff.php.svn-base | 67 + .../.svn/text-base/2c00_2c5f.php.svn-base | 88 + .../.svn/text-base/2c60_2c7f.php.svn-base | 49 + .../.svn/text-base/2c80_2cff.php.svn-base | 91 + .../.svn/text-base/ff00_ffef.php.svn-base | 67 + cake/config/unicode/casefolding/0080_00ff.php | 74 + cake/config/unicode/casefolding/0100_017f.php | 107 + cake/config/unicode/casefolding/0180_024F.php | 149 + cake/config/unicode/casefolding/0250_02af.php | 42 + cake/config/unicode/casefolding/0370_03ff.php | 103 + cake/config/unicode/casefolding/0400_04ff.php | 165 + cake/config/unicode/casefolding/0500_052f.php | 49 + cake/config/unicode/casefolding/0530_058f.php | 79 + cake/config/unicode/casefolding/1e00_1eff.php | 169 + cake/config/unicode/casefolding/1f00_1fff.php | 217 + cake/config/unicode/casefolding/2100_214f.php | 45 + cake/config/unicode/casefolding/2150_218f.php | 58 + cake/config/unicode/casefolding/2460_24ff.php | 67 + cake/config/unicode/casefolding/2c00_2c5f.php | 88 + cake/config/unicode/casefolding/2c60_2c7f.php | 49 + cake/config/unicode/casefolding/2c80_2cff.php | 91 + cake/config/unicode/casefolding/ff00_ffef.php | 67 + cake/console/.svn/entries | 170 + cake/console/.svn/text-base/cake.bat.svn-base | 31 + cake/console/.svn/text-base/cake.php.svn-base | 661 ++ cake/console/.svn/text-base/cake.svn-base | 26 + .../console/.svn/text-base/error.php.svn-base | 265 + cake/console/cake | 26 + cake/console/cake.bat | 33 + cake/console/cake.php | 666 ++ cake/console/error.php | 265 + cake/console/libs/.svn/entries | 303 + .../libs/.svn/text-base/acl.php.svn-base | 601 ++ .../libs/.svn/text-base/api.php.svn-base | 213 + .../libs/.svn/text-base/bake.php.svn-base | 230 + .../libs/.svn/text-base/console.php.svn-base | 361 + .../libs/.svn/text-base/i18n.php.svn-base | 128 + .../libs/.svn/text-base/schema.php.svn-base | 503 ++ .../libs/.svn/text-base/shell.php.svn-base | 647 ++ .../.svn/text-base/testsuite.php.svn-base | 370 + cake/console/libs/acl.php | 602 ++ cake/console/libs/api.php | 213 + cake/console/libs/bake.php | 230 + cake/console/libs/console.php | 361 + cake/console/libs/i18n.php | 128 + cake/console/libs/schema.php | 511 ++ cake/console/libs/shell.php | 647 ++ cake/console/libs/tasks/.svn/entries | 402 ++ .../tasks/.svn/text-base/bake.php.svn-base | 60 + .../.svn/text-base/controller.php.svn-base | 480 ++ .../.svn/text-base/db_config.php.svn-base | 368 + .../tasks/.svn/text-base/extract.php.svn-base | 494 ++ .../tasks/.svn/text-base/fixture.php.svn-base | 422 ++ .../tasks/.svn/text-base/model.php.svn-base | 930 +++ .../tasks/.svn/text-base/plugin.php.svn-base | 247 + .../tasks/.svn/text-base/project.php.svn-base | 371 + .../.svn/text-base/template.php.svn-base | 212 + .../tasks/.svn/text-base/test.php.svn-base | 456 ++ .../tasks/.svn/text-base/view.php.svn-base | 488 ++ cake/console/libs/tasks/bake.php | 60 + cake/console/libs/tasks/controller.php | 481 ++ cake/console/libs/tasks/db_config.php | 368 + cake/console/libs/tasks/extract.php | 494 ++ cake/console/libs/tasks/fixture.php | 425 ++ cake/console/libs/tasks/model.php | 930 +++ cake/console/libs/tasks/plugin.php | 247 + cake/console/libs/tasks/project.php | 371 + cake/console/libs/tasks/template.php | 210 + cake/console/libs/tasks/test.php | 469 ++ cake/console/libs/tasks/view.php | 491 ++ cake/console/libs/testsuite.php | 370 + cake/console/templates/.svn/entries | 34 + cake/console/templates/default/.svn/entries | 37 + .../templates/default/actions/.svn/entries | 62 + .../text-base/controller_actions.ctp.svn-base | 140 + .../default/actions/controller_actions.ctp | 140 + .../templates/default/classes/.svn/entries | 164 + .../.svn/text-base/controller.ctp.svn-base | 61 + .../.svn/text-base/fixture.ctp.svn-base | 42 + .../classes/.svn/text-base/model.ctp.svn-base | 142 + .../classes/.svn/text-base/test.ctp.svn-base | 57 + .../templates/default/classes/controller.ctp | 61 + .../templates/default/classes/fixture.ctp | 42 + .../templates/default/classes/model.ctp | 142 + .../templates/default/classes/test.ctp | 57 + .../templates/default/views/.svn/entries | 164 + .../views/.svn/text-base/form.ctp.svn-base | 66 + .../views/.svn/text-base/home.ctp.svn-base | 84 + .../views/.svn/text-base/index.ctp.svn-base | 96 + .../views/.svn/text-base/view.ctp.svn-base | 146 + cake/console/templates/default/views/form.ctp | 66 + cake/console/templates/default/views/home.ctp | 84 + .../console/templates/default/views/index.ctp | 96 + cake/console/templates/default/views/view.ctp | 146 + cake/console/templates/skel/.htaccess | 5 + cake/console/templates/skel/.svn/entries | 231 + .../skel/.svn/text-base/.htaccess.svn-base | 5 + .../text-base/app_controller.php.svn-base | 34 + .../.svn/text-base/app_helper.php.svn-base | 36 + .../.svn/text-base/app_model.php.svn-base | 34 + .../skel/.svn/text-base/index.php.svn-base | 18 + .../console/templates/skel/app_controller.php | 34 + cake/console/templates/skel/app_helper.php | 36 + cake/console/templates/skel/app_model.php | 34 + .../templates/skel/config/.svn/entries | 201 + .../.svn/text-base/acl.ini.php.svn-base | 70 + .../.svn/text-base/bootstrap.php.svn-base | 50 + .../config/.svn/text-base/core.php.svn-base | 302 + .../text-base/database.php.default.svn-base | 95 + .../config/.svn/text-base/routes.php.svn-base | 35 + .../console/templates/skel/config/acl.ini.php | 70 + .../templates/skel/config/bootstrap.php | 50 + cake/console/templates/skel/config/core.php | 303 + .../skel/config/database.php.default | 95 + cake/console/templates/skel/config/routes.php | 35 + .../templates/skel/config/schema/.svn/entries | 232 + .../schema/.svn/text-base/db_acl.php.svn-base | 75 + .../schema/.svn/text-base/db_acl.sql.svn-base | 40 + .../schema/.svn/text-base/i18n.php.svn-base | 52 + .../schema/.svn/text-base/i18n.sql.svn-base | 26 + .../.svn/text-base/sessions.php.svn-base | 49 + .../.svn/text-base/sessions.sql.svn-base | 16 + .../templates/skel/config/schema/db_acl.php | 75 + .../templates/skel/config/schema/db_acl.sql | 40 + .../templates/skel/config/schema/i18n.php | 52 + .../templates/skel/config/schema/i18n.sql | 26 + .../templates/skel/config/schema/sessions.php | 49 + .../templates/skel/config/schema/sessions.sql | 16 + .../templates/skel/controllers/.svn/entries | 65 + .../text-base/pages_controller.php.svn-base | 84 + .../skel/controllers/components/.svn/entries | 62 + .../components/.svn/text-base/empty.svn-base | 0 .../skel/controllers/components/empty | 0 .../skel/controllers/pages_controller.php | 84 + cake/console/templates/skel/index.php | 18 + cake/console/templates/skel/libs/.svn/entries | 62 + .../skel/libs/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/libs/empty | 0 .../templates/skel/locale/.svn/entries | 31 + .../templates/skel/locale/eng/.svn/entries | 31 + .../skel/locale/eng/LC_MESSAGES/.svn/entries | 62 + .../LC_MESSAGES/.svn/text-base/empty.svn-base | 0 .../skel/locale/eng/LC_MESSAGES/empty | 0 .../templates/skel/models/.svn/entries | 34 + .../skel/models/behaviors/.svn/entries | 62 + .../behaviors/.svn/text-base/empty.svn-base | 0 .../templates/skel/models/behaviors/empty | 0 .../skel/models/datasources/.svn/entries | 62 + .../datasources/.svn/text-base/empty.svn-base | 0 .../templates/skel/models/datasources/empty | 0 .../templates/skel/plugins/.svn/entries | 62 + .../plugins/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/plugins/empty | 0 .../console/templates/skel/tests/.svn/entries | 37 + .../templates/skel/tests/cases/.svn/entries | 49 + .../skel/tests/cases/behaviors/.svn/entries | 62 + .../behaviors/.svn/text-base/empty.svn-base | 0 .../skel/tests/cases/behaviors/empty | 0 .../skel/tests/cases/components/.svn/entries | 62 + .../components/.svn/text-base/empty.svn-base | 0 .../skel/tests/cases/components/empty | 0 .../skel/tests/cases/controllers/.svn/entries | 62 + .../controllers/.svn/text-base/empty.svn-base | 0 .../skel/tests/cases/controllers/empty | 0 .../skel/tests/cases/datasources/.svn/entries | 62 + .../datasources/.svn/text-base/empty.svn-base | 0 .../skel/tests/cases/datasources/empty | 0 .../skel/tests/cases/helpers/.svn/entries | 62 + .../helpers/.svn/text-base/empty.svn-base | 0 .../templates/skel/tests/cases/helpers/empty | 0 .../skel/tests/cases/models/.svn/entries | 62 + .../models/.svn/text-base/empty.svn-base | 0 .../templates/skel/tests/cases/models/empty | 0 .../skel/tests/cases/shells/.svn/entries | 62 + .../shells/.svn/text-base/empty.svn-base | 0 .../templates/skel/tests/cases/shells/empty | 0 .../skel/tests/fixtures/.svn/entries | 62 + .../fixtures/.svn/text-base/empty.svn-base | 0 .../templates/skel/tests/fixtures/empty | 0 .../templates/skel/tests/groups/.svn/entries | 62 + .../groups/.svn/text-base/empty.svn-base | 0 .../console/templates/skel/tests/groups/empty | 0 cake/console/templates/skel/tmp/.svn/entries | 40 + .../templates/skel/tmp/cache/.svn/entries | 37 + .../skel/tmp/cache/models/.svn/entries | 62 + .../models/.svn/text-base/empty.svn-base | 0 .../templates/skel/tmp/cache/models/empty | 0 .../skel/tmp/cache/persistent/.svn/entries | 62 + .../persistent/.svn/text-base/empty.svn-base | 0 .../templates/skel/tmp/cache/persistent/empty | 0 .../skel/tmp/cache/views/.svn/entries | 62 + .../cache/views/.svn/text-base/empty.svn-base | 0 .../templates/skel/tmp/cache/views/empty | 0 .../templates/skel/tmp/logs/.svn/entries | 62 + .../tmp/logs/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/tmp/logs/empty | 0 .../templates/skel/tmp/sessions/.svn/entries | 62 + .../sessions/.svn/text-base/empty.svn-base | 0 .../console/templates/skel/tmp/sessions/empty | 0 .../templates/skel/tmp/tests/.svn/entries | 62 + .../tmp/tests/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/tmp/tests/empty | 0 .../templates/skel/vendors/.svn/entries | 31 + .../skel/vendors/shells/.svn/entries | 31 + .../skel/vendors/shells/tasks/.svn/entries | 62 + .../tasks/.svn/text-base/empty.svn-base | 0 .../templates/skel/vendors/shells/tasks/empty | 0 .../console/templates/skel/views/.svn/entries | 46 + .../skel/views/elements/.svn/entries | 65 + .../elements/.svn/text-base/empty.svn-base | 0 .../skel/views/elements/email/.svn/entries | 34 + .../views/elements/email/html/.svn/entries | 62 + .../html/.svn/text-base/default.ctp.svn-base | 26 + .../views/elements/email/html/default.ctp | 26 + .../views/elements/email/text/.svn/entries | 62 + .../text/.svn/text-base/default.ctp.svn-base | 20 + .../views/elements/email/text/default.ctp | 20 + .../templates/skel/views/elements/empty | 0 .../templates/skel/views/errors/.svn/entries | 62 + .../errors/.svn/text-base/empty.svn-base | 0 .../console/templates/skel/views/errors/empty | 0 .../templates/skel/views/helpers/.svn/entries | 62 + .../helpers/.svn/text-base/empty.svn-base | 0 .../templates/skel/views/helpers/empty | 0 .../templates/skel/views/layouts/.svn/entries | 142 + .../layouts/.svn/text-base/ajax.ctp.svn-base | 20 + .../.svn/text-base/default.ctp.svn-base | 59 + .../layouts/.svn/text-base/flash.ctp.svn-base | 38 + .../templates/skel/views/layouts/ajax.ctp | 20 + .../templates/skel/views/layouts/default.ctp | 59 + .../skel/views/layouts/email/.svn/entries | 34 + .../views/layouts/email/html/.svn/entries | 62 + .../html/.svn/text-base/default.ctp.svn-base | 32 + .../skel/views/layouts/email/html/default.ctp | 32 + .../views/layouts/email/text/.svn/entries | 62 + .../text/.svn/text-base/default.ctp.svn-base | 23 + .../skel/views/layouts/email/text/default.ctp | 23 + .../templates/skel/views/layouts/flash.ctp | 38 + .../skel/views/layouts/js/.svn/entries | 62 + .../js/.svn/text-base/default.ctp.svn-base | 2 + .../skel/views/layouts/js/default.ctp | 2 + .../skel/views/layouts/rss/.svn/entries | 62 + .../rss/.svn/text-base/default.ctp.svn-base | 17 + .../skel/views/layouts/rss/default.ctp | 17 + .../skel/views/layouts/xml/.svn/entries | 62 + .../xml/.svn/text-base/default.ctp.svn-base | 2 + .../skel/views/layouts/xml/default.ctp | 2 + .../templates/skel/views/pages/.svn/entries | 62 + .../views/pages/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/views/pages/empty | 0 .../skel/views/scaffolds/.svn/entries | 62 + .../scaffolds/.svn/text-base/empty.svn-base | 0 .../templates/skel/views/scaffolds/empty | 0 cake/console/templates/skel/webroot/.htaccess | 6 + .../templates/skel/webroot/.svn/entries | 207 + .../.svn/prop-base/favicon.ico.svn-base | 5 + .../webroot/.svn/text-base/.htaccess.svn-base | 6 + .../webroot/.svn/text-base/css.php.svn-base | 97 + .../.svn/text-base/favicon.ico.svn-base | Bin 0 -> 372 bytes .../webroot/.svn/text-base/index.php.svn-base | 84 + .../webroot/.svn/text-base/test.php.svn-base | 94 + cake/console/templates/skel/webroot/css.php | 97 + .../templates/skel/webroot/css/.svn/entries | 62 + .../.svn/text-base/cake.generic.css.svn-base | 535 ++ .../skel/webroot/css/cake.generic.css | 535 ++ .../templates/skel/webroot/favicon.ico | Bin 0 -> 372 bytes .../templates/skel/webroot/img/.svn/entries | 96 + .../img/.svn/prop-base/cake.icon.png.svn-base | 5 + .../.svn/prop-base/cake.power.gif.svn-base | 5 + .../img/.svn/text-base/cake.icon.png.svn-base | Bin 0 -> 943 bytes .../.svn/text-base/cake.power.gif.svn-base | Bin 0 -> 201 bytes .../templates/skel/webroot/img/cake.icon.png | Bin 0 -> 943 bytes .../templates/skel/webroot/img/cake.power.gif | Bin 0 -> 201 bytes cake/console/templates/skel/webroot/index.php | 84 + .../templates/skel/webroot/js/.svn/entries | 62 + .../webroot/js/.svn/text-base/empty.svn-base | 0 cake/console/templates/skel/webroot/js/empty | 0 cake/console/templates/skel/webroot/test.php | 94 + cake/dispatcher.php | 662 ++ cake/libs/.DS_Store | Bin 0 -> 12292 bytes cake/libs/.svn/entries | 961 +++ cake/libs/.svn/text-base/cache.php.svn-base | 675 ++ .../libs/.svn/text-base/cake_log.php.svn-base | 291 + .../.svn/text-base/cake_session.php.svn-base | 788 +++ .../.svn/text-base/cake_socket.php.svn-base | 304 + .../text-base/class_registry.php.svn-base | 364 + .../.svn/text-base/configure.php.svn-base | 1311 ++++ .../libs/.svn/text-base/debugger.php.svn-base | 708 ++ cake/libs/.svn/text-base/error.php.svn-base | 461 ++ cake/libs/.svn/text-base/file.php.svn-base | 544 ++ cake/libs/.svn/text-base/folder.php.svn-base | 786 +++ .../.svn/text-base/http_socket.php.svn-base | 1065 +++ cake/libs/.svn/text-base/i18n.php.svn-base | 575 ++ .../.svn/text-base/inflector.php.svn-base | 626 ++ cake/libs/.svn/text-base/l10n.php.svn-base | 488 ++ .../libs/.svn/text-base/magic_db.php.svn-base | 302 + .../.svn/text-base/multibyte.php.svn-base | 1172 ++++ cake/libs/.svn/text-base/object.php.svn-base | 298 + .../.svn/text-base/overloadable.php.svn-base | 36 + .../text-base/overloadable_php4.php.svn-base | 165 + .../text-base/overloadable_php5.php.svn-base | 108 + cake/libs/.svn/text-base/router.php.svn-base | 1632 +++++ .../libs/.svn/text-base/sanitize.php.svn-base | 348 + .../libs/.svn/text-base/security.php.svn-base | 191 + cake/libs/.svn/text-base/set.php.svn-base | 1152 +++ cake/libs/.svn/text-base/string.php.svn-base | 328 + .../.svn/text-base/validation.php.svn-base | 1060 +++ cake/libs/.svn/text-base/xml.php.svn-base | 1466 ++++ cake/libs/cache.php | 690 ++ cake/libs/cache/.svn/entries | 164 + .../cache/.svn/text-base/apc.php.svn-base | 123 + .../cache/.svn/text-base/file.php.svn-base | 271 + .../.svn/text-base/memcache.php.svn-base | 198 + .../cache/.svn/text-base/xcache.php.svn-base | 183 + cake/libs/cache/apc.php | 123 + cake/libs/cache/file.php | 272 + cake/libs/cache/memcache.php | 219 + cake/libs/cache/xcache.php | 183 + cake/libs/cake_log.php | 292 + cake/libs/cake_session.php | 794 +++ cake/libs/cake_socket.php | 304 + cake/libs/class_registry.php | 364 + cake/libs/configure.php | 1320 ++++ cake/libs/controller/.svn/entries | 201 + .../text-base/app_controller.php.svn-base | 36 + .../.svn/text-base/component.php.svn-base | 263 + .../.svn/text-base/controller.php.svn-base | 1324 ++++ .../text-base/pages_controller.php.svn-base | 85 + .../.svn/text-base/scaffold.php.svn-base | 613 ++ cake/libs/controller/app_controller.php | 36 + cake/libs/controller/component.php | 267 + cake/libs/controller/components/.svn/entries | 266 + .../.svn/text-base/acl.php.svn-base | 638 ++ .../.svn/text-base/auth.php.svn-base | 960 +++ .../.svn/text-base/cookie.php.svn-base | 471 ++ .../.svn/text-base/email.php.svn-base | 965 +++ .../text-base/request_handler.php.svn-base | 824 +++ .../.svn/text-base/security.php.svn-base | 746 ++ .../.svn/text-base/session.php.svn-base | 295 + cake/libs/controller/components/acl.php | 638 ++ cake/libs/controller/components/auth.php | 958 +++ cake/libs/controller/components/cookie.php | 474 ++ cake/libs/controller/components/email.php | 1004 +++ .../controller/components/request_handler.php | 827 +++ cake/libs/controller/components/security.php | 747 ++ cake/libs/controller/components/session.php | 295 + cake/libs/controller/controller.php | 1320 ++++ cake/libs/controller/pages_controller.php | 85 + cake/libs/controller/scaffold.php | 615 ++ cake/libs/debugger.php | 708 ++ cake/libs/error.php | 462 ++ cake/libs/file.php | 542 ++ cake/libs/folder.php | 787 +++ cake/libs/http_socket.php | 1081 +++ cake/libs/i18n.php | 568 ++ cake/libs/inflector.php | 626 ++ cake/libs/l10n.php | 488 ++ cake/libs/log/.svn/entries | 62 + .../log/.svn/text-base/file_log.php.svn-base | 77 + cake/libs/log/file_log.php | 77 + cake/libs/magic_db.php | 302 + cake/libs/model/.svn/entries | 238 + .../.svn/text-base/app_model.php.svn-base | 35 + .../.svn/text-base/cake_schema.php.svn-base | 640 ++ .../text-base/connection_manager.php.svn-base | 295 + .../model/.svn/text-base/db_acl.php.svn-base | 332 + .../model/.svn/text-base/model.php.svn-base | 3040 ++++++++ .../text-base/model_behavior.php.svn-base | 533 ++ cake/libs/model/app_model.php | 35 + cake/libs/model/behaviors/.svn/entries | 164 + .../behaviors/.svn/text-base/acl.php.svn-base | 122 + .../.svn/text-base/containable.php.svn-base | 453 ++ .../.svn/text-base/translate.php.svn-base | 540 ++ .../.svn/text-base/tree.php.svn-base | 974 +++ cake/libs/model/behaviors/acl.php | 123 + cake/libs/model/behaviors/containable.php | 453 ++ cake/libs/model/behaviors/translate.php | 540 ++ cake/libs/model/behaviors/tree.php | 977 +++ cake/libs/model/cake_schema.php | 698 ++ cake/libs/model/connection_manager.php | 295 + cake/libs/model/datasources/.svn/entries | 99 + .../.svn/text-base/datasource.php.svn-base | 596 ++ .../.svn/text-base/dbo_source.php.svn-base | 2926 ++++++++ cake/libs/model/datasources/datasource.php | 601 ++ cake/libs/model/datasources/dbo/.svn/entries | 232 + .../dbo/.svn/text-base/dbo_mssql.php.svn-base | 788 +++ .../dbo/.svn/text-base/dbo_mysql.php.svn-base | 784 +++ .../.svn/text-base/dbo_mysqli.php.svn-base | 338 + .../.svn/text-base/dbo_oracle.php.svn-base | 1159 +++ .../.svn/text-base/dbo_postgres.php.svn-base | 974 +++ .../.svn/text-base/dbo_sqlite.php.svn-base | 623 ++ cake/libs/model/datasources/dbo/dbo_mssql.php | 788 +++ cake/libs/model/datasources/dbo/dbo_mysql.php | 799 +++ .../libs/model/datasources/dbo/dbo_mysqli.php | 332 + .../libs/model/datasources/dbo/dbo_oracle.php | 1159 +++ .../model/datasources/dbo/dbo_postgres.php | 980 +++ .../libs/model/datasources/dbo/dbo_sqlite.php | 623 ++ cake/libs/model/datasources/dbo_source.php | 2925 ++++++++ cake/libs/model/db_acl.php | 332 + cake/libs/model/model.php | 3074 ++++++++ cake/libs/model/model_behavior.php | 533 ++ cake/libs/multibyte.php | 1172 ++++ cake/libs/object.php | 298 + cake/libs/overloadable.php | 36 + cake/libs/overloadable_php4.php | 165 + cake/libs/overloadable_php5.php | 108 + cake/libs/router.php | 1649 +++++ cake/libs/sanitize.php | 348 + cake/libs/security.php | 191 + cake/libs/set.php | 1155 +++ cake/libs/string.php | 329 + cake/libs/validation.php | 1060 +++ cake/libs/view/.svn/entries | 182 + .../view/.svn/text-base/helper.php.svn-base | 908 +++ .../view/.svn/text-base/media.php.svn-base | 285 + .../view/.svn/text-base/theme.php.svn-base | 74 + .../view/.svn/text-base/view.php.svn-base | 970 +++ cake/libs/view/elements/.svn/entries | 65 + .../.svn/text-base/sql_dump.ctp.svn-base | 54 + cake/libs/view/elements/email/.svn/entries | 34 + .../view/elements/email/html/.svn/entries | 62 + .../html/.svn/text-base/default.ctp.svn-base | 26 + .../libs/view/elements/email/html/default.ctp | 26 + .../view/elements/email/text/.svn/entries | 62 + .../text/.svn/text-base/default.ctp.svn-base | 20 + .../libs/view/elements/email/text/default.ctp | 20 + cake/libs/view/elements/sql_dump.ctp | 61 + cake/libs/view/errors/.svn/entries | 640 ++ .../.svn/text-base/error404.ctp.svn-base | 24 + .../.svn/text-base/error500.ctp.svn-base | 24 + .../text-base/missing_action.ctp.svn-base | 46 + .../missing_behavior_class.ctp.svn-base | 39 + .../missing_behavior_file.ctp.svn-base | 39 + .../missing_component_class.ctp.svn-base | 39 + .../missing_component_file.ctp.svn-base | 39 + .../text-base/missing_connection.ctp.svn-base | 32 + .../text-base/missing_controller.ctp.svn-base | 40 + .../missing_helper_class.ctp.svn-base | 39 + .../missing_helper_file.ctp.svn-base | 39 + .../text-base/missing_layout.ctp.svn-base | 32 + .../.svn/text-base/missing_model.ctp.svn-base | 41 + .../text-base/missing_scaffolddb.ctp.svn-base | 32 + .../.svn/text-base/missing_table.ctp.svn-base | 28 + .../.svn/text-base/missing_view.ctp.svn-base | 32 + .../text-base/private_action.ctp.svn-base | 28 + .../text-base/scaffold_error.ctp.svn-base | 35 + cake/libs/view/errors/error404.ctp | 24 + cake/libs/view/errors/error500.ctp | 24 + cake/libs/view/errors/missing_action.ctp | 46 + .../view/errors/missing_behavior_class.ctp | 39 + .../view/errors/missing_behavior_file.ctp | 39 + .../view/errors/missing_component_class.ctp | 39 + .../view/errors/missing_component_file.ctp | 39 + cake/libs/view/errors/missing_connection.ctp | 32 + cake/libs/view/errors/missing_controller.ctp | 40 + .../libs/view/errors/missing_helper_class.ctp | 39 + cake/libs/view/errors/missing_helper_file.ctp | 39 + cake/libs/view/errors/missing_layout.ctp | 32 + cake/libs/view/errors/missing_model.ctp | 41 + cake/libs/view/errors/missing_scaffolddb.ctp | 32 + cake/libs/view/errors/missing_table.ctp | 28 + cake/libs/view/errors/missing_view.ctp | 32 + cake/libs/view/errors/private_action.ctp | 28 + cake/libs/view/errors/scaffold_error.ctp | 35 + cake/libs/view/helper.php | 912 +++ cake/libs/view/helpers/.svn/entries | 606 ++ .../helpers/.svn/text-base/ajax.php.svn-base | 1036 +++ .../.svn/text-base/app_helper.php.svn-base | 36 + .../helpers/.svn/text-base/cache.php.svn-base | 261 + .../helpers/.svn/text-base/form.php.svn-base | 2189 ++++++ .../helpers/.svn/text-base/html.php.svn-base | 835 +++ .../.svn/text-base/javascript.php.svn-base | 721 ++ .../.svn/text-base/jquery_engine.php.svn-base | 364 + .../helpers/.svn/text-base/js.php.svn-base | 1128 +++ .../text-base/mootools_engine.php.svn-base | 374 + .../.svn/text-base/number.php.svn-base | 257 + .../.svn/text-base/paginator.php.svn-base | 813 +++ .../text-base/prototype_engine.php.svn-base | 365 + .../helpers/.svn/text-base/rss.php.svn-base | 290 + .../.svn/text-base/session.php.svn-base | 201 + .../helpers/.svn/text-base/text.php.svn-base | 336 + .../helpers/.svn/text-base/time.php.svn-base | 735 ++ .../helpers/.svn/text-base/xml.php.svn-base | 174 + cake/libs/view/helpers/ajax.php | 1036 +++ cake/libs/view/helpers/app_helper.php | 36 + cake/libs/view/helpers/cache.php | 263 + cake/libs/view/helpers/form.php | 2210 ++++++ cake/libs/view/helpers/html.php | 835 +++ cake/libs/view/helpers/javascript.php | 721 ++ cake/libs/view/helpers/jquery_engine.php | 363 + cake/libs/view/helpers/js.php | 1132 +++ cake/libs/view/helpers/mootools_engine.php | 374 + cake/libs/view/helpers/number.php | 257 + cake/libs/view/helpers/paginator.php | 814 +++ cake/libs/view/helpers/prototype_engine.php | 370 + cake/libs/view/helpers/rss.php | 292 + cake/libs/view/helpers/session.php | 201 + cake/libs/view/helpers/text.php | 338 + cake/libs/view/helpers/time.php | 744 ++ cake/libs/view/helpers/xml.php | 174 + cake/libs/view/layouts/.svn/entries | 142 + .../layouts/.svn/text-base/ajax.ctp.svn-base | 20 + .../.svn/text-base/default.ctp.svn-base | 59 + .../layouts/.svn/text-base/flash.ctp.svn-base | 38 + cake/libs/view/layouts/ajax.ctp | 20 + cake/libs/view/layouts/default.ctp | 59 + cake/libs/view/layouts/email/.svn/entries | 34 + .../libs/view/layouts/email/html/.svn/entries | 62 + .../html/.svn/text-base/default.ctp.svn-base | 30 + cake/libs/view/layouts/email/html/default.ctp | 30 + .../libs/view/layouts/email/text/.svn/entries | 62 + .../text/.svn/text-base/default.ctp.svn-base | 22 + cake/libs/view/layouts/email/text/default.ctp | 22 + cake/libs/view/layouts/flash.ctp | 38 + cake/libs/view/layouts/js/.svn/entries | 62 + .../js/.svn/text-base/default.ctp.svn-base | 2 + cake/libs/view/layouts/js/default.ctp | 2 + cake/libs/view/layouts/rss/.svn/entries | 62 + .../rss/.svn/text-base/default.ctp.svn-base | 16 + cake/libs/view/layouts/rss/default.ctp | 16 + cake/libs/view/layouts/xml/.svn/entries | 62 + .../xml/.svn/text-base/default.ctp.svn-base | 2 + cake/libs/view/layouts/xml/default.ctp | 2 + cake/libs/view/media.php | 285 + cake/libs/view/pages/.svn/entries | 62 + .../pages/.svn/text-base/home.ctp.svn-base | 160 + cake/libs/view/pages/home.ctp | 170 + cake/libs/view/scaffolds/.svn/entries | 130 + .../.svn/text-base/edit.ctp.svn-base | 47 + .../.svn/text-base/index.ctp.svn-base | 93 + .../.svn/text-base/view.ctp.svn-base | 159 + cake/libs/view/scaffolds/edit.ctp | 47 + cake/libs/view/scaffolds/index.ctp | 93 + cake/libs/view/scaffolds/view.ctp | 159 + cake/libs/view/theme.php | 74 + cake/libs/view/view.php | 988 +++ cake/libs/xml.php | 1470 ++++ cake/tests/.DS_Store | Bin 0 -> 6148 bytes cake/tests/.svn/entries | 31 + cake/tests/lib/.DS_Store | Bin 0 -> 6148 bytes cake/tests/lib/.svn/entries | 272 + .../text-base/cake_test_case.php.svn-base | 831 +++ .../text-base/cake_test_fixture.php.svn-base | 195 + .../text-base/cake_test_model.php.svn-base | 31 + .../cake_test_suite_dispatcher.php.svn-base | 249 + .../text-base/cake_web_test_case.php.svn-base | 33 + .../code_coverage_manager.php.svn-base | 804 +++ .../.svn/text-base/test_manager.php.svn-base | 421 ++ cake/tests/lib/cake_test_case.php | 835 +++ cake/tests/lib/cake_test_fixture.php | 203 + cake/tests/lib/cake_test_model.php | 31 + cake/tests/lib/cake_test_suite_dispatcher.php | 249 + cake/tests/lib/cake_web_test_case.php | 33 + cake/tests/lib/code_coverage_manager.php | 804 +++ cake/tests/lib/reporter/.svn/entries | 164 + .../text-base/cake_base_reporter.php.svn-base | 225 + .../text-base/cake_cli_reporter.php.svn-base | 178 + .../text-base/cake_html_reporter.php.svn-base | 378 + .../text-base/cake_text_reporter.php.svn-base | 198 + .../tests/lib/reporter/cake_base_reporter.php | 225 + cake/tests/lib/reporter/cake_cli_reporter.php | 178 + .../tests/lib/reporter/cake_html_reporter.php | 378 + .../tests/lib/reporter/cake_text_reporter.php | 198 + cake/tests/lib/templates/.svn/entries | 198 + .../.svn/text-base/footer.php.svn-base | 37 + .../.svn/text-base/header.php.svn-base | 125 + .../.svn/text-base/menu.php.svn-base | 58 + .../.svn/text-base/simpletest.php.svn-base | 32 + .../.svn/text-base/xdebug.php.svn-base | 27 + cake/tests/lib/templates/footer.php | 37 + cake/tests/lib/templates/header.php | 125 + cake/tests/lib/templates/menu.php | 58 + cake/tests/lib/templates/simpletest.php | 32 + cake/tests/lib/templates/xdebug.php | 27 + cake/tests/lib/test_manager.php | 421 ++ google4e29e7604bbbbc61.html | 1 + index.html | 26 + index.php | 55 + vendors/.DS_Store | Bin 0 -> 6148 bytes vendors/shells/.DS_Store | Bin 0 -> 6148 bytes vendors/shells/tasks/.DS_Store | Bin 0 -> 6148 bytes vendors/shells/tasks/.svn/entries | 62 + .../tasks/.svn/text-base/empty.svn-base | 0 vendors/shells/tasks/empty | 0 vendors/shells/templates/.DS_Store | Bin 0 -> 6148 bytes vendors/shells/templates/.svn/entries | 62 + .../templates/.svn/text-base/empty.svn-base | 0 vendors/shells/templates/empty | 0 2709 files changed, 340638 insertions(+) create mode 100644 .htaccess create mode 100644 analytics.txt create mode 100644 app/.DS_Store create mode 100644 app/.gitignore create mode 100644 app/.gitmodules create mode 100644 app/.htaccess create mode 100644 app/LICENSE.txt create mode 100644 app/PERSONALIZADO/config/.svn/entries create mode 100644 app/PERSONALIZADO/config/.svn/text-base/croogo_routes.php.svn-base create mode 100644 app/PERSONALIZADO/config/.svn/text-base/database-local.php.svn-base create mode 100644 app/PERSONALIZADO/config/.svn/text-base/database.php.svn-base create mode 100644 app/PERSONALIZADO/config/.svn/text-base/settings.yml.svn-base create mode 100644 app/PERSONALIZADO/config/croogo_routes.php create mode 100644 app/PERSONALIZADO/config/database-local.php create mode 100644 app/PERSONALIZADO/config/database.php create mode 100644 app/PERSONALIZADO/config/settings.yml create mode 100644 app/PERSONALIZADO/views/.svn/entries create mode 100644 app/PERSONALIZADO/views/elements/.svn/entries create mode 100644 app/PERSONALIZADO/views/elements/admin/.svn/entries create mode 100644 app/PERSONALIZADO/views/elements/admin/.svn/text-base/navigation.ctp.svn-base create mode 100644 app/PERSONALIZADO/views/elements/admin/navigation.ctp create mode 100644 app/README.mdown create mode 100644 app/VERSION.txt create mode 100644 app/app_controller.php create mode 100644 app/app_error.php create mode 100644 app/app_helper.php create mode 100644 app/app_model.php create mode 100644 app/config/acl.ini.php create mode 100644 app/config/bootstrap.php create mode 100644 app/config/core.php create mode 100644 app/config/croogo_bootstrap.php create mode 100644 app/config/croogo_routes.php create mode 100644 app/config/database.php.install create mode 100644 app/config/inflections.php create mode 100644 app/config/routes.php create mode 100644 app/config/schema/.DS_Store create mode 100644 app/config/schema/data/.svn/entries create mode 100644 app/config/schema/data/.svn/text-base/aco_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/aro_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/aros_aco_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/block_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/comment_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/contact_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/i18n_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/language_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/link_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/menu_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/message_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/meta_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/node_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/nodes_taxonomy_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/region_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/role_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/setting_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/taxonomy_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/term_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/type_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/types_vocabulary_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/user_data.php.svn-base create mode 100644 app/config/schema/data/.svn/text-base/vocabulary_data.php.svn-base create mode 100644 app/config/schema/data/aco_data.php create mode 100644 app/config/schema/data/aro_data.php create mode 100644 app/config/schema/data/aros_aco_data.php create mode 100644 app/config/schema/data/block_data.php create mode 100644 app/config/schema/data/comment_data.php create mode 100644 app/config/schema/data/contact_data.php create mode 100644 app/config/schema/data/i18n_data.php create mode 100644 app/config/schema/data/language_data.php create mode 100644 app/config/schema/data/link_data.php create mode 100644 app/config/schema/data/menu_data.php create mode 100644 app/config/schema/data/message_data.php create mode 100644 app/config/schema/data/meta_data.php create mode 100644 app/config/schema/data/node_data.php create mode 100644 app/config/schema/data/nodes_taxonomy_data.php create mode 100644 app/config/schema/data/region_data.php create mode 100644 app/config/schema/data/role_data.php create mode 100644 app/config/schema/data/setting_data.php create mode 100644 app/config/schema/data/taxonomy_data.php create mode 100644 app/config/schema/data/term_data.php create mode 100644 app/config/schema/data/type_data.php create mode 100644 app/config/schema/data/types_vocabulary_data.php create mode 100644 app/config/schema/data/user_data.php create mode 100644 app/config/schema/data/vocabulary_data.php create mode 100644 app/config/schema/db_acl.php create mode 100644 app/config/schema/i18n.php create mode 100644 app/config/schema/schema.php create mode 100644 app/config/schema/sessions.php create mode 100644 app/config/schema/sql/.svn/entries create mode 100644 app/config/schema/sql/.svn/text-base/croogo.sql.svn-base create mode 100644 app/config/schema/sql/.svn/text-base/croogo_data.sql.svn-base create mode 100644 app/config/schema/sql/.svn/text-base/db_acl.sql.svn-base create mode 100644 app/config/schema/sql/.svn/text-base/i18n.sql.svn-base create mode 100644 app/config/schema/sql/.svn/text-base/sessions.sql.svn-base create mode 100644 app/config/schema/sql/croogo.sql create mode 100644 app/config/schema/sql/croogo_data.sql create mode 100644 app/config/schema/sql/db_acl.sql create mode 100644 app/config/schema/sql/i18n.sql create mode 100644 app/config/schema/sql/sessions.sql create mode 100644 app/config/settings.yml.install create mode 100644 app/config/sql/.svn/entries create mode 100644 app/config/sql/.svn/text-base/croogo.sql.svn-base create mode 100644 app/config/sql/.svn/text-base/croogo_data.sql.svn-base create mode 100644 app/config/sql/.svn/text-base/db_acl.php.svn-base create mode 100644 app/config/sql/.svn/text-base/db_acl.sql.svn-base create mode 100644 app/config/sql/.svn/text-base/i18n.php.svn-base create mode 100644 app/config/sql/.svn/text-base/i18n.sql.svn-base create mode 100644 app/config/sql/.svn/text-base/sessions.php.svn-base create mode 100644 app/config/sql/.svn/text-base/sessions.sql.svn-base create mode 100644 app/config/sql/croogo.sql create mode 100644 app/config/sql/croogo_data.sql create mode 100644 app/config/sql/db_acl.php create mode 100644 app/config/sql/db_acl.sql create mode 100644 app/config/sql/i18n.php create mode 100644 app/config/sql/i18n.sql create mode 100644 app/config/sql/sessions.php create mode 100644 app/config/sql/sessions.sql create mode 100644 app/controllers/attachments_controller.php create mode 100644 app/controllers/avisos_controller.php create mode 100644 app/controllers/blocks_controller.php create mode 100644 app/controllers/clientes_controller.php create mode 100644 app/controllers/codigos_controller.php create mode 100644 app/controllers/comments_controller.php create mode 100644 app/controllers/components/akismet.php create mode 100644 app/controllers/components/botao.php create mode 100644 app/controllers/components/calculadora.php create mode 100644 app/controllers/components/croogo.php create mode 100644 app/controllers/components/empty create mode 100644 app/controllers/components/frete.php create mode 100644 app/controllers/components/rastreamento.php create mode 100644 app/controllers/components/recaptcha.php create mode 100644 app/controllers/contacts_controller.php create mode 100644 app/controllers/filemanager_controller.php create mode 100644 app/controllers/languages_controller.php create mode 100644 app/controllers/links_controller.php create mode 100644 app/controllers/menus_controller.php create mode 100644 app/controllers/messages_controller.php create mode 100644 app/controllers/nodes_controller.php create mode 100644 app/controllers/opcaos_controller.php create mode 100644 app/controllers/opcoes_controller.php create mode 100644 app/controllers/produtos_controller(2).php create mode 100644 app/controllers/produtos_controller.php create mode 100644 app/controllers/produtos_controller2.php create mode 100644 app/controllers/regions_controller.php create mode 100644 app/controllers/roles_controller.php create mode 100644 app/controllers/settings_controller.php create mode 100644 app/controllers/terms_controller.php create mode 100644 app/controllers/types_controller.php create mode 100644 app/controllers/urls_controller.php create mode 100644 app/controllers/users_controller.php create mode 100644 app/controllers/vocabularies_controller.php create mode 100644 app/index.php create mode 100644 app/libs/croogo.php create mode 100644 app/libs/croogo_router.php create mode 100644 app/libs/empty create mode 100644 app/locale/.DS_Store create mode 100644 app/locale/README.mdown create mode 100644 app/locale/default.pot create mode 100644 app/locale/eng/.DS_Store create mode 100644 app/locale/eng/.svn/entries create mode 100644 app/locale/eng/LC_MESSAGES/.DS_Store create mode 100644 app/locale/eng/LC_MESSAGES/.svn/entries create mode 100644 app/locale/eng/LC_MESSAGES/.svn/text-base/empty.svn-base create mode 100644 app/locale/eng/LC_MESSAGES/empty create mode 100644 app/locale/por/LC_MESSAGES/default.po create mode 100644 app/models/aviso.php create mode 100644 app/models/behaviors/.svn/entries create mode 100644 app/models/behaviors/.svn/text-base/cached.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/croogo_translate.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/empty.svn-base create mode 100644 app/models/behaviors/.svn/text-base/encoder.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/meta.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/ordered.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/params.php.svn-base create mode 100644 app/models/behaviors/.svn/text-base/url.php.svn-base create mode 100644 app/models/behaviors/cached.php create mode 100644 app/models/behaviors/croogo_translate.php create mode 100644 app/models/behaviors/empty create mode 100644 app/models/behaviors/encoder.php create mode 100644 app/models/behaviors/meta.php create mode 100644 app/models/behaviors/ordered.php create mode 100644 app/models/behaviors/params.php create mode 100644 app/models/behaviors/url.php create mode 100644 app/models/block.php create mode 100644 app/models/cliente.php create mode 100644 app/models/codigo.php create mode 100644 app/models/comment.php create mode 100644 app/models/company.php create mode 100644 app/models/contact.php create mode 100644 app/models/datasources/.svn/entries create mode 100644 app/models/datasources/.svn/text-base/empty.svn-base create mode 100644 app/models/datasources/.svn/text-base/frete_source.php.svn-base create mode 100644 app/models/datasources/.svn/text-base/imap_source.php.svn-base create mode 100644 app/models/datasources/.svn/text-base/rastreamento_source.php.svn-base create mode 100644 app/models/datasources/empty create mode 100644 app/models/datasources/frete_source.php create mode 100644 app/models/datasources/imap_source.php create mode 100644 app/models/datasources/rastreamento_source.php create mode 100644 app/models/frete.php create mode 100644 app/models/language.php create mode 100644 app/models/link.php create mode 100644 app/models/menu.php create mode 100644 app/models/message.php create mode 100644 app/models/meta.php create mode 100644 app/models/node.php create mode 100644 app/models/opcao.php create mode 100644 app/models/produto.php create mode 100644 app/models/region.php create mode 100644 app/models/role.php create mode 100644 app/models/setting.php create mode 100644 app/models/taxonomy.php create mode 100644 app/models/term.php create mode 100644 app/models/type.php create mode 100644 app/models/user.php create mode 100644 app/models/vocabulary.php create mode 100644 app/plugins/acl/.svn/entries create mode 100644 app/plugins/acl/.svn/text-base/acl_app_controller.php.svn-base create mode 100644 app/plugins/acl/.svn/text-base/acl_app_model.php.svn-base create mode 100644 app/plugins/acl/acl_app_controller.php create mode 100644 app/plugins/acl/acl_app_model.php create mode 100644 app/plugins/acl/controllers/.DS_Store create mode 100644 app/plugins/acl/controllers/.svn/entries create mode 100644 app/plugins/acl/controllers/.svn/text-base/acl_acos_controller.php.svn-base create mode 100644 app/plugins/acl/controllers/.svn/text-base/acl_actions_controller.php.svn-base create mode 100644 app/plugins/acl/controllers/.svn/text-base/acl_aros_controller.php.svn-base create mode 100644 app/plugins/acl/controllers/.svn/text-base/acl_permissions_controller.php.svn-base create mode 100644 app/plugins/acl/controllers/acl_acos_controller.php create mode 100644 app/plugins/acl/controllers/acl_actions_controller.php create mode 100644 app/plugins/acl/controllers/acl_aros_controller.php create mode 100644 app/plugins/acl/controllers/acl_permissions_controller.php create mode 100644 app/plugins/acl/controllers/components/.svn/entries create mode 100644 app/plugins/acl/controllers/components/.svn/text-base/acl_filter.php.svn-base create mode 100644 app/plugins/acl/controllers/components/.svn/text-base/acl_generate.php.svn-base create mode 100644 app/plugins/acl/controllers/components/acl_filter.php create mode 100644 app/plugins/acl/controllers/components/acl_generate.php create mode 100644 app/plugins/acl/models/.svn/entries create mode 100644 app/plugins/acl/models/.svn/text-base/acl_aco.php.svn-base create mode 100644 app/plugins/acl/models/.svn/text-base/acl_aro.php.svn-base create mode 100644 app/plugins/acl/models/.svn/text-base/acl_aros_aco.php.svn-base create mode 100644 app/plugins/acl/models/acl_aco.php create mode 100644 app/plugins/acl/models/acl_aro.php create mode 100644 app/plugins/acl/models/acl_aros_aco.php create mode 100644 app/plugins/acl/views/.DS_Store create mode 100644 app/plugins/acl/views/.svn/entries create mode 100644 app/plugins/acl/views/acl_acos/.svn/entries create mode 100644 app/plugins/acl/views/acl_acos/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_acos/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_acos/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_acos/admin_add.ctp create mode 100644 app/plugins/acl/views/acl_acos/admin_edit.ctp create mode 100644 app/plugins/acl/views/acl_acos/admin_index.ctp create mode 100644 app/plugins/acl/views/acl_actions/.svn/entries create mode 100644 app/plugins/acl/views/acl_actions/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_actions/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_actions/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_actions/admin_add.ctp create mode 100644 app/plugins/acl/views/acl_actions/admin_edit.ctp create mode 100644 app/plugins/acl/views/acl_actions/admin_index.ctp create mode 100644 app/plugins/acl/views/acl_aros/.svn/entries create mode 100644 app/plugins/acl/views/acl_aros/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_aros/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_aros/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_aros/admin_add.ctp create mode 100644 app/plugins/acl/views/acl_aros/admin_edit.ctp create mode 100644 app/plugins/acl/views/acl_aros/admin_index.ctp create mode 100644 app/plugins/acl/views/acl_permissions/.svn/entries create mode 100644 app/plugins/acl/views/acl_permissions/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_permissions/.svn/text-base/admin_toggle.ctp.svn-base create mode 100644 app/plugins/acl/views/acl_permissions/admin_index.ctp create mode 100644 app/plugins/acl/views/acl_permissions/admin_toggle.ctp create mode 100644 app/plugins/acl/webroot/.svn/entries create mode 100644 app/plugins/acl/webroot/js/.svn/entries create mode 100644 app/plugins/acl/webroot/js/.svn/text-base/acl_permissions.js.svn-base create mode 100644 app/plugins/acl/webroot/js/acl_permissions.js create mode 100644 app/plugins/block-bot/block_bot_app_controller.php create mode 100644 app/plugins/block-bot/config/block_bot_bootstrap.php create mode 100644 app/plugins/block-bot/config/block_bot_routes.php create mode 100644 app/plugins/block-bot/config/plugin.yml create mode 100644 app/plugins/block-bot/models/behaviors/block_bot.php create mode 100644 app/plugins/block-bot/views/helpers/block_bot_hook.php create mode 100644 app/plugins/cake_ptbr/.gitignore create mode 100644 app/plugins/cake_ptbr/README.textile create mode 100644 app/plugins/cake_ptbr/config/bootstrap.php create mode 100644 app/plugins/cake_ptbr/config/inflections.php create mode 100644 app/plugins/cake_ptbr/config/traducao_core.php create mode 100644 app/plugins/cake_ptbr/locale/pt_br/LC_MESSAGES/core.po create mode 100644 app/plugins/cake_ptbr/locale/pt_br/LC_TIME create mode 100644 app/plugins/cake_ptbr/models/behaviors/ajuste_data.php create mode 100644 app/plugins/cake_ptbr/models/behaviors/ajuste_float.php create mode 100644 app/plugins/cake_ptbr/models/behaviors/correios.php create mode 100644 app/plugins/cake_ptbr/models/estado_brasileiro.php create mode 100644 app/plugins/cake_ptbr/tests/cases/config/i18n.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/config/inflections.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_data.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_float.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/models/behaviors/correios.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/models/estado_brasileiro.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/vendors/shells/templates/default/inflexao.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/views/helpers/estados.test.php create mode 100644 app/plugins/cake_ptbr/tests/cases/views/helpers/formatacao.test.php create mode 100644 app/plugins/cake_ptbr/tests/fixtures/produto_fixture.php create mode 100644 app/plugins/cake_ptbr/vendors/estados.php create mode 100644 app/plugins/cake_ptbr/vendors/shells/cake_ptbr_installer.php create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/actions/controller_actions.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/classes/controller.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/classes/fixture.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/classes/model.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/classes/test.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/inflexao.php create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/views/form.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/views/home.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/views/index.ctp create mode 100644 app/plugins/cake_ptbr/vendors/shells/templates/default/views/view.ctp create mode 100644 app/plugins/cake_ptbr/views/helpers/estados.php create mode 100644 app/plugins/cake_ptbr/views/helpers/formatacao.php create mode 100644 app/plugins/example/.svn/entries create mode 100644 app/plugins/example/.svn/text-base/example_app_controller.php.svn-base create mode 100644 app/plugins/example/.svn/text-base/example_app_model.php.svn-base create mode 100644 app/plugins/example/config/.svn/entries create mode 100644 app/plugins/example/config/.svn/text-base/example_activation.php.svn-base create mode 100644 app/plugins/example/config/.svn/text-base/example_bootstrap.php.svn-base create mode 100644 app/plugins/example/config/.svn/text-base/example_routes.php.svn-base create mode 100644 app/plugins/example/config/.svn/text-base/plugin.yml.svn-base create mode 100644 app/plugins/example/config/example_activation.php create mode 100644 app/plugins/example/config/example_bootstrap.php create mode 100644 app/plugins/example/config/example_routes.php create mode 100644 app/plugins/example/config/plugin.yml create mode 100644 app/plugins/example/controllers/.svn/entries create mode 100644 app/plugins/example/controllers/.svn/text-base/example_controller.php.svn-base create mode 100644 app/plugins/example/controllers/components/.svn/entries create mode 100644 app/plugins/example/controllers/components/.svn/text-base/example.php.svn-base create mode 100644 app/plugins/example/controllers/components/example.php create mode 100644 app/plugins/example/controllers/example_controller.php create mode 100644 app/plugins/example/example_app_controller.php create mode 100644 app/plugins/example/example_app_model.php create mode 100644 app/plugins/example/models/.svn/entries create mode 100644 app/plugins/example/models/behaviors/.svn/entries create mode 100644 app/plugins/example/models/behaviors/.svn/text-base/example.php.svn-base create mode 100644 app/plugins/example/models/behaviors/example.php create mode 100644 app/plugins/example/views/.svn/entries create mode 100644 app/plugins/example/views/elements/.svn/entries create mode 100644 app/plugins/example/views/elements/.svn/text-base/admin_menu.ctp.svn-base create mode 100644 app/plugins/example/views/elements/.svn/text-base/admin_tab_node.ctp.svn-base create mode 100644 app/plugins/example/views/elements/admin_menu.ctp create mode 100644 app/plugins/example/views/elements/admin_tab_node.ctp create mode 100644 app/plugins/example/views/example/.svn/entries create mode 100644 app/plugins/example/views/example/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/example/views/example/.svn/text-base/index.ctp.svn-base create mode 100644 app/plugins/example/views/example/admin_index.ctp create mode 100644 app/plugins/example/views/example/index.ctp create mode 100644 app/plugins/example/views/helpers/.svn/entries create mode 100644 app/plugins/example/views/helpers/.svn/text-base/example.php.svn-base create mode 100644 app/plugins/example/views/helpers/example.php create mode 100644 app/plugins/example/webroot/.svn/entries create mode 100644 app/plugins/example/webroot/css/.svn/entries create mode 100644 app/plugins/example/webroot/css/.svn/text-base/empty.svn-base create mode 100644 app/plugins/example/webroot/css/empty create mode 100644 app/plugins/example/webroot/img/.svn/entries create mode 100644 app/plugins/example/webroot/img/.svn/text-base/empty.svn-base create mode 100644 app/plugins/example/webroot/img/empty create mode 100644 app/plugins/example/webroot/js/.svn/entries create mode 100644 app/plugins/example/webroot/js/.svn/text-base/empty.svn-base create mode 100644 app/plugins/example/webroot/js/empty create mode 100644 app/plugins/extensions/.svn/entries create mode 100644 app/plugins/extensions/.svn/text-base/extensions_app_controller.php.svn-base create mode 100644 app/plugins/extensions/.svn/text-base/extensions_app_model.php.svn-base create mode 100644 app/plugins/extensions/controllers/.svn/entries create mode 100644 app/plugins/extensions/controllers/.svn/text-base/extensions_locales_controller.php.svn-base create mode 100644 app/plugins/extensions/controllers/.svn/text-base/extensions_plugins_controller.php.svn-base create mode 100644 app/plugins/extensions/controllers/.svn/text-base/extensions_themes_controller.php.svn-base create mode 100644 app/plugins/extensions/controllers/extensions_locales_controller.php create mode 100644 app/plugins/extensions/controllers/extensions_plugins_controller.php create mode 100644 app/plugins/extensions/controllers/extensions_themes_controller.php create mode 100644 app/plugins/extensions/extensions_app_controller.php create mode 100644 app/plugins/extensions/extensions_app_model.php create mode 100644 app/plugins/extensions/views/.svn/entries create mode 100644 app/plugins/extensions/views/extensions_locales/.svn/entries create mode 100644 app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_locales/admin_add.ctp create mode 100644 app/plugins/extensions/views/extensions_locales/admin_edit.ctp create mode 100644 app/plugins/extensions/views/extensions_locales/admin_index.ctp create mode 100644 app/plugins/extensions/views/extensions_plugins/.svn/entries create mode 100644 app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_plugins/admin_add.ctp create mode 100644 app/plugins/extensions/views/extensions_plugins/admin_index.ctp create mode 100644 app/plugins/extensions/views/extensions_themes/.svn/entries create mode 100644 app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_editor.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/extensions/views/extensions_themes/admin_add.ctp create mode 100644 app/plugins/extensions/views/extensions_themes/admin_editor.ctp create mode 100644 app/plugins/extensions/views/extensions_themes/admin_index.ctp create mode 100644 app/plugins/install/.DS_Store create mode 100644 app/plugins/install/.svn/entries create mode 100644 app/plugins/install/.svn/text-base/install_app_controller.php.svn-base create mode 100644 app/plugins/install/.svn/text-base/install_app_model.php.svn-base create mode 100644 app/plugins/install/config/.DS_Store create mode 100644 app/plugins/install/config/data/aco_data.php create mode 100644 app/plugins/install/config/data/aro_data.php create mode 100644 app/plugins/install/config/data/aros_aco_data.php create mode 100644 app/plugins/install/config/data/block_data.php create mode 100644 app/plugins/install/config/data/comment_data.php create mode 100644 app/plugins/install/config/data/contact_data.php create mode 100644 app/plugins/install/config/data/i18n_data.php create mode 100644 app/plugins/install/config/data/language_data.php create mode 100644 app/plugins/install/config/data/link_data.php create mode 100644 app/plugins/install/config/data/menu_data.php create mode 100644 app/plugins/install/config/data/message_data.php create mode 100644 app/plugins/install/config/data/meta_data.php create mode 100644 app/plugins/install/config/data/node_data.php create mode 100644 app/plugins/install/config/data/nodes_taxonomy_data.php create mode 100644 app/plugins/install/config/data/region_data.php create mode 100644 app/plugins/install/config/data/role_data.php create mode 100644 app/plugins/install/config/data/setting_data.php create mode 100644 app/plugins/install/config/data/taxonomy_data.php create mode 100644 app/plugins/install/config/data/term_data.php create mode 100644 app/plugins/install/config/data/type_data.php create mode 100644 app/plugins/install/config/data/types_vocabulary_data.php create mode 100644 app/plugins/install/config/data/user_data.php create mode 100644 app/plugins/install/config/data/vocabulary_data.php create mode 100644 app/plugins/install/controllers/.svn/entries create mode 100644 app/plugins/install/controllers/.svn/text-base/install_controller.php.svn-base create mode 100644 app/plugins/install/controllers/install_controller.php create mode 100644 app/plugins/install/install_app_controller.php create mode 100644 app/plugins/install/install_app_model.php create mode 100644 app/plugins/install/models/.svn/entries create mode 100644 app/plugins/install/models/.svn/text-base/install.php.svn-base create mode 100644 app/plugins/install/models/install.php create mode 100644 app/plugins/install/views/.svn/entries create mode 100644 app/plugins/install/views/install/.svn/entries create mode 100644 app/plugins/install/views/install/.svn/text-base/data.ctp.svn-base create mode 100644 app/plugins/install/views/install/.svn/text-base/database.ctp.svn-base create mode 100644 app/plugins/install/views/install/.svn/text-base/finish.ctp.svn-base create mode 100644 app/plugins/install/views/install/.svn/text-base/index.ctp.svn-base create mode 100644 app/plugins/install/views/install/data.ctp create mode 100644 app/plugins/install/views/install/database.ctp create mode 100644 app/plugins/install/views/install/finish.ctp create mode 100644 app/plugins/install/views/install/index.ctp create mode 100644 app/plugins/install/views/layouts/.svn/entries create mode 100644 app/plugins/install/views/layouts/.svn/text-base/install.ctp.svn-base create mode 100644 app/plugins/install/views/layouts/install.ctp create mode 100644 app/plugins/install/webroot/.svn/entries create mode 100644 app/plugins/install/webroot/css/.svn/entries create mode 100644 app/plugins/install/webroot/css/.svn/text-base/install.css.svn-base create mode 100644 app/plugins/install/webroot/css/install.css create mode 100644 app/plugins/rastreamento/config/plugin.yml create mode 100644 app/plugins/rastreamento/config/rastreamento_activation.php create mode 100644 app/plugins/rastreamento/config/rastreamento_bootstrap.php create mode 100644 app/plugins/rastreamento/config/rastreamento_routes.php create mode 100644 app/plugins/rastreamento/controllers/components/empty create mode 100644 app/plugins/rastreamento/controllers/rastreamentos_controller.php create mode 100644 app/plugins/rastreamento/libs/empty create mode 100644 app/plugins/rastreamento/models/behaviors/empty create mode 100644 app/plugins/rastreamento/models/datasources/empty create mode 100644 app/plugins/rastreamento/models/rastreamento.php create mode 100644 app/plugins/rastreamento/rastreamento_app_controller.php create mode 100644 app/plugins/rastreamento/rastreamento_app_model.php create mode 100644 app/plugins/rastreamento/tests/cases/behaviors/empty create mode 100644 app/plugins/rastreamento/tests/cases/components/empty create mode 100644 app/plugins/rastreamento/tests/cases/controllers/empty create mode 100644 app/plugins/rastreamento/tests/cases/controllers/rastreamentos_controller.test.php create mode 100644 app/plugins/rastreamento/tests/cases/helpers/empty create mode 100644 app/plugins/rastreamento/tests/cases/models/empty create mode 100644 app/plugins/rastreamento/tests/cases/models/rastreamento.test.php create mode 100644 app/plugins/rastreamento/tests/fixtures/empty create mode 100644 app/plugins/rastreamento/tests/fixtures/rastreamento_fixture.php create mode 100644 app/plugins/rastreamento/tests/groups/empty create mode 100644 app/plugins/rastreamento/vendors/correios/LICENSE create mode 100644 app/plugins/rastreamento/vendors/correios/README create mode 100644 app/plugins/rastreamento/vendors/correios/correio.php create mode 100644 app/plugins/rastreamento/vendors/correios/rss/index.php create mode 100644 app/plugins/rastreamento/vendors/correios/samples/class.php create mode 100644 app/plugins/rastreamento/vendors/correios/samples/webservice.php create mode 100644 app/plugins/rastreamento/vendors/correios/webservice/index.php create mode 100644 app/plugins/rastreamento/vendors/correios/webservice/x2xml.php create mode 100644 app/plugins/rastreamento/vendors/correios/x2xml.php create mode 100644 app/plugins/rastreamento/vendors/empty create mode 100644 app/plugins/rastreamento/vendors/shells/tasks/empty create mode 100644 app/plugins/rastreamento/views/elements/admin_menu.ctp create mode 100644 app/plugins/rastreamento/views/elements/email/html/aviso.ctp create mode 100644 app/plugins/rastreamento/views/elements/email/text/aviso.ctp create mode 100644 app/plugins/rastreamento/views/layouts/json/ajax.ctp create mode 100644 app/plugins/rastreamento/views/layouts/json/default.ctp create mode 100644 app/plugins/rastreamento/views/layouts/rss/default.ctp create mode 100644 app/plugins/rastreamento/views/layouts/webservice/webservice.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/add.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/admin_add.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/admin_edit.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/admin_index.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/admin_view.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/automatico.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/edit.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/index.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/rss.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/view.ctp create mode 100644 app/plugins/rastreamento/views/rastreamentos/webservice.ctp create mode 100644 app/plugins/rastreamento/webroot/css/style.css create mode 100644 app/plugins/rastreamento/webroot/empty create mode 100644 app/plugins/tinymce/.svn/entries create mode 100644 app/plugins/tinymce/config/.svn/entries create mode 100644 app/plugins/tinymce/config/.svn/text-base/plugin.yml.svn-base create mode 100644 app/plugins/tinymce/config/.svn/text-base/tinymce_bootstrap.php.svn-base create mode 100644 app/plugins/tinymce/config/plugin.yml create mode 100644 app/plugins/tinymce/config/tinymce_bootstrap.php create mode 100644 app/plugins/tinymce/views/.svn/entries create mode 100644 app/plugins/tinymce/views/helpers/.svn/entries create mode 100644 app/plugins/tinymce/views/helpers/.svn/text-base/tinymce.php.svn-base create mode 100644 app/plugins/tinymce/views/helpers/tinymce.php create mode 100644 app/plugins/tinymce/webroot/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/.svn/text-base/license.txt.svn-base create mode 100644 app/plugins/tinymce/webroot/js/.svn/text-base/tiny_mce.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/.svn/text-base/tiny_mce_popup.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/langs/.svn/text-base/en.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/langs/en.js create mode 100644 app/plugins/tinymce/webroot/js/license.txt create mode 100644 app/plugins/tinymce/webroot/js/plugins/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/.svn/text-base/rule.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/text-base/advhr.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/css/advhr.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/text-base/rule.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/js/rule.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advhr/rule.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/image.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/text-base/advimage.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/css/advimage.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/image.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/prop-base/sample.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/text-base/sample.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/img/sample.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/js/.svn/text-base/image.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/js/image.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advimage/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/link.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/text-base/advlink.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/css/advlink.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/text-base/advlink.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/js/advlink.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlink/link.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlist/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/text-base/en.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/autosave/langs/en.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/directionality/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/emotions.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/emotions.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cool.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cry.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-embarassed.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-foot-in-mouth.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-frown.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-innocent.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-kiss.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-laughing.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-money-mouth.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-sealed.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-smile.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-surprised.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-tongue-out.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-undecided.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-wink.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-yell.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cool.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cry.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-embarassed.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-foot-in-mouth.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-frown.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-innocent.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-kiss.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-laughing.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-money-mouth.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-sealed.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-smile.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-surprised.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-tongue-out.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-undecided.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-wink.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-yell.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-cool.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-cry.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-embarassed.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-foot-in-mouth.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-frown.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-innocent.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-kiss.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-laughing.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-money-mouth.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-sealed.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-smile.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-surprised.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-tongue-out.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-undecided.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-wink.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-yell.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/js/.svn/text-base/emotions.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/js/emotions.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/emotions/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/dialog.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/dialog.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/img/.svn/prop-base/example.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/img/.svn/text-base/example.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/img/example.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/js/.svn/text-base/dialog.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/js/dialog.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/langs/.svn/text-base/en.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/langs/en.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/example/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/fullpage.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/text-base/fullpage.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/css/fullpage.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/fullpage.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/text-base/fullpage.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/js/fullpage.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullpage/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/.svn/text-base/fullscreen.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/fullscreen/fullscreen.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/iespell/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/template.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/text-base/window.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/alert.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/button.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/buttons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/confirm.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/corners.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/horizontal.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/vertical.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/alert.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/button.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/buttons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/confirm.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/corners.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/horizontal.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/vertical.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/window.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/inlinepopups/template.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/insertdatetime/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/insertdatetime/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/layer/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/layer/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/layer/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/media.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/media.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/css/content.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/css/media.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flash.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flv_player.swf.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/quicktime.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/realmedia.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/shockwave.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/trans.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/windowsmedia.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flash.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flv_player.swf.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/quicktime.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/realmedia.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/shockwave.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/trans.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/windowsmedia.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/flash.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/flv_player.swf create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/quicktime.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/realmedia.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/shockwave.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/trans.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/img/windowsmedia.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/js/.svn/text-base/embed.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/js/.svn/text-base/media.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/js/embed.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/js/media.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/media/media.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/css/content.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/pagebreak.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/trans.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/pagebreak.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/trans.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/pagebreak.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/pagebreak/img/trans.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pastetext.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pasteword.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pastetext.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pasteword.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/js/pastetext.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/js/pasteword.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/pastetext.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/paste/pasteword.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/example.html.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/preview.html.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/example.html create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/text-base/embed.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/jscripts/embed.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/preview/preview.html create mode 100644 app/plugins/tinymce/webroot/js/plugins/print/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/print/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/print/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/save/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/save/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/save/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/searchreplace.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/text-base/searchreplace.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/css/searchreplace.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/text-base/searchreplace.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/js/searchreplace.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/searchreplace/searchreplace.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/css/content.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/prop-base/wline.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/text-base/wline.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/spellchecker/img/wline.gif create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/props.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/css/.svn/text-base/props.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/css/props.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/js/.svn/text-base/props.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/js/props.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/style/props.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/cell.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/merge_cells.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/row.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/table.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/cell.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/cell.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/row.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/table.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/cell.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/row.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/css/table.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/cell.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/merge_cells.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/row.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/table.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/cell.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/merge_cells.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/row.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/js/table.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/merge_cells.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/row.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/table/table.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/blank.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/template.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/blank.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/css/.svn/text-base/template.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/css/template.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/js/.svn/text-base/template.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/js/template.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/template/template.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/abbr.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/acronym.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/attributes.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/cite.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/del.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/ins.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/abbr.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/acronym.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/attributes.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/cite.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/attributes.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/popup.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/attributes.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/popup.css create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/del.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin_src.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/ins.htm create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/abbr.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/acronym.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/attributes.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/cite.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/del.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/element_common.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/ins.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/abbr.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/acronym.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/attributes.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/cite.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/del.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/element_common.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/ins.js create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/themes/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/about.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/anchor.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/charmap.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/color_picker.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/editor_template.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/editor_template_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/image.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/link.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/source_editor.htm.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/about.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/anchor.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/charmap.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/color_picker.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/editor_template.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/editor_template_src.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/image.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/colorpicker.jpg.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/icons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/colorpicker.jpg.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/icons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/colorpicker.jpg create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/img/icons.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/about.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/anchor.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/charmap.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/color_picker.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/image.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/link.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/source_editor.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/about.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/anchor.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/charmap.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/color_picker.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/image.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/link.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/js/source_editor.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en_dlg.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/langs/en.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/langs/en_dlg.js create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/link.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/dialog.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/ui.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/content.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/dialog.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/buttons.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/items.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_arrow.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_check.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/progress.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/tabs.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/buttons.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/items.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/menu_arrow.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/menu_check.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/progress.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/tabs.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/buttons.png create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/items.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/menu_arrow.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/menu_check.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/progress.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/tabs.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/default/ui.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/text-base/dialog.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/text-base/ui.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/text-base/ui_black.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/.svn/text-base/ui_silver.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/content.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/dialog.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/prop-base/button_bg.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/prop-base/button_bg_black.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/prop-base/button_bg_silver.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/text-base/button_bg.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/text-base/button_bg_black.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/text-base/button_bg_silver.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg.png create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg_black.png create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg_silver.png create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_black.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_silver.css create mode 100644 app/plugins/tinymce/webroot/js/themes/advanced/source_editor.htm create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template_src.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/editor_template.js create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/editor_template_src.js create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/img/.svn/prop-base/icons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/img/.svn/text-base/icons.gif.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/img/icons.gif create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/langs/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/langs/.svn/text-base/en.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/langs/en.js create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/default/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/default/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/default/.svn/text-base/ui.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/default/content.css create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/default/ui.css create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/.svn/text-base/content.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/.svn/text-base/ui.css.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/content.css create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/.svn/prop-base/button_bg.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/.svn/text-base/button_bg.png.svn-base create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/button_bg.png create mode 100644 app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/ui.css create mode 100644 app/plugins/tinymce/webroot/js/tiny_mce.js create mode 100644 app/plugins/tinymce/webroot/js/tiny_mce_popup.js create mode 100644 app/plugins/tinymce/webroot/js/utils/.svn/entries create mode 100644 app/plugins/tinymce/webroot/js/utils/.svn/text-base/editable_selects.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/utils/.svn/text-base/form_utils.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/utils/.svn/text-base/mctabs.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/utils/.svn/text-base/validate.js.svn-base create mode 100644 app/plugins/tinymce/webroot/js/utils/editable_selects.js create mode 100644 app/plugins/tinymce/webroot/js/utils/form_utils.js create mode 100644 app/plugins/tinymce/webroot/js/utils/mctabs.js create mode 100644 app/plugins/tinymce/webroot/js/utils/validate.js create mode 100644 app/plugins/translate/.svn/entries create mode 100644 app/plugins/translate/.svn/text-base/translate_app_controller.php.svn-base create mode 100644 app/plugins/translate/.svn/text-base/translate_app_model.php.svn-base create mode 100644 app/plugins/translate/config/.svn/entries create mode 100644 app/plugins/translate/config/.svn/text-base/plugin.yml.svn-base create mode 100644 app/plugins/translate/config/.svn/text-base/translate_activation.php.svn-base create mode 100644 app/plugins/translate/config/.svn/text-base/translate_bootstrap.php.svn-base create mode 100644 app/plugins/translate/config/plugin.yml create mode 100644 app/plugins/translate/config/translate_activation.php create mode 100644 app/plugins/translate/config/translate_bootstrap.php create mode 100644 app/plugins/translate/controllers/.svn/entries create mode 100644 app/plugins/translate/controllers/.svn/text-base/translate_controller.php.svn-base create mode 100644 app/plugins/translate/controllers/translate_controller.php create mode 100644 app/plugins/translate/translate_app_controller.php create mode 100644 app/plugins/translate/translate_app_model.php create mode 100644 app/plugins/translate/views/.svn/entries create mode 100644 app/plugins/translate/views/translate/.svn/entries create mode 100644 app/plugins/translate/views/translate/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/plugins/translate/views/translate/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/plugins/translate/views/translate/admin_edit.ctp create mode 100644 app/plugins/translate/views/translate/admin_index.ctp create mode 100644 app/tests/.DS_Store create mode 100644 app/tests/.svn/entries create mode 100644 app/tests/cases/.DS_Store create mode 100644 app/tests/cases/.svn/entries create mode 100644 app/tests/cases/behaviors/.svn/entries create mode 100644 app/tests/cases/behaviors/.svn/text-base/croogo_translate.test.php.svn-base create mode 100644 app/tests/cases/behaviors/.svn/text-base/empty.svn-base create mode 100644 app/tests/cases/behaviors/.svn/text-base/encoder.test.php.svn-base create mode 100644 app/tests/cases/behaviors/.svn/text-base/meta.test.php.svn-base create mode 100644 app/tests/cases/behaviors/.svn/text-base/params.test.php.svn-base create mode 100644 app/tests/cases/behaviors/.svn/text-base/url.test.php.svn-base create mode 100644 app/tests/cases/behaviors/croogo_translate.test.php create mode 100644 app/tests/cases/behaviors/empty create mode 100644 app/tests/cases/behaviors/encoder.test.php create mode 100644 app/tests/cases/behaviors/meta.test.php create mode 100644 app/tests/cases/behaviors/params.test.php create mode 100644 app/tests/cases/behaviors/url.test.php create mode 100644 app/tests/cases/components/.svn/entries create mode 100644 app/tests/cases/components/.svn/text-base/empty.svn-base create mode 100644 app/tests/cases/components/croogo.test.php create mode 100644 app/tests/cases/components/empty create mode 100644 app/tests/cases/controllers/.DS_Store create mode 100644 app/tests/cases/controllers/.svn/entries create mode 100644 app/tests/cases/controllers/.svn/text-base/blocks_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/comments_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/contacts_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/empty.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/languages_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/links_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/menus_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/produtos_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/regions_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/roles_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/terms_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/types_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/.svn/text-base/vocabularies_controller.test.php.svn-base create mode 100644 app/tests/cases/controllers/blocks_controller.test.php create mode 100644 app/tests/cases/controllers/comments_controller.test.php create mode 100644 app/tests/cases/controllers/contacts_controller.test.php create mode 100644 app/tests/cases/controllers/empty create mode 100644 app/tests/cases/controllers/languages_controller.test.php create mode 100644 app/tests/cases/controllers/links_controller.test.php create mode 100644 app/tests/cases/controllers/menus_controller.test.php create mode 100644 app/tests/cases/controllers/nodes_controller.test.php create mode 100644 app/tests/cases/controllers/produtos_controller.test.php create mode 100644 app/tests/cases/controllers/regions_controller.test.php create mode 100644 app/tests/cases/controllers/roles_controller.test.php create mode 100644 app/tests/cases/controllers/terms_controller.test.php create mode 100644 app/tests/cases/controllers/types_controller.test.php create mode 100644 app/tests/cases/controllers/users_controller.test.php create mode 100644 app/tests/cases/controllers/vocabularies_controller.test.php create mode 100644 app/tests/cases/helpers/.svn/entries create mode 100644 app/tests/cases/helpers/.svn/text-base/empty.svn-base create mode 100644 app/tests/cases/helpers/empty create mode 100644 app/tests/cases/helpers/layout.test.php create mode 100644 app/tests/cases/models/.svn/entries create mode 100644 app/tests/cases/models/.svn/text-base/empty.svn-base create mode 100644 app/tests/cases/models/.svn/text-base/node.test.php.svn-base create mode 100644 app/tests/cases/models/.svn/text-base/setting.test.php.svn-base create mode 100644 app/tests/cases/models/.svn/text-base/taxonomy.test.php.svn-base create mode 100644 app/tests/cases/models/empty create mode 100644 app/tests/cases/models/node.test.php create mode 100644 app/tests/cases/models/setting.test.php create mode 100644 app/tests/cases/models/taxonomy.test.php create mode 100644 app/tests/fixtures/.svn/entries create mode 100644 app/tests/fixtures/.svn/text-base/aco_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/aro_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/aros_aco_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/block_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/comment_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/contact_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/empty.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/i18n_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/language_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/link_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/menu_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/message_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/meta_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/node_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/nodes_taxonomy_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/region_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/role_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/setting_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/taxonomy_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/term_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/type_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/types_vocabulary_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/user_fixture.php.svn-base create mode 100644 app/tests/fixtures/.svn/text-base/vocabulary_fixture.php.svn-base create mode 100644 app/tests/fixtures/aco_fixture.php create mode 100644 app/tests/fixtures/aro_fixture.php create mode 100644 app/tests/fixtures/aros_aco_fixture.php create mode 100644 app/tests/fixtures/block_fixture.php create mode 100644 app/tests/fixtures/comment_fixture.php create mode 100644 app/tests/fixtures/contact_fixture.php create mode 100644 app/tests/fixtures/empty create mode 100644 app/tests/fixtures/i18n_fixture.php create mode 100644 app/tests/fixtures/language_fixture.php create mode 100644 app/tests/fixtures/link_fixture.php create mode 100644 app/tests/fixtures/menu_fixture.php create mode 100644 app/tests/fixtures/message_fixture.php create mode 100644 app/tests/fixtures/meta_fixture.php create mode 100644 app/tests/fixtures/node_fixture.php create mode 100644 app/tests/fixtures/nodes_taxonomy_fixture.php create mode 100644 app/tests/fixtures/region_fixture.php create mode 100644 app/tests/fixtures/role_fixture.php create mode 100644 app/tests/fixtures/setting_fixture.php create mode 100644 app/tests/fixtures/taxonomy_fixture.php create mode 100644 app/tests/fixtures/term_fixture.php create mode 100644 app/tests/fixtures/type_fixture.php create mode 100644 app/tests/fixtures/types_vocabulary_fixture.php create mode 100644 app/tests/fixtures/user_fixture.php create mode 100644 app/tests/fixtures/vocabulary_fixture.php create mode 100644 app/tests/groups/.svn/entries create mode 100644 app/tests/groups/.svn/text-base/behaviors.group.php.svn-base create mode 100644 app/tests/groups/.svn/text-base/controllers.group.php.svn-base create mode 100644 app/tests/groups/.svn/text-base/empty.svn-base create mode 100644 app/tests/groups/.svn/text-base/models.group.php.svn-base create mode 100644 app/tests/groups/behaviors.group.php create mode 100644 app/tests/groups/controllers.group.php create mode 100644 app/tests/groups/empty create mode 100644 app/tests/groups/models.group.php create mode 100644 app/vendors/.DS_Store create mode 100644 app/vendors/.svn/entries create mode 100644 app/vendors/shells/.svn/entries create mode 100644 app/vendors/shells/.svn/text-base/croogo.php.svn-base create mode 100644 app/vendors/shells/croogo.php create mode 100644 app/vendors/shells/tasks/.svn/entries create mode 100644 app/vendors/shells/tasks/.svn/text-base/empty.svn-base create mode 100644 app/vendors/shells/tasks/empty create mode 100644 app/vendors/shells/templates/.svn/entries create mode 100644 app/vendors/shells/templates/.svn/text-base/empty.svn-base create mode 100644 app/vendors/shells/templates/empty create mode 100644 app/vendors/spyc/.svn/entries create mode 100644 app/vendors/spyc/.svn/text-base/spyc.php.svn-base create mode 100644 app/vendors/spyc/spyc.php create mode 100644 app/views/.svn/entries create mode 100644 app/views/attachments/.svn/entries create mode 100644 app/views/attachments/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/attachments/.svn/text-base/admin_browse.ctp.svn-base create mode 100644 app/views/attachments/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/attachments/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/attachments/admin_add.ctp create mode 100644 app/views/attachments/admin_browse.ctp create mode 100644 app/views/attachments/admin_edit.ctp create mode 100644 app/views/attachments/admin_index.ctp create mode 100644 app/views/avisos/.svn/entries create mode 100644 app/views/avisos/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/admin_delete.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/atualiza.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/delete.ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/index(2).ctp.svn-base create mode 100644 app/views/avisos/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/avisos/add.ctp create mode 100644 app/views/avisos/admin_add(2).ctp create mode 100644 app/views/avisos/admin_add.ctp create mode 100644 app/views/avisos/admin_delete.ctp create mode 100644 app/views/avisos/admin_edit.ctp create mode 100644 app/views/avisos/admin_index.ctp create mode 100644 app/views/avisos/admin_view.ctp create mode 100644 app/views/avisos/atualiza.ctp create mode 100644 app/views/avisos/delete.ctp create mode 100644 app/views/avisos/index(2).ctp create mode 100644 app/views/avisos/index.ctp create mode 100644 app/views/blocks/.svn/entries create mode 100644 app/views/blocks/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/blocks/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/blocks/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/blocks/admin_add.ctp create mode 100644 app/views/blocks/admin_edit.ctp create mode 100644 app/views/blocks/admin_index.ctp create mode 100644 app/views/codigos/.svn/entries create mode 100644 app/views/codigos/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/admin_rastrear.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/codigos/.svn/text-base/rastrear.ctp.svn-base create mode 100644 app/views/codigos/add.ctp create mode 100644 app/views/codigos/admin_add.ctp create mode 100644 app/views/codigos/admin_delete.ctp create mode 100644 app/views/codigos/admin_edit.ctp create mode 100644 app/views/codigos/admin_index.ctp create mode 100644 app/views/codigos/admin_rastrear.ctp create mode 100644 app/views/codigos/admin_view.ctp create mode 100644 app/views/codigos/rastrear.ctp create mode 100644 app/views/codigos/xml/.svn/entries create mode 100644 app/views/codigos/xml/.svn/text-base/delete.ctp.svn-base create mode 100644 app/views/codigos/xml/.svn/text-base/edit.ctp.svn-base create mode 100644 app/views/codigos/xml/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/codigos/xml/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/codigos/xml/delete.ctp create mode 100644 app/views/codigos/xml/edit.ctp create mode 100644 app/views/codigos/xml/index.ctp create mode 100644 app/views/codigos/xml/view.ctp create mode 100644 app/views/comments/.svn/entries create mode 100644 app/views/comments/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/comments/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/comments/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/comments/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/comments/add.ctp create mode 100644 app/views/comments/admin_edit.ctp create mode 100644 app/views/comments/admin_index.ctp create mode 100644 app/views/comments/index.ctp create mode 100644 app/views/comments/rss/.svn/entries create mode 100644 app/views/comments/rss/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/comments/rss/index.ctp create mode 100644 app/views/contacts/.svn/entries create mode 100644 app/views/contacts/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/contacts/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/contacts/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/contacts/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/contacts/admin_add.ctp create mode 100644 app/views/contacts/admin_edit.ctp create mode 100644 app/views/contacts/admin_index.ctp create mode 100644 app/views/contacts/view.ctp create mode 100644 app/views/elements/.svn/entries create mode 100644 app/views/elements/.svn/text-base/blank.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/block.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/comment.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/comments.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/comments_form.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/empty.svn-base create mode 100644 app/views/elements/.svn/text-base/menu.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/node_body.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/node_excerpt.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/node_info.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/node_list.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/node_more_info.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/search.ctp.svn-base create mode 100644 app/views/elements/.svn/text-base/vocabulary.ctp.svn-base create mode 100644 app/views/elements/admin/.svn/entries create mode 100644 app/views/elements/admin/.svn/text-base/footer.ctp.svn-base create mode 100644 app/views/elements/admin/.svn/text-base/logo.ctp.svn-base create mode 100644 app/views/elements/admin/.svn/text-base/navigation.ctp.svn-base create mode 100644 app/views/elements/admin/.svn/text-base/nodes_filter.ctp.svn-base create mode 100644 app/views/elements/admin/.svn/text-base/quick.ctp.svn-base create mode 100644 app/views/elements/admin/footer.ctp create mode 100644 app/views/elements/admin/header.ctp create mode 100644 app/views/elements/admin/logo.ctp create mode 100644 app/views/elements/admin/navigation.ctp create mode 100644 app/views/elements/admin/nodes_filter.ctp create mode 100644 app/views/elements/admin/quick.ctp create mode 100644 app/views/elements/blank.ctp create mode 100644 app/views/elements/block.ctp create mode 100644 app/views/elements/comment.ctp create mode 100644 app/views/elements/comments.ctp create mode 100644 app/views/elements/comments_form.ctp create mode 100644 app/views/elements/email/.svn/entries create mode 100644 app/views/elements/email/html/.svn/entries create mode 100644 app/views/elements/email/html/.svn/text-base/empty.svn-base create mode 100644 app/views/elements/email/html/empty create mode 100644 app/views/elements/email/text/.svn/entries create mode 100644 app/views/elements/email/text/.svn/text-base/comment.ctp.svn-base create mode 100644 app/views/elements/email/text/.svn/text-base/contact.ctp.svn-base create mode 100644 app/views/elements/email/text/.svn/text-base/forgot_password.ctp.svn-base create mode 100644 app/views/elements/email/text/.svn/text-base/register.ctp.svn-base create mode 100644 app/views/elements/email/text/comment.ctp create mode 100644 app/views/elements/email/text/contact.ctp create mode 100644 app/views/elements/email/text/forgot_password.ctp create mode 100644 app/views/elements/email/text/register.ctp create mode 100644 app/views/elements/empty create mode 100644 app/views/elements/menu.ctp create mode 100644 app/views/elements/node_body.ctp create mode 100644 app/views/elements/node_excerpt.ctp create mode 100644 app/views/elements/node_info.ctp create mode 100644 app/views/elements/node_list.ctp create mode 100644 app/views/elements/node_more_info.ctp create mode 100644 app/views/elements/search.ctp create mode 100644 app/views/elements/vocabulary.ctp create mode 100644 app/views/errors/.svn/entries create mode 100644 app/views/errors/.svn/text-base/empty.svn-base create mode 100644 app/views/errors/.svn/text-base/error404.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/error500.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_action.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_behavior_class.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_behavior_file.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_component_class.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_component_file.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_connection.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_controller.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_helper_class.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_helper_file.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_layout.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_model.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_scaffolddb.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_table.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/missing_view.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/private_action.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/scaffold_error.ctp.svn-base create mode 100644 app/views/errors/.svn/text-base/security.ctp.svn-base create mode 100644 app/views/errors/empty create mode 100644 app/views/errors/error404.ctp create mode 100644 app/views/errors/error500.ctp create mode 100644 app/views/errors/missing_action.ctp create mode 100644 app/views/errors/missing_behavior_class.ctp create mode 100644 app/views/errors/missing_behavior_file.ctp create mode 100644 app/views/errors/missing_component_class.ctp create mode 100644 app/views/errors/missing_component_file.ctp create mode 100644 app/views/errors/missing_connection.ctp create mode 100644 app/views/errors/missing_controller.ctp create mode 100644 app/views/errors/missing_helper_class.ctp create mode 100644 app/views/errors/missing_helper_file.ctp create mode 100644 app/views/errors/missing_layout.ctp create mode 100644 app/views/errors/missing_model.ctp create mode 100644 app/views/errors/missing_scaffolddb.ctp create mode 100644 app/views/errors/missing_table.ctp create mode 100644 app/views/errors/missing_view.ctp create mode 100644 app/views/errors/private_action.ctp create mode 100644 app/views/errors/scaffold_error.ctp create mode 100644 app/views/errors/security.ctp create mode 100644 app/views/filemanager/.svn/entries create mode 100644 app/views/filemanager/.svn/text-base/admin_browse.ctp.svn-base create mode 100644 app/views/filemanager/.svn/text-base/admin_create_directory.ctp.svn-base create mode 100644 app/views/filemanager/.svn/text-base/admin_create_file.ctp.svn-base create mode 100644 app/views/filemanager/.svn/text-base/admin_editfile.ctp.svn-base create mode 100644 app/views/filemanager/.svn/text-base/admin_upload.ctp.svn-base create mode 100644 app/views/filemanager/admin_browse.ctp create mode 100644 app/views/filemanager/admin_create_directory.ctp create mode 100644 app/views/filemanager/admin_create_file.ctp create mode 100644 app/views/filemanager/admin_editfile.ctp create mode 100644 app/views/filemanager/admin_upload.ctp create mode 100644 app/views/helpers/.svn/entries create mode 100644 app/views/helpers/.svn/text-base/custom.php.svn-base create mode 100644 app/views/helpers/.svn/text-base/empty.svn-base create mode 100644 app/views/helpers/.svn/text-base/filemanager.php.svn-base create mode 100644 app/views/helpers/.svn/text-base/image.php.svn-base create mode 100644 app/views/helpers/.svn/text-base/layout.php.svn-base create mode 100644 app/views/helpers/.svn/text-base/meta.php.svn-base create mode 100644 app/views/helpers/.svn/text-base/recaptcha.php.svn-base create mode 100644 app/views/helpers/custom.php create mode 100644 app/views/helpers/empty create mode 100644 app/views/helpers/filemanager.php create mode 100644 app/views/helpers/image.php create mode 100644 app/views/helpers/layout.php create mode 100644 app/views/helpers/meta.php create mode 100644 app/views/helpers/recaptcha.php create mode 100644 app/views/languages/.svn/entries create mode 100644 app/views/languages/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/languages/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/languages/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/languages/.svn/text-base/admin_select.ctp.svn-base create mode 100644 app/views/languages/admin_add.ctp create mode 100644 app/views/languages/admin_edit.ctp create mode 100644 app/views/languages/admin_index.ctp create mode 100644 app/views/languages/admin_select.ctp create mode 100644 app/views/layouts/.svn/entries create mode 100644 app/views/layouts/.svn/text-base/admin.ctp.svn-base create mode 100644 app/views/layouts/.svn/text-base/admin_full.ctp.svn-base create mode 100644 app/views/layouts/.svn/text-base/admin_login.ctp.svn-base create mode 100644 app/views/layouts/.svn/text-base/default.ctp.svn-base create mode 100644 app/views/layouts/.svn/text-base/maintenance.ctp.svn-base create mode 100644 app/views/layouts/admin.ctp create mode 100644 app/views/layouts/admin_full.ctp create mode 100644 app/views/layouts/admin_login.ctp create mode 100644 app/views/layouts/default.ctp create mode 100644 app/views/layouts/email/.svn/entries create mode 100644 app/views/layouts/email/html/.svn/entries create mode 100644 app/views/layouts/email/html/.svn/text-base/default.ctp.svn-base create mode 100644 app/views/layouts/email/html/default.ctp create mode 100644 app/views/layouts/email/text/.svn/entries create mode 100644 app/views/layouts/email/text/.svn/text-base/default.ctp.svn-base create mode 100644 app/views/layouts/email/text/default.ctp create mode 100644 app/views/layouts/js/.svn/entries create mode 100644 app/views/layouts/js/.svn/text-base/empty.svn-base create mode 100644 app/views/layouts/js/empty create mode 100644 app/views/layouts/json/.svn/entries create mode 100644 app/views/layouts/json/.svn/text-base/admin.ctp.svn-base create mode 100644 app/views/layouts/json/.svn/text-base/ajax.ctp.svn-base create mode 100644 app/views/layouts/json/.svn/text-base/default.ctp.svn-base create mode 100644 app/views/layouts/json/admin.ctp create mode 100644 app/views/layouts/json/ajax.ctp create mode 100644 app/views/layouts/json/default.ctp create mode 100644 app/views/layouts/maintenance.ctp create mode 100644 app/views/layouts/rss/.svn/entries create mode 100644 app/views/layouts/rss/.svn/text-base/default.ctp.svn-base create mode 100644 app/views/layouts/rss/.svn/text-base/empty.svn-base create mode 100644 app/views/layouts/rss/default.ctp create mode 100644 app/views/layouts/rss/empty create mode 100644 app/views/layouts/webservice/.svn/entries create mode 100644 app/views/layouts/webservice/.svn/text-base/webservice.ctp.svn-base create mode 100644 app/views/layouts/webservice/webservice.ctp create mode 100644 app/views/layouts/xml/.svn/entries create mode 100644 app/views/layouts/xml/.svn/text-base/empty.svn-base create mode 100644 app/views/layouts/xml/empty create mode 100644 app/views/links/.svn/entries create mode 100644 app/views/links/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/links/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/links/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/links/admin_add.ctp create mode 100644 app/views/links/admin_edit.ctp create mode 100644 app/views/links/admin_index.ctp create mode 100644 app/views/menus/.svn/entries create mode 100644 app/views/menus/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/menus/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/menus/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/menus/admin_add.ctp create mode 100644 app/views/menus/admin_edit.ctp create mode 100644 app/views/menus/admin_index.ctp create mode 100644 app/views/messages/.svn/entries create mode 100644 app/views/messages/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/messages/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/messages/admin_edit.ctp create mode 100644 app/views/messages/admin_index.ctp create mode 100644 app/views/nodes/.svn/entries create mode 100644 app/views/nodes/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_add_meta.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_create.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_links.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_translate.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/admin_translations.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/promoted.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/search.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/term.ctp.svn-base create mode 100644 app/views/nodes/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/nodes/admin_add.ctp create mode 100644 app/views/nodes/admin_add_meta.ctp create mode 100644 app/views/nodes/admin_create.ctp create mode 100644 app/views/nodes/admin_edit.ctp create mode 100644 app/views/nodes/admin_index.ctp create mode 100644 app/views/nodes/admin_links.ctp create mode 100644 app/views/nodes/admin_translate.ctp create mode 100644 app/views/nodes/admin_translations.ctp create mode 100644 app/views/nodes/index.ctp create mode 100644 app/views/nodes/json/.svn/entries create mode 100644 app/views/nodes/json/.svn/text-base/admin_delete_meta.ctp.svn-base create mode 100644 app/views/nodes/json/admin_delete_meta.ctp create mode 100644 app/views/nodes/promoted.ctp create mode 100644 app/views/nodes/rss/.svn/entries create mode 100644 app/views/nodes/rss/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/nodes/rss/.svn/text-base/promoted.ctp.svn-base create mode 100644 app/views/nodes/rss/.svn/text-base/term.ctp.svn-base create mode 100644 app/views/nodes/rss/index.ctp create mode 100644 app/views/nodes/rss/promoted.ctp create mode 100644 app/views/nodes/rss/term.ctp create mode 100644 app/views/nodes/search.ctp create mode 100644 app/views/nodes/term.ctp create mode 100644 app/views/nodes/view.ctp create mode 100644 app/views/opcaos/.svn/entries create mode 100644 app/views/opcaos/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/edit.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/opcaos/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/opcaos/add.ctp create mode 100644 app/views/opcaos/admin_add.ctp create mode 100644 app/views/opcaos/admin_edit.ctp create mode 100644 app/views/opcaos/admin_index.ctp create mode 100644 app/views/opcaos/admin_view.ctp create mode 100644 app/views/opcaos/edit.ctp create mode 100644 app/views/opcaos/index.ctp create mode 100644 app/views/opcaos/view.ctp create mode 100644 app/views/opcoes/.svn/entries create mode 100644 app/views/opcoes/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/edit.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/opcoes/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/opcoes/add.ctp create mode 100644 app/views/opcoes/admin_add.ctp create mode 100644 app/views/opcoes/admin_edit.ctp create mode 100644 app/views/opcoes/admin_index.ctp create mode 100644 app/views/opcoes/admin_view.ctp create mode 100644 app/views/opcoes/edit.ctp create mode 100644 app/views/opcoes/index.ctp create mode 100644 app/views/opcoes/view.ctp create mode 100644 app/views/produtos/.svn/entries create mode 100644 app/views/produtos/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_add(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_botoes(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_botoes.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_delete(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_delete.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_edit(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/botoes(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/botoes.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/edit.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/frete(2).ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/frete.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/produtos/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/produtos/add.ctp create mode 100644 app/views/produtos/admin_add(2).ctp create mode 100644 app/views/produtos/admin_add.ctp create mode 100644 app/views/produtos/admin_botoes(2).ctp create mode 100644 app/views/produtos/admin_botoes.ctp create mode 100644 app/views/produtos/admin_delete(2).ctp create mode 100644 app/views/produtos/admin_delete.ctp create mode 100644 app/views/produtos/admin_edit(2).ctp create mode 100644 app/views/produtos/admin_edit.ctp create mode 100644 app/views/produtos/admin_index.ctp create mode 100644 app/views/produtos/admin_view.ctp create mode 100644 app/views/produtos/botoes(2).ctp create mode 100644 app/views/produtos/botoes.ctp create mode 100644 app/views/produtos/edit.ctp create mode 100644 app/views/produtos/frete(2).ctp create mode 100644 app/views/produtos/frete.ctp create mode 100644 app/views/produtos/frete2.ctp create mode 100644 app/views/produtos/index.ctp create mode 100644 app/views/produtos/view.ctp create mode 100644 app/views/produtos/xml/.svn/entries create mode 100644 app/views/produtos/xml/.svn/text-base/delete.ctp.svn-base create mode 100644 app/views/produtos/xml/.svn/text-base/edit.ctp.svn-base create mode 100644 app/views/produtos/xml/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/produtos/xml/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/produtos/xml/delete.ctp create mode 100644 app/views/produtos/xml/edit.ctp create mode 100644 app/views/produtos/xml/index.ctp create mode 100644 app/views/produtos/xml/view.ctp create mode 100644 app/views/regions/.svn/entries create mode 100644 app/views/regions/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/regions/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/regions/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/regions/admin_add.ctp create mode 100644 app/views/regions/admin_edit.ctp create mode 100644 app/views/regions/admin_index.ctp create mode 100644 app/views/roles/.svn/entries create mode 100644 app/views/roles/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/roles/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/roles/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/roles/admin_add.ctp create mode 100644 app/views/roles/admin_edit.ctp create mode 100644 app/views/roles/admin_index.ctp create mode 100644 app/views/scaffolds/.svn/entries create mode 100644 app/views/scaffolds/.svn/text-base/empty.svn-base create mode 100644 app/views/scaffolds/empty create mode 100644 app/views/settings/.svn/entries create mode 100644 app/views/settings/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/settings/.svn/text-base/admin_dashboard.ctp.svn-base create mode 100644 app/views/settings/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/settings/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/settings/.svn/text-base/admin_prefix.ctp.svn-base create mode 100644 app/views/settings/.svn/text-base/admin_view.ctp.svn-base create mode 100644 app/views/settings/admin_add.ctp create mode 100644 app/views/settings/admin_dashboard.ctp create mode 100644 app/views/settings/admin_edit.ctp create mode 100644 app/views/settings/admin_index.ctp create mode 100644 app/views/settings/admin_prefix.ctp create mode 100644 app/views/settings/admin_view.ctp create mode 100644 app/views/terms/.svn/entries create mode 100644 app/views/terms/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/terms/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/terms/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/terms/admin_add.ctp create mode 100644 app/views/terms/admin_edit.ctp create mode 100644 app/views/terms/admin_index.ctp create mode 100644 app/views/types/.svn/entries create mode 100644 app/views/types/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/types/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/types/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/types/admin_add.ctp create mode 100644 app/views/types/admin_edit.ctp create mode 100644 app/views/types/admin_index.ctp create mode 100644 app/views/urls/.svn/entries create mode 100644 app/views/urls/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/urls/.svn/text-base/teste.ctp.svn-base create mode 100644 app/views/urls/.svn/text-base/url.ctp.svn-base create mode 100644 app/views/urls/index.ctp create mode 100644 app/views/urls/teste.ctp create mode 100644 app/views/urls/url.ctp create mode 100644 app/views/users/.svn/entries create mode 100644 app/views/users/.svn/text-base/add.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/admin_login.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/admin_reset_password.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/forgot.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/index.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/login.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/reset.ctp.svn-base create mode 100644 app/views/users/.svn/text-base/view.ctp.svn-base create mode 100644 app/views/users/add.ctp create mode 100644 app/views/users/admin_add.ctp create mode 100644 app/views/users/admin_edit.ctp create mode 100644 app/views/users/admin_index.ctp create mode 100644 app/views/users/admin_login.ctp create mode 100644 app/views/users/admin_reset_password.ctp create mode 100644 app/views/users/forgot.ctp create mode 100644 app/views/users/index.ctp create mode 100644 app/views/users/login.ctp create mode 100644 app/views/users/reset.ctp create mode 100644 app/views/users/view.ctp create mode 100644 app/views/vocabularies/.svn/entries create mode 100644 app/views/vocabularies/.svn/text-base/admin_add.ctp.svn-base create mode 100644 app/views/vocabularies/.svn/text-base/admin_edit.ctp.svn-base create mode 100644 app/views/vocabularies/.svn/text-base/admin_index.ctp.svn-base create mode 100644 app/views/vocabularies/admin_add.ctp create mode 100644 app/views/vocabularies/admin_edit.ctp create mode 100644 app/views/vocabularies/admin_index.ctp create mode 100644 app/webroot/.htaccess create mode 100644 app/webroot/.svn/entries create mode 100644 app/webroot/.svn/prop-base/favicon.ico.svn-base create mode 100644 app/webroot/.svn/text-base/.htaccess.svn-base create mode 100644 app/webroot/.svn/text-base/css.php.svn-base create mode 100644 app/webroot/.svn/text-base/favicon.ico.svn-base create mode 100644 app/webroot/.svn/text-base/index.php.svn-base create mode 100644 app/webroot/.svn/text-base/requerimento-revisao-de-tributo.pdf.svn-base create mode 100644 app/webroot/.svn/text-base/test.php.svn-base create mode 100644 app/webroot/.svn/text-base/theme.yml.svn-base create mode 100644 app/webroot/css.php create mode 100644 app/webroot/css/.svn/entries create mode 100644 app/webroot/css/.svn/text-base/960.css.svn-base create mode 100644 app/webroot/css/.svn/text-base/admin.css.svn-base create mode 100644 app/webroot/css/.svn/text-base/cake.generic.css.svn-base create mode 100644 app/webroot/css/.svn/text-base/reset.css.svn-base create mode 100644 app/webroot/css/.svn/text-base/theme.css.svn-base create mode 100644 app/webroot/css/.svn/text-base/thickbox.css.svn-base create mode 100644 app/webroot/css/960.css create mode 100644 app/webroot/css/admin.css create mode 100644 app/webroot/css/cake.generic.css create mode 100644 app/webroot/css/reset.css create mode 100644 app/webroot/css/theme.css create mode 100644 app/webroot/css/thickbox.css create mode 100644 app/webroot/favicon.ico create mode 100644 app/webroot/img/.svn/entries create mode 100644 app/webroot/img/.svn/prop-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/.svn/prop-base/cake.icon.gif.svn-base create mode 100644 app/webroot/img/.svn/prop-base/cake.power.gif.svn-base create mode 100644 app/webroot/img/.svn/prop-base/croogo.png.svn-base create mode 100644 app/webroot/img/.svn/prop-base/screenshot.png.svn-base create mode 100644 app/webroot/img/.svn/text-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/.svn/text-base/cake.icon.gif.svn-base create mode 100644 app/webroot/img/.svn/text-base/cake.power.gif.svn-base create mode 100644 app/webroot/img/.svn/text-base/croogo.png.svn-base create mode 100644 app/webroot/img/.svn/text-base/index.html.svn-base create mode 100644 app/webroot/img/.svn/text-base/screenshot.png.svn-base create mode 100644 app/webroot/img/Thumbs.db create mode 100644 app/webroot/img/ajax/.svn/entries create mode 100644 app/webroot/img/ajax/.svn/prop-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/ajax/.svn/prop-base/circle_ball.gif.svn-base create mode 100644 app/webroot/img/ajax/.svn/prop-base/loadingAnimation.gif.svn-base create mode 100644 app/webroot/img/ajax/.svn/prop-base/wheel_throbber.gif.svn-base create mode 100644 app/webroot/img/ajax/.svn/text-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/ajax/.svn/text-base/circle_ball.gif.svn-base create mode 100644 app/webroot/img/ajax/.svn/text-base/index.html.svn-base create mode 100644 app/webroot/img/ajax/.svn/text-base/loadingAnimation.gif.svn-base create mode 100644 app/webroot/img/ajax/.svn/text-base/wheel_throbber.gif.svn-base create mode 100644 app/webroot/img/ajax/Thumbs.db create mode 100644 app/webroot/img/ajax/circle_ball.gif create mode 100644 app/webroot/img/ajax/index.html create mode 100644 app/webroot/img/ajax/loadingAnimation.gif create mode 100644 app/webroot/img/ajax/wheel_throbber.gif create mode 100644 app/webroot/img/botoes/.svn/entries create mode 100644 app/webroot/img/botoes/.svn/prop-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFPreto.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFVerde.jpg.svn-base create mode 100644 app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base create mode 100644 app/webroot/img/botoes/Thumbs.db create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFAzul.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFLaranja.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFPreto.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFTerra.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFVermelho.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFAzul.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFPreto.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFTerra.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFVerde.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFAzul.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFLaranja.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFPreto.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFTerra.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFVerde.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFVermelho.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFAzul.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFLaranja.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFPreto.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFTerra.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFVerde.jpg create mode 100644 app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFVermelho.jpg create mode 100644 app/webroot/img/cake.icon.gif create mode 100644 app/webroot/img/cake.power.gif create mode 100644 app/webroot/img/croogo.png create mode 100644 app/webroot/img/icons/.svn/entries create mode 100644 app/webroot/img/icons/.svn/prop-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/bullet_arrow_down.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/bullet_arrow_right.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/cancel.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/comment.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/cross.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/css.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/exclamation.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/feed.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/folder.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/html.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/information.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/page_white.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/page_white_compressed.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/page_white_php.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/picture.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/tick.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/tick_disabled.png.svn-base create mode 100644 app/webroot/img/icons/.svn/prop-base/tipsy.gif.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/Thumbs.db.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/bullet_arrow_down.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/bullet_arrow_right.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/cancel.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/comment.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/cross.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/css.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/exclamation.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/feed.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/folder.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/html.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/index.html.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/information.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/page_white.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/page_white_compressed.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/page_white_php.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/picture.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/tick.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/tick_disabled.png.svn-base create mode 100644 app/webroot/img/icons/.svn/text-base/tipsy.gif.svn-base create mode 100644 app/webroot/img/icons/Thumbs.db create mode 100644 app/webroot/img/icons/bullet_arrow_down.png create mode 100644 app/webroot/img/icons/bullet_arrow_right.png create mode 100644 app/webroot/img/icons/cancel.png create mode 100644 app/webroot/img/icons/comment.png create mode 100644 app/webroot/img/icons/cross.png create mode 100644 app/webroot/img/icons/css.png create mode 100644 app/webroot/img/icons/exclamation.png create mode 100644 app/webroot/img/icons/feed.png create mode 100644 app/webroot/img/icons/folder.png create mode 100644 app/webroot/img/icons/html.png create mode 100644 app/webroot/img/icons/index.html create mode 100644 app/webroot/img/icons/information.png create mode 100644 app/webroot/img/icons/page_white.png create mode 100644 app/webroot/img/icons/page_white_compressed.png create mode 100644 app/webroot/img/icons/page_white_php.png create mode 100644 app/webroot/img/icons/picture.png create mode 100644 app/webroot/img/icons/tick.png create mode 100644 app/webroot/img/icons/tick_disabled.png create mode 100644 app/webroot/img/icons/tipsy.gif create mode 100644 app/webroot/img/index.html create mode 100644 app/webroot/img/screenshot.png create mode 100644 app/webroot/index.php create mode 100644 app/webroot/js/.svn/entries create mode 100644 app/webroot/js/.svn/text-base/admin.js.svn-base create mode 100644 app/webroot/js/.svn/text-base/croogo.js.svn-base create mode 100644 app/webroot/js/.svn/text-base/index.html.svn-base create mode 100644 app/webroot/js/.svn/text-base/nodes.js.svn-base create mode 100644 app/webroot/js/.svn/text-base/terms.js.svn-base create mode 100644 app/webroot/js/.svn/text-base/theme.js.svn-base create mode 100644 app/webroot/js/.svn/text-base/vendors.php.svn-base create mode 100644 app/webroot/js/.svn/text-base/vocabularies.js.svn-base create mode 100644 app/webroot/js/admin.js create mode 100644 app/webroot/js/croogo.js create mode 100644 app/webroot/js/index.html create mode 100644 app/webroot/js/jquery/.svn/entries create mode 100644 app/webroot/js/jquery/.svn/text-base/index.html.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery-ui.min.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.cookie.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.elastic-1.6.1.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.field.min.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.hoverIntent.minified.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.min.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.slug.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.tipsy.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/jquery.uuid.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/superfish.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/supersubs.js.svn-base create mode 100644 app/webroot/js/jquery/.svn/text-base/thickbox-compressed.js.svn-base create mode 100644 app/webroot/js/jquery/index.html create mode 100644 app/webroot/js/jquery/jquery-1.4.2.js create mode 100644 app/webroot/js/jquery/jquery-ui.min.js create mode 100644 app/webroot/js/jquery/jquery.cookie.js create mode 100644 app/webroot/js/jquery/jquery.elastic-1.6.1.js create mode 100644 app/webroot/js/jquery/jquery.field.min.js create mode 100644 app/webroot/js/jquery/jquery.hoverIntent.minified.js create mode 100644 app/webroot/js/jquery/jquery.maskedinput-1.2.2.min.js create mode 100644 app/webroot/js/jquery/jquery.min.js create mode 100644 app/webroot/js/jquery/jquery.numeric.js create mode 100644 app/webroot/js/jquery/jquery.slug.js create mode 100644 app/webroot/js/jquery/jquery.tipsy.js create mode 100644 app/webroot/js/jquery/jquery.uuid.js create mode 100644 app/webroot/js/jquery/jquery.validate.js create mode 100644 app/webroot/js/jquery/superfish.js create mode 100644 app/webroot/js/jquery/supersubs.js create mode 100644 app/webroot/js/jquery/thickbox-compressed.js create mode 100644 app/webroot/js/nodes.js create mode 100644 app/webroot/js/terms.js create mode 100644 app/webroot/js/theme.js create mode 100644 app/webroot/js/vendors.php create mode 100644 app/webroot/js/vocabularies.js create mode 100644 app/webroot/produto/.svn/entries create mode 100644 app/webroot/produto/.svn/prop-base/John-produto-3-2.jpg.svn-base create mode 100644 app/webroot/produto/.svn/prop-base/John-produto-3.jpg.svn-base create mode 100644 app/webroot/produto/.svn/prop-base/Thumbs.db.svn-base create mode 100644 app/webroot/produto/.svn/text-base/John-produto-3-2.jpg.svn-base create mode 100644 app/webroot/produto/.svn/text-base/John-produto-3.jpg.svn-base create mode 100644 app/webroot/produto/.svn/text-base/Thumbs.db.svn-base create mode 100644 app/webroot/produto/John-produto-3-2.jpg create mode 100644 app/webroot/produto/John-produto-3.jpg create mode 100644 app/webroot/produto/Thumbs.db create mode 100644 app/webroot/produto/demonstracao.jpg create mode 100644 app/webroot/requerimento-revisao-de-tributo.pdf create mode 100644 app/webroot/test.php create mode 100644 app/webroot/theme.yml create mode 100644 app/webroot/ui-themes/.svn/entries create mode 100644 app/webroot/ui-themes/smoothness/.svn/entries create mode 100644 app/webroot/ui-themes/smoothness/.svn/text-base/jquery-ui.css.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/entries create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_flat_0_aaaaaa_40x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_flat_75_ffffff_40x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_glass_55_fbf9ee_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_glass_65_ffffff_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_glass_75_dadada_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_glass_75_e6e6e6_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_glass_95_fef1ec_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-bg_highlight-soft_75_cccccc_1x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-icons_222222_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-icons_2e83ff_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-icons_454545_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-icons_888888_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/prop-base/ui-icons_cd0a0a_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_flat_0_aaaaaa_40x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_flat_75_ffffff_40x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_glass_55_fbf9ee_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_glass_65_ffffff_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_glass_75_dadada_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_glass_75_e6e6e6_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_glass_95_fef1ec_1x400.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-bg_highlight-soft_75_cccccc_1x100.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-icons_222222_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-icons_2e83ff_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-icons_454545_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-icons_888888_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/.svn/text-base/ui-icons_cd0a0a_256x240.png.svn-base create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-icons_222222_256x240.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-icons_454545_256x240.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-icons_888888_256x240.png create mode 100644 app/webroot/ui-themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 app/webroot/ui-themes/smoothness/jquery-ui.css create mode 100644 app/webroot/webservice-simples.php create mode 100644 cake/.DS_Store create mode 100644 cake/LICENSE.txt create mode 100644 cake/README create mode 100644 cake/VERSION.txt create mode 100644 cake/basics.php create mode 100644 cake/bootstrap.php create mode 100644 cake/config/.svn/entries create mode 100644 cake/config/.svn/text-base/config.php.svn-base create mode 100644 cake/config/.svn/text-base/paths.php.svn-base create mode 100644 cake/config/config.php create mode 100644 cake/config/paths.php create mode 100644 cake/config/unicode/.svn/entries create mode 100644 cake/config/unicode/casefolding/.svn/entries create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0080_00ff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0100_017f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0180_024F.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0250_02af.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0370_03ff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0400_04ff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0500_052f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/0530_058f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/1e00_1eff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/1f00_1fff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2100_214f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2150_218f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2460_24ff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2c00_2c5f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2c60_2c7f.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/2c80_2cff.php.svn-base create mode 100644 cake/config/unicode/casefolding/.svn/text-base/ff00_ffef.php.svn-base create mode 100644 cake/config/unicode/casefolding/0080_00ff.php create mode 100644 cake/config/unicode/casefolding/0100_017f.php create mode 100644 cake/config/unicode/casefolding/0180_024F.php create mode 100644 cake/config/unicode/casefolding/0250_02af.php create mode 100644 cake/config/unicode/casefolding/0370_03ff.php create mode 100644 cake/config/unicode/casefolding/0400_04ff.php create mode 100644 cake/config/unicode/casefolding/0500_052f.php create mode 100644 cake/config/unicode/casefolding/0530_058f.php create mode 100644 cake/config/unicode/casefolding/1e00_1eff.php create mode 100644 cake/config/unicode/casefolding/1f00_1fff.php create mode 100644 cake/config/unicode/casefolding/2100_214f.php create mode 100644 cake/config/unicode/casefolding/2150_218f.php create mode 100644 cake/config/unicode/casefolding/2460_24ff.php create mode 100644 cake/config/unicode/casefolding/2c00_2c5f.php create mode 100644 cake/config/unicode/casefolding/2c60_2c7f.php create mode 100644 cake/config/unicode/casefolding/2c80_2cff.php create mode 100644 cake/config/unicode/casefolding/ff00_ffef.php create mode 100644 cake/console/.svn/entries create mode 100644 cake/console/.svn/text-base/cake.bat.svn-base create mode 100644 cake/console/.svn/text-base/cake.php.svn-base create mode 100644 cake/console/.svn/text-base/cake.svn-base create mode 100644 cake/console/.svn/text-base/error.php.svn-base create mode 100644 cake/console/cake create mode 100644 cake/console/cake.bat create mode 100644 cake/console/cake.php create mode 100644 cake/console/error.php create mode 100644 cake/console/libs/.svn/entries create mode 100644 cake/console/libs/.svn/text-base/acl.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/api.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/bake.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/console.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/i18n.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/schema.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/shell.php.svn-base create mode 100644 cake/console/libs/.svn/text-base/testsuite.php.svn-base create mode 100644 cake/console/libs/acl.php create mode 100644 cake/console/libs/api.php create mode 100644 cake/console/libs/bake.php create mode 100644 cake/console/libs/console.php create mode 100644 cake/console/libs/i18n.php create mode 100644 cake/console/libs/schema.php create mode 100644 cake/console/libs/shell.php create mode 100644 cake/console/libs/tasks/.svn/entries create mode 100644 cake/console/libs/tasks/.svn/text-base/bake.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/controller.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/db_config.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/extract.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/fixture.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/model.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/plugin.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/project.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/template.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/test.php.svn-base create mode 100644 cake/console/libs/tasks/.svn/text-base/view.php.svn-base create mode 100644 cake/console/libs/tasks/bake.php create mode 100644 cake/console/libs/tasks/controller.php create mode 100644 cake/console/libs/tasks/db_config.php create mode 100644 cake/console/libs/tasks/extract.php create mode 100644 cake/console/libs/tasks/fixture.php create mode 100644 cake/console/libs/tasks/model.php create mode 100644 cake/console/libs/tasks/plugin.php create mode 100644 cake/console/libs/tasks/project.php create mode 100644 cake/console/libs/tasks/template.php create mode 100644 cake/console/libs/tasks/test.php create mode 100644 cake/console/libs/tasks/view.php create mode 100644 cake/console/libs/testsuite.php create mode 100644 cake/console/templates/.svn/entries create mode 100644 cake/console/templates/default/.svn/entries create mode 100644 cake/console/templates/default/actions/.svn/entries create mode 100644 cake/console/templates/default/actions/.svn/text-base/controller_actions.ctp.svn-base create mode 100644 cake/console/templates/default/actions/controller_actions.ctp create mode 100644 cake/console/templates/default/classes/.svn/entries create mode 100644 cake/console/templates/default/classes/.svn/text-base/controller.ctp.svn-base create mode 100644 cake/console/templates/default/classes/.svn/text-base/fixture.ctp.svn-base create mode 100644 cake/console/templates/default/classes/.svn/text-base/model.ctp.svn-base create mode 100644 cake/console/templates/default/classes/.svn/text-base/test.ctp.svn-base create mode 100644 cake/console/templates/default/classes/controller.ctp create mode 100644 cake/console/templates/default/classes/fixture.ctp create mode 100644 cake/console/templates/default/classes/model.ctp create mode 100644 cake/console/templates/default/classes/test.ctp create mode 100644 cake/console/templates/default/views/.svn/entries create mode 100644 cake/console/templates/default/views/.svn/text-base/form.ctp.svn-base create mode 100644 cake/console/templates/default/views/.svn/text-base/home.ctp.svn-base create mode 100644 cake/console/templates/default/views/.svn/text-base/index.ctp.svn-base create mode 100644 cake/console/templates/default/views/.svn/text-base/view.ctp.svn-base create mode 100644 cake/console/templates/default/views/form.ctp create mode 100644 cake/console/templates/default/views/home.ctp create mode 100644 cake/console/templates/default/views/index.ctp create mode 100644 cake/console/templates/default/views/view.ctp create mode 100644 cake/console/templates/skel/.htaccess create mode 100644 cake/console/templates/skel/.svn/entries create mode 100644 cake/console/templates/skel/.svn/text-base/.htaccess.svn-base create mode 100644 cake/console/templates/skel/.svn/text-base/app_controller.php.svn-base create mode 100644 cake/console/templates/skel/.svn/text-base/app_helper.php.svn-base create mode 100644 cake/console/templates/skel/.svn/text-base/app_model.php.svn-base create mode 100644 cake/console/templates/skel/.svn/text-base/index.php.svn-base create mode 100644 cake/console/templates/skel/app_controller.php create mode 100644 cake/console/templates/skel/app_helper.php create mode 100644 cake/console/templates/skel/app_model.php create mode 100644 cake/console/templates/skel/config/.svn/entries create mode 100644 cake/console/templates/skel/config/.svn/text-base/acl.ini.php.svn-base create mode 100644 cake/console/templates/skel/config/.svn/text-base/bootstrap.php.svn-base create mode 100644 cake/console/templates/skel/config/.svn/text-base/core.php.svn-base create mode 100644 cake/console/templates/skel/config/.svn/text-base/database.php.default.svn-base create mode 100644 cake/console/templates/skel/config/.svn/text-base/routes.php.svn-base create mode 100644 cake/console/templates/skel/config/acl.ini.php create mode 100644 cake/console/templates/skel/config/bootstrap.php create mode 100644 cake/console/templates/skel/config/core.php create mode 100644 cake/console/templates/skel/config/database.php.default create mode 100644 cake/console/templates/skel/config/routes.php create mode 100644 cake/console/templates/skel/config/schema/.svn/entries create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/db_acl.php.svn-base create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/db_acl.sql.svn-base create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/i18n.php.svn-base create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/i18n.sql.svn-base create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/sessions.php.svn-base create mode 100644 cake/console/templates/skel/config/schema/.svn/text-base/sessions.sql.svn-base create mode 100644 cake/console/templates/skel/config/schema/db_acl.php create mode 100644 cake/console/templates/skel/config/schema/db_acl.sql create mode 100644 cake/console/templates/skel/config/schema/i18n.php create mode 100644 cake/console/templates/skel/config/schema/i18n.sql create mode 100644 cake/console/templates/skel/config/schema/sessions.php create mode 100644 cake/console/templates/skel/config/schema/sessions.sql create mode 100644 cake/console/templates/skel/controllers/.svn/entries create mode 100644 cake/console/templates/skel/controllers/.svn/text-base/pages_controller.php.svn-base create mode 100644 cake/console/templates/skel/controllers/components/.svn/entries create mode 100644 cake/console/templates/skel/controllers/components/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/controllers/components/empty create mode 100644 cake/console/templates/skel/controllers/pages_controller.php create mode 100644 cake/console/templates/skel/index.php create mode 100644 cake/console/templates/skel/libs/.svn/entries create mode 100644 cake/console/templates/skel/libs/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/libs/empty create mode 100644 cake/console/templates/skel/locale/.svn/entries create mode 100644 cake/console/templates/skel/locale/eng/.svn/entries create mode 100644 cake/console/templates/skel/locale/eng/LC_MESSAGES/.svn/entries create mode 100644 cake/console/templates/skel/locale/eng/LC_MESSAGES/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/locale/eng/LC_MESSAGES/empty create mode 100644 cake/console/templates/skel/models/.svn/entries create mode 100644 cake/console/templates/skel/models/behaviors/.svn/entries create mode 100644 cake/console/templates/skel/models/behaviors/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/models/behaviors/empty create mode 100644 cake/console/templates/skel/models/datasources/.svn/entries create mode 100644 cake/console/templates/skel/models/datasources/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/models/datasources/empty create mode 100644 cake/console/templates/skel/plugins/.svn/entries create mode 100644 cake/console/templates/skel/plugins/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/plugins/empty create mode 100644 cake/console/templates/skel/tests/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/behaviors/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/behaviors/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/behaviors/empty create mode 100644 cake/console/templates/skel/tests/cases/components/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/components/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/components/empty create mode 100644 cake/console/templates/skel/tests/cases/controllers/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/controllers/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/controllers/empty create mode 100644 cake/console/templates/skel/tests/cases/datasources/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/datasources/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/datasources/empty create mode 100644 cake/console/templates/skel/tests/cases/helpers/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/helpers/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/helpers/empty create mode 100644 cake/console/templates/skel/tests/cases/models/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/models/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/models/empty create mode 100644 cake/console/templates/skel/tests/cases/shells/.svn/entries create mode 100644 cake/console/templates/skel/tests/cases/shells/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/cases/shells/empty create mode 100644 cake/console/templates/skel/tests/fixtures/.svn/entries create mode 100644 cake/console/templates/skel/tests/fixtures/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/fixtures/empty create mode 100644 cake/console/templates/skel/tests/groups/.svn/entries create mode 100644 cake/console/templates/skel/tests/groups/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tests/groups/empty create mode 100644 cake/console/templates/skel/tmp/.svn/entries create mode 100644 cake/console/templates/skel/tmp/cache/.svn/entries create mode 100644 cake/console/templates/skel/tmp/cache/models/.svn/entries create mode 100644 cake/console/templates/skel/tmp/cache/models/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/cache/models/empty create mode 100644 cake/console/templates/skel/tmp/cache/persistent/.svn/entries create mode 100644 cake/console/templates/skel/tmp/cache/persistent/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/cache/persistent/empty create mode 100644 cake/console/templates/skel/tmp/cache/views/.svn/entries create mode 100644 cake/console/templates/skel/tmp/cache/views/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/cache/views/empty create mode 100644 cake/console/templates/skel/tmp/logs/.svn/entries create mode 100644 cake/console/templates/skel/tmp/logs/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/logs/empty create mode 100644 cake/console/templates/skel/tmp/sessions/.svn/entries create mode 100644 cake/console/templates/skel/tmp/sessions/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/sessions/empty create mode 100644 cake/console/templates/skel/tmp/tests/.svn/entries create mode 100644 cake/console/templates/skel/tmp/tests/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/tmp/tests/empty create mode 100644 cake/console/templates/skel/vendors/.svn/entries create mode 100644 cake/console/templates/skel/vendors/shells/.svn/entries create mode 100644 cake/console/templates/skel/vendors/shells/tasks/.svn/entries create mode 100644 cake/console/templates/skel/vendors/shells/tasks/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/vendors/shells/tasks/empty create mode 100644 cake/console/templates/skel/views/.svn/entries create mode 100644 cake/console/templates/skel/views/elements/.svn/entries create mode 100644 cake/console/templates/skel/views/elements/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/views/elements/email/.svn/entries create mode 100644 cake/console/templates/skel/views/elements/email/html/.svn/entries create mode 100644 cake/console/templates/skel/views/elements/email/html/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/elements/email/html/default.ctp create mode 100644 cake/console/templates/skel/views/elements/email/text/.svn/entries create mode 100644 cake/console/templates/skel/views/elements/email/text/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/elements/email/text/default.ctp create mode 100644 cake/console/templates/skel/views/elements/empty create mode 100644 cake/console/templates/skel/views/errors/.svn/entries create mode 100644 cake/console/templates/skel/views/errors/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/views/errors/empty create mode 100644 cake/console/templates/skel/views/helpers/.svn/entries create mode 100644 cake/console/templates/skel/views/helpers/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/views/helpers/empty create mode 100644 cake/console/templates/skel/views/layouts/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/.svn/text-base/ajax.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/.svn/text-base/flash.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/ajax.ctp create mode 100644 cake/console/templates/skel/views/layouts/default.ctp create mode 100644 cake/console/templates/skel/views/layouts/email/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/email/html/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/email/html/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/email/html/default.ctp create mode 100644 cake/console/templates/skel/views/layouts/email/text/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/email/text/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/email/text/default.ctp create mode 100644 cake/console/templates/skel/views/layouts/flash.ctp create mode 100644 cake/console/templates/skel/views/layouts/js/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/js/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/js/default.ctp create mode 100644 cake/console/templates/skel/views/layouts/rss/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/rss/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/rss/default.ctp create mode 100644 cake/console/templates/skel/views/layouts/xml/.svn/entries create mode 100644 cake/console/templates/skel/views/layouts/xml/.svn/text-base/default.ctp.svn-base create mode 100644 cake/console/templates/skel/views/layouts/xml/default.ctp create mode 100644 cake/console/templates/skel/views/pages/.svn/entries create mode 100644 cake/console/templates/skel/views/pages/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/views/pages/empty create mode 100644 cake/console/templates/skel/views/scaffolds/.svn/entries create mode 100644 cake/console/templates/skel/views/scaffolds/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/views/scaffolds/empty create mode 100644 cake/console/templates/skel/webroot/.htaccess create mode 100644 cake/console/templates/skel/webroot/.svn/entries create mode 100644 cake/console/templates/skel/webroot/.svn/prop-base/favicon.ico.svn-base create mode 100644 cake/console/templates/skel/webroot/.svn/text-base/.htaccess.svn-base create mode 100644 cake/console/templates/skel/webroot/.svn/text-base/css.php.svn-base create mode 100644 cake/console/templates/skel/webroot/.svn/text-base/favicon.ico.svn-base create mode 100644 cake/console/templates/skel/webroot/.svn/text-base/index.php.svn-base create mode 100644 cake/console/templates/skel/webroot/.svn/text-base/test.php.svn-base create mode 100644 cake/console/templates/skel/webroot/css.php create mode 100644 cake/console/templates/skel/webroot/css/.svn/entries create mode 100644 cake/console/templates/skel/webroot/css/.svn/text-base/cake.generic.css.svn-base create mode 100644 cake/console/templates/skel/webroot/css/cake.generic.css create mode 100644 cake/console/templates/skel/webroot/favicon.ico create mode 100644 cake/console/templates/skel/webroot/img/.svn/entries create mode 100644 cake/console/templates/skel/webroot/img/.svn/prop-base/cake.icon.png.svn-base create mode 100644 cake/console/templates/skel/webroot/img/.svn/prop-base/cake.power.gif.svn-base create mode 100644 cake/console/templates/skel/webroot/img/.svn/text-base/cake.icon.png.svn-base create mode 100644 cake/console/templates/skel/webroot/img/.svn/text-base/cake.power.gif.svn-base create mode 100644 cake/console/templates/skel/webroot/img/cake.icon.png create mode 100644 cake/console/templates/skel/webroot/img/cake.power.gif create mode 100644 cake/console/templates/skel/webroot/index.php create mode 100644 cake/console/templates/skel/webroot/js/.svn/entries create mode 100644 cake/console/templates/skel/webroot/js/.svn/text-base/empty.svn-base create mode 100644 cake/console/templates/skel/webroot/js/empty create mode 100644 cake/console/templates/skel/webroot/test.php create mode 100644 cake/dispatcher.php create mode 100644 cake/libs/.DS_Store create mode 100644 cake/libs/.svn/entries create mode 100644 cake/libs/.svn/text-base/cache.php.svn-base create mode 100644 cake/libs/.svn/text-base/cake_log.php.svn-base create mode 100644 cake/libs/.svn/text-base/cake_session.php.svn-base create mode 100644 cake/libs/.svn/text-base/cake_socket.php.svn-base create mode 100644 cake/libs/.svn/text-base/class_registry.php.svn-base create mode 100644 cake/libs/.svn/text-base/configure.php.svn-base create mode 100644 cake/libs/.svn/text-base/debugger.php.svn-base create mode 100644 cake/libs/.svn/text-base/error.php.svn-base create mode 100644 cake/libs/.svn/text-base/file.php.svn-base create mode 100644 cake/libs/.svn/text-base/folder.php.svn-base create mode 100644 cake/libs/.svn/text-base/http_socket.php.svn-base create mode 100644 cake/libs/.svn/text-base/i18n.php.svn-base create mode 100644 cake/libs/.svn/text-base/inflector.php.svn-base create mode 100644 cake/libs/.svn/text-base/l10n.php.svn-base create mode 100644 cake/libs/.svn/text-base/magic_db.php.svn-base create mode 100644 cake/libs/.svn/text-base/multibyte.php.svn-base create mode 100644 cake/libs/.svn/text-base/object.php.svn-base create mode 100644 cake/libs/.svn/text-base/overloadable.php.svn-base create mode 100644 cake/libs/.svn/text-base/overloadable_php4.php.svn-base create mode 100644 cake/libs/.svn/text-base/overloadable_php5.php.svn-base create mode 100644 cake/libs/.svn/text-base/router.php.svn-base create mode 100644 cake/libs/.svn/text-base/sanitize.php.svn-base create mode 100644 cake/libs/.svn/text-base/security.php.svn-base create mode 100644 cake/libs/.svn/text-base/set.php.svn-base create mode 100644 cake/libs/.svn/text-base/string.php.svn-base create mode 100644 cake/libs/.svn/text-base/validation.php.svn-base create mode 100644 cake/libs/.svn/text-base/xml.php.svn-base create mode 100644 cake/libs/cache.php create mode 100644 cake/libs/cache/.svn/entries create mode 100644 cake/libs/cache/.svn/text-base/apc.php.svn-base create mode 100644 cake/libs/cache/.svn/text-base/file.php.svn-base create mode 100644 cake/libs/cache/.svn/text-base/memcache.php.svn-base create mode 100644 cake/libs/cache/.svn/text-base/xcache.php.svn-base create mode 100644 cake/libs/cache/apc.php create mode 100644 cake/libs/cache/file.php create mode 100644 cake/libs/cache/memcache.php create mode 100644 cake/libs/cache/xcache.php create mode 100644 cake/libs/cake_log.php create mode 100644 cake/libs/cake_session.php create mode 100644 cake/libs/cake_socket.php create mode 100644 cake/libs/class_registry.php create mode 100644 cake/libs/configure.php create mode 100644 cake/libs/controller/.svn/entries create mode 100644 cake/libs/controller/.svn/text-base/app_controller.php.svn-base create mode 100644 cake/libs/controller/.svn/text-base/component.php.svn-base create mode 100644 cake/libs/controller/.svn/text-base/controller.php.svn-base create mode 100644 cake/libs/controller/.svn/text-base/pages_controller.php.svn-base create mode 100644 cake/libs/controller/.svn/text-base/scaffold.php.svn-base create mode 100644 cake/libs/controller/app_controller.php create mode 100644 cake/libs/controller/component.php create mode 100644 cake/libs/controller/components/.svn/entries create mode 100644 cake/libs/controller/components/.svn/text-base/acl.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/auth.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/cookie.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/email.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/request_handler.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/security.php.svn-base create mode 100644 cake/libs/controller/components/.svn/text-base/session.php.svn-base create mode 100644 cake/libs/controller/components/acl.php create mode 100644 cake/libs/controller/components/auth.php create mode 100644 cake/libs/controller/components/cookie.php create mode 100644 cake/libs/controller/components/email.php create mode 100644 cake/libs/controller/components/request_handler.php create mode 100644 cake/libs/controller/components/security.php create mode 100644 cake/libs/controller/components/session.php create mode 100644 cake/libs/controller/controller.php create mode 100644 cake/libs/controller/pages_controller.php create mode 100644 cake/libs/controller/scaffold.php create mode 100644 cake/libs/debugger.php create mode 100644 cake/libs/error.php create mode 100644 cake/libs/file.php create mode 100644 cake/libs/folder.php create mode 100644 cake/libs/http_socket.php create mode 100644 cake/libs/i18n.php create mode 100644 cake/libs/inflector.php create mode 100644 cake/libs/l10n.php create mode 100644 cake/libs/log/.svn/entries create mode 100644 cake/libs/log/.svn/text-base/file_log.php.svn-base create mode 100644 cake/libs/log/file_log.php create mode 100644 cake/libs/magic_db.php create mode 100644 cake/libs/model/.svn/entries create mode 100644 cake/libs/model/.svn/text-base/app_model.php.svn-base create mode 100644 cake/libs/model/.svn/text-base/cake_schema.php.svn-base create mode 100644 cake/libs/model/.svn/text-base/connection_manager.php.svn-base create mode 100644 cake/libs/model/.svn/text-base/db_acl.php.svn-base create mode 100644 cake/libs/model/.svn/text-base/model.php.svn-base create mode 100644 cake/libs/model/.svn/text-base/model_behavior.php.svn-base create mode 100644 cake/libs/model/app_model.php create mode 100644 cake/libs/model/behaviors/.svn/entries create mode 100644 cake/libs/model/behaviors/.svn/text-base/acl.php.svn-base create mode 100644 cake/libs/model/behaviors/.svn/text-base/containable.php.svn-base create mode 100644 cake/libs/model/behaviors/.svn/text-base/translate.php.svn-base create mode 100644 cake/libs/model/behaviors/.svn/text-base/tree.php.svn-base create mode 100644 cake/libs/model/behaviors/acl.php create mode 100644 cake/libs/model/behaviors/containable.php create mode 100644 cake/libs/model/behaviors/translate.php create mode 100644 cake/libs/model/behaviors/tree.php create mode 100644 cake/libs/model/cake_schema.php create mode 100644 cake/libs/model/connection_manager.php create mode 100644 cake/libs/model/datasources/.svn/entries create mode 100644 cake/libs/model/datasources/.svn/text-base/datasource.php.svn-base create mode 100644 cake/libs/model/datasources/.svn/text-base/dbo_source.php.svn-base create mode 100644 cake/libs/model/datasources/datasource.php create mode 100644 cake/libs/model/datasources/dbo/.svn/entries create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_mssql.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_mysql.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_mysqli.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_oracle.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_postgres.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/.svn/text-base/dbo_sqlite.php.svn-base create mode 100644 cake/libs/model/datasources/dbo/dbo_mssql.php create mode 100644 cake/libs/model/datasources/dbo/dbo_mysql.php create mode 100644 cake/libs/model/datasources/dbo/dbo_mysqli.php create mode 100644 cake/libs/model/datasources/dbo/dbo_oracle.php create mode 100644 cake/libs/model/datasources/dbo/dbo_postgres.php create mode 100644 cake/libs/model/datasources/dbo/dbo_sqlite.php create mode 100644 cake/libs/model/datasources/dbo_source.php create mode 100644 cake/libs/model/db_acl.php create mode 100644 cake/libs/model/model.php create mode 100644 cake/libs/model/model_behavior.php create mode 100644 cake/libs/multibyte.php create mode 100644 cake/libs/object.php create mode 100644 cake/libs/overloadable.php create mode 100644 cake/libs/overloadable_php4.php create mode 100644 cake/libs/overloadable_php5.php create mode 100644 cake/libs/router.php create mode 100644 cake/libs/sanitize.php create mode 100644 cake/libs/security.php create mode 100644 cake/libs/set.php create mode 100644 cake/libs/string.php create mode 100644 cake/libs/validation.php create mode 100644 cake/libs/view/.svn/entries create mode 100644 cake/libs/view/.svn/text-base/helper.php.svn-base create mode 100644 cake/libs/view/.svn/text-base/media.php.svn-base create mode 100644 cake/libs/view/.svn/text-base/theme.php.svn-base create mode 100644 cake/libs/view/.svn/text-base/view.php.svn-base create mode 100644 cake/libs/view/elements/.svn/entries create mode 100644 cake/libs/view/elements/.svn/text-base/sql_dump.ctp.svn-base create mode 100644 cake/libs/view/elements/email/.svn/entries create mode 100644 cake/libs/view/elements/email/html/.svn/entries create mode 100644 cake/libs/view/elements/email/html/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/elements/email/html/default.ctp create mode 100644 cake/libs/view/elements/email/text/.svn/entries create mode 100644 cake/libs/view/elements/email/text/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/elements/email/text/default.ctp create mode 100644 cake/libs/view/elements/sql_dump.ctp create mode 100644 cake/libs/view/errors/.svn/entries create mode 100644 cake/libs/view/errors/.svn/text-base/error404.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/error500.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_action.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_behavior_class.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_behavior_file.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_component_class.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_component_file.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_connection.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_controller.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_helper_class.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_helper_file.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_layout.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_model.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_scaffolddb.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_table.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/missing_view.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/private_action.ctp.svn-base create mode 100644 cake/libs/view/errors/.svn/text-base/scaffold_error.ctp.svn-base create mode 100644 cake/libs/view/errors/error404.ctp create mode 100644 cake/libs/view/errors/error500.ctp create mode 100644 cake/libs/view/errors/missing_action.ctp create mode 100644 cake/libs/view/errors/missing_behavior_class.ctp create mode 100644 cake/libs/view/errors/missing_behavior_file.ctp create mode 100644 cake/libs/view/errors/missing_component_class.ctp create mode 100644 cake/libs/view/errors/missing_component_file.ctp create mode 100644 cake/libs/view/errors/missing_connection.ctp create mode 100644 cake/libs/view/errors/missing_controller.ctp create mode 100644 cake/libs/view/errors/missing_helper_class.ctp create mode 100644 cake/libs/view/errors/missing_helper_file.ctp create mode 100644 cake/libs/view/errors/missing_layout.ctp create mode 100644 cake/libs/view/errors/missing_model.ctp create mode 100644 cake/libs/view/errors/missing_scaffolddb.ctp create mode 100644 cake/libs/view/errors/missing_table.ctp create mode 100644 cake/libs/view/errors/missing_view.ctp create mode 100644 cake/libs/view/errors/private_action.ctp create mode 100644 cake/libs/view/errors/scaffold_error.ctp create mode 100644 cake/libs/view/helper.php create mode 100644 cake/libs/view/helpers/.svn/entries create mode 100644 cake/libs/view/helpers/.svn/text-base/ajax.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/app_helper.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/cache.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/form.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/html.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/javascript.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/jquery_engine.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/js.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/mootools_engine.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/number.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/paginator.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/prototype_engine.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/rss.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/session.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/text.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/time.php.svn-base create mode 100644 cake/libs/view/helpers/.svn/text-base/xml.php.svn-base create mode 100644 cake/libs/view/helpers/ajax.php create mode 100644 cake/libs/view/helpers/app_helper.php create mode 100644 cake/libs/view/helpers/cache.php create mode 100644 cake/libs/view/helpers/form.php create mode 100644 cake/libs/view/helpers/html.php create mode 100644 cake/libs/view/helpers/javascript.php create mode 100644 cake/libs/view/helpers/jquery_engine.php create mode 100644 cake/libs/view/helpers/js.php create mode 100644 cake/libs/view/helpers/mootools_engine.php create mode 100644 cake/libs/view/helpers/number.php create mode 100644 cake/libs/view/helpers/paginator.php create mode 100644 cake/libs/view/helpers/prototype_engine.php create mode 100644 cake/libs/view/helpers/rss.php create mode 100644 cake/libs/view/helpers/session.php create mode 100644 cake/libs/view/helpers/text.php create mode 100644 cake/libs/view/helpers/time.php create mode 100644 cake/libs/view/helpers/xml.php create mode 100644 cake/libs/view/layouts/.svn/entries create mode 100644 cake/libs/view/layouts/.svn/text-base/ajax.ctp.svn-base create mode 100644 cake/libs/view/layouts/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/.svn/text-base/flash.ctp.svn-base create mode 100644 cake/libs/view/layouts/ajax.ctp create mode 100644 cake/libs/view/layouts/default.ctp create mode 100644 cake/libs/view/layouts/email/.svn/entries create mode 100644 cake/libs/view/layouts/email/html/.svn/entries create mode 100644 cake/libs/view/layouts/email/html/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/email/html/default.ctp create mode 100644 cake/libs/view/layouts/email/text/.svn/entries create mode 100644 cake/libs/view/layouts/email/text/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/email/text/default.ctp create mode 100644 cake/libs/view/layouts/flash.ctp create mode 100644 cake/libs/view/layouts/js/.svn/entries create mode 100644 cake/libs/view/layouts/js/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/js/default.ctp create mode 100644 cake/libs/view/layouts/rss/.svn/entries create mode 100644 cake/libs/view/layouts/rss/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/rss/default.ctp create mode 100644 cake/libs/view/layouts/xml/.svn/entries create mode 100644 cake/libs/view/layouts/xml/.svn/text-base/default.ctp.svn-base create mode 100644 cake/libs/view/layouts/xml/default.ctp create mode 100644 cake/libs/view/media.php create mode 100644 cake/libs/view/pages/.svn/entries create mode 100644 cake/libs/view/pages/.svn/text-base/home.ctp.svn-base create mode 100644 cake/libs/view/pages/home.ctp create mode 100644 cake/libs/view/scaffolds/.svn/entries create mode 100644 cake/libs/view/scaffolds/.svn/text-base/edit.ctp.svn-base create mode 100644 cake/libs/view/scaffolds/.svn/text-base/index.ctp.svn-base create mode 100644 cake/libs/view/scaffolds/.svn/text-base/view.ctp.svn-base create mode 100644 cake/libs/view/scaffolds/edit.ctp create mode 100644 cake/libs/view/scaffolds/index.ctp create mode 100644 cake/libs/view/scaffolds/view.ctp create mode 100644 cake/libs/view/theme.php create mode 100644 cake/libs/view/view.php create mode 100644 cake/libs/xml.php create mode 100644 cake/tests/.DS_Store create mode 100644 cake/tests/.svn/entries create mode 100644 cake/tests/lib/.DS_Store create mode 100644 cake/tests/lib/.svn/entries create mode 100644 cake/tests/lib/.svn/text-base/cake_test_case.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/cake_test_fixture.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/cake_test_model.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/cake_test_suite_dispatcher.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/cake_web_test_case.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/code_coverage_manager.php.svn-base create mode 100644 cake/tests/lib/.svn/text-base/test_manager.php.svn-base create mode 100644 cake/tests/lib/cake_test_case.php create mode 100644 cake/tests/lib/cake_test_fixture.php create mode 100644 cake/tests/lib/cake_test_model.php create mode 100644 cake/tests/lib/cake_test_suite_dispatcher.php create mode 100644 cake/tests/lib/cake_web_test_case.php create mode 100644 cake/tests/lib/code_coverage_manager.php create mode 100644 cake/tests/lib/reporter/.svn/entries create mode 100644 cake/tests/lib/reporter/.svn/text-base/cake_base_reporter.php.svn-base create mode 100644 cake/tests/lib/reporter/.svn/text-base/cake_cli_reporter.php.svn-base create mode 100644 cake/tests/lib/reporter/.svn/text-base/cake_html_reporter.php.svn-base create mode 100644 cake/tests/lib/reporter/.svn/text-base/cake_text_reporter.php.svn-base create mode 100644 cake/tests/lib/reporter/cake_base_reporter.php create mode 100644 cake/tests/lib/reporter/cake_cli_reporter.php create mode 100644 cake/tests/lib/reporter/cake_html_reporter.php create mode 100644 cake/tests/lib/reporter/cake_text_reporter.php create mode 100644 cake/tests/lib/templates/.svn/entries create mode 100644 cake/tests/lib/templates/.svn/text-base/footer.php.svn-base create mode 100644 cake/tests/lib/templates/.svn/text-base/header.php.svn-base create mode 100644 cake/tests/lib/templates/.svn/text-base/menu.php.svn-base create mode 100644 cake/tests/lib/templates/.svn/text-base/simpletest.php.svn-base create mode 100644 cake/tests/lib/templates/.svn/text-base/xdebug.php.svn-base create mode 100644 cake/tests/lib/templates/footer.php create mode 100644 cake/tests/lib/templates/header.php create mode 100644 cake/tests/lib/templates/menu.php create mode 100644 cake/tests/lib/templates/simpletest.php create mode 100644 cake/tests/lib/templates/xdebug.php create mode 100644 cake/tests/lib/test_manager.php create mode 100644 google4e29e7604bbbbc61.html create mode 100644 index.html create mode 100644 index.php create mode 100644 vendors/.DS_Store create mode 100644 vendors/shells/.DS_Store create mode 100644 vendors/shells/tasks/.DS_Store create mode 100644 vendors/shells/tasks/.svn/entries create mode 100644 vendors/shells/tasks/.svn/text-base/empty.svn-base create mode 100644 vendors/shells/tasks/empty create mode 100644 vendors/shells/templates/.DS_Store create mode 100644 vendors/shells/templates/.svn/entries create mode 100644 vendors/shells/templates/.svn/text-base/empty.svn-base create mode 100644 vendors/shells/templates/empty diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..347d6c5 --- /dev/null +++ b/.htaccess @@ -0,0 +1,6 @@ +php_value memory_limit 128M + + RewriteEngine on + RewriteRule ^$ app/webroot/ [L] + RewriteRule (.*) app/webroot/$1 [L] + \ No newline at end of file diff --git a/analytics.txt b/analytics.txt new file mode 100644 index 0000000..034f92c --- /dev/null +++ b/analytics.txt @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/app/.DS_Store b/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5d891a00f090e39d93dfc92b39a44cda35ab2350 GIT binary patch literal 15364 zcmeI1-A)rh6vxj%fmYBEztCvR#w#xf>9!(}cu^6IBz^^qUig76t+vV1C3F#zidKCI zo+bZ-!s>5~@GQd_rYYJzow2{1qT6V5+ zxP1+_Vf${DUmVLLZOba|7vOGP?>g|H z^e6WBQ4=L}OWTbNOaDV@Bd9f^Z1%Gn7)%WfkEGLw(qj+r*XrePdp_K%mm3dOs^RuZ ztz0P;Hy`PCRE)M7^Tkbl=1wuH;*4(J4Z{HKhgSQ3tsGTX$4@t#{_Mp`&(F{7PI^s0 zJL^w+m$K8lyO~TnGyXAs;{4R*>vxO0FJHA@>!&4U(=Z)2zuWa&v_?CQaVHO90?HET zVijZYz6UH$fyK-mSj=e_b9r!?_GeubFPMetbXOE_a6W^fuWP5-`H7S7#X>6u_pDLL z4JgGf9oHMB8?;1MX_0OrY!`9$h;}GSx|w!nhJ38;W&xad4dH;mb9C8#S@&!w-Pkbn zqe~9ckKlD35y?%ZV+s!> zwyB=<6;90wW<&5ko(7^$eye#6Sza;C7^@zIc0Qj+Xiw)j&CTX=2<=P$pN94zI=k-9 zSsZY>yC-dTtyZk7{TMzY^c=&>iHzr5CnR{@(|yjgLn5Ia>-)PNWblb*Gw07tdUHOH za<>HDzNqn&sJC?LhlX+sU6Jc~lTM4lCmHu@g%+ zLm+E4W1RXh97fRD3g#_-EeqXwNaqU%gglFy$kC2X=W*8jy{{j}HT q>wh!mQVRhgAOwVf5D)@FKnMr{As_^VfDjM@LO=)z0U_`|68HwP&aQ|6 literal 0 HcmV?d00001 diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..f93315e --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,11 @@ +# App +config/database.php +config/settings.yml +plugins/debug_kit/ +plugins/migrations/ +vendors/simpletest/ +views/themed/ +webroot/uploads/ + +# Cake cache +tmp/ \ No newline at end of file diff --git a/app/.gitmodules b/app/.gitmodules new file mode 100644 index 0000000..d148823 --- /dev/null +++ b/app/.gitmodules @@ -0,0 +1,3 @@ +[submodule "locale"] + path = locale + url = git://github.com/croogo/locale.git diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..0ed8662 --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,5 @@ + + RewriteEngine on + RewriteRule ^$ webroot/ [L] + RewriteRule (.*) webroot/$1 [L] + \ No newline at end of file diff --git a/app/LICENSE.txt b/app/LICENSE.txt new file mode 100644 index 0000000..213198a --- /dev/null +++ b/app/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License + +Croogo : A CakePHP powered Content Management System (http://www.croogo.org) +Copyright 2011, Fahad Ibnay Heylaal + +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. \ No newline at end of file diff --git a/app/PERSONALIZADO/config/.svn/entries b/app/PERSONALIZADO/config/.svn/entries new file mode 100644 index 0000000..50583b9 --- /dev/null +++ b/app/PERSONALIZADO/config/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/PERSONALIZADO/config +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T12:07:14.049366Z +5 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +croogo_routes.php +file + + + + +2010-11-06T02:08:10.968750Z +ce3adf46be1648bce6a408110e208c97 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4516 + +settings.yml +file + + + + +2010-11-18T12:06:18.046875Z +864f9f579f9eff57246635e5ea9b2ddd +2010-11-18T12:07:14.049366Z +5 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +985 + +database-local.php +file + + + + +2010-10-23T04:38:57.437500Z +f86737cc271652fd71664c6e4034bd06 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3431 + +database.php +file + + + + +2010-10-28T19:42:15.312500Z +cab2f9be4203ec3ab18e61b62273c10a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3781 + diff --git a/app/PERSONALIZADO/config/.svn/text-base/croogo_routes.php.svn-base b/app/PERSONALIZADO/config/.svn/text-base/croogo_routes.php.svn-base new file mode 100644 index 0000000..190128f --- /dev/null +++ b/app/PERSONALIZADO/config/.svn/text-base/croogo_routes.php.svn-base @@ -0,0 +1,106 @@ + 'install' ,'controller' => 'install')); + } + + // Basic + //CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'principal')); + + CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/promoted/*', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/admin', array('admin' => true, 'controller' => 'settings', 'action' => 'dashboard')); + CroogoRouter::connect('/search/*', array('controller' => 'nodes', 'action' => 'search')); + + // Blog + CroogoRouter::connect('/blog', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + CroogoRouter::connect('/blog/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + //CroogoRouter::connect('/blog/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + CroogoRouter::connect('/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + //CroogoRouter::connect('/blog/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + CroogoRouter::connect('/categoria/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + + // Node + CroogoRouter::connect('/node', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node')); + CroogoRouter::connect('/node/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'node')); + + // Page + CroogoRouter::connect('/about', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page', 'slug' => 'about')); + CroogoRouter::connect('/page/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page')); + + // Users + CroogoRouter::connect('/register', array('controller' => 'users', 'action' => 'add')); + CroogoRouter::connect('/user/:username', array('controller' => 'users', 'action' => 'view'), array('pass' => array('username'))); + + // Contact + CroogoRouter::connect('/contact', array('controller' => 'contacts', 'action' => 'view', 'contact')); + CroogoRouter::connect('/contato', array('controller' => 'contacts', 'action' => 'view', 'contact')); + + + + + CroogoRouter::connect('/conta-premium.html', array( 'controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + CroogoRouter::connect('/conta-premium', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + + + + /** + * frete + */ + CroogoRouter::connect('/calculo-frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + //CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Link demo calculo frete da estrutura + * WordPress + */ + CroogoRouter::connect('/calculo/frete.html', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Corrige links de versões antigas como a estrutura + * WordPress + */ + CroogoRouter::connect('/calcular-frete/*', array( 'controller' => 'urls', 'action' => 'url' ) ); + + // Botao calculo frete antigo + CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + + /** + * BOTOES + * no WordPress existia uma estrutura na raiz + * onde havia o diretório botoes na raiz + */ + CroogoRouter::connect( '/botoes/*', array( 'controller' => 'urls', 'action' => 'botoes' ) ); + + + /** + * Rastreamento + * Corrige links de versões antigas como a estrutura + * WordPress + */ + //CroogoRouter::connect( '/rastreamento/rastrear-pedido.html', array( 'controller' => 'codigos', 'action' => 'add' ) ); + + + + + /** + * API Rest + */ + //Router::mapResources( 'Produtos', array('prefix' => '/api/') ); + Router::mapResources( 'Produtos' ); + Router::mapResources( 'Codigos' ); + Router::mapResources( 'Avisos' ); + Router::parseExtensions( 'xml', 'html', 'pdf' ); + + + +?> \ No newline at end of file diff --git a/app/PERSONALIZADO/config/.svn/text-base/database-local.php.svn-base b/app/PERSONALIZADO/config/.svn/text-base/database-local.php.svn-base new file mode 100644 index 0000000..664a319 --- /dev/null +++ b/app/PERSONALIZADO/config/.svn/text-base/database-local.php.svn-base @@ -0,0 +1,111 @@ + The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * odbc - ODBC DBO driver + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Uses database default. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'root', + 'password' => '', + 'database' => 'rastreado', + 'prefix' => '', + 'encoding' => 'UTF8', + 'port' => '', + ); + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + 'encoding' => 'UTF8', + ); + + + + var $frete = array( + 'datasource' => 'frete', + ); + +} +?> diff --git a/app/PERSONALIZADO/config/.svn/text-base/database.php.svn-base b/app/PERSONALIZADO/config/.svn/text-base/database.php.svn-base new file mode 100644 index 0000000..43d02fc --- /dev/null +++ b/app/PERSONALIZADO/config/.svn/text-base/database.php.svn-base @@ -0,0 +1,116 @@ + The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * odbc - ODBC DBO driver + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Uses database default. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'vibemidi_adm', + 'password' => '25000130', + 'database' => 'vibemidi_rastreado', + 'prefix' => '', + 'encoding' => 'UTF8', + ); + + //imap email connection + public $emailConnection = array( + 'datasource' => 'imap', + 'host' => 'imap.gmail.com', + 'connect' => 'imap/notls', + 'login' => 'johnhenrique@gmail.com', + 'password' => 'carambajohn', + 'mailbox' => 'INBOX', + 'port' => '993' + //'port' => '143' + ); + + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + 'encoding' => 'UTF8', + ); +} +?> diff --git a/app/PERSONALIZADO/config/.svn/text-base/settings.yml.svn-base b/app/PERSONALIZADO/config/.svn/text-base/settings.yml.svn-base new file mode 100644 index 0000000..3d52911 --- /dev/null +++ b/app/PERSONALIZADO/config/.svn/text-base/settings.yml.svn-base @@ -0,0 +1,31 @@ +--- +Comment.date_time_format: M d, Y +Comment.feed_limit: 10 +Comment.level: 1 +Hook.bootstraps: +Hook.components: +Hook.helpers: Tinymce.TinymceHook +Hook.routes: +Meta.description: > + Botão para cálculo automático de frete, rastreamento de + pedidos via email, templates para anuncio no mercado livre +Meta.generator: 'Croogo - Content Management System' +Meta.keywords: > + botão de cálculo, frete, cálculo de frete, calculo frete, + rastreamento, geara, alfândega +Meta.robots: index, follow +Reading.date_time_format: D, M d Y H:i:s +Reading.nodes_per_page: 5 +Service.akismet_key: your-key +Service.akismet_url: http://your-blog.com +Service.recaptcha_private_key: your-private-key +Service.recaptcha_public_key: your-public-key +Site.email: john@midianegocios.com.br +Site.feed_url: +Site.locale: por +Site.status: 1 +Site.tagline: Serviços de rastreamento de encomendas e cálculo de frete. +Site.theme: rastreamento +Site.timezone: 0 +Site.title: Rastreamento +Writing.wysiwyg: 1 diff --git a/app/PERSONALIZADO/config/croogo_routes.php b/app/PERSONALIZADO/config/croogo_routes.php new file mode 100644 index 0000000..190128f --- /dev/null +++ b/app/PERSONALIZADO/config/croogo_routes.php @@ -0,0 +1,106 @@ + 'install' ,'controller' => 'install')); + } + + // Basic + //CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'principal')); + + CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/promoted/*', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/admin', array('admin' => true, 'controller' => 'settings', 'action' => 'dashboard')); + CroogoRouter::connect('/search/*', array('controller' => 'nodes', 'action' => 'search')); + + // Blog + CroogoRouter::connect('/blog', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + CroogoRouter::connect('/blog/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + //CroogoRouter::connect('/blog/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + CroogoRouter::connect('/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + //CroogoRouter::connect('/blog/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + CroogoRouter::connect('/categoria/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + + // Node + CroogoRouter::connect('/node', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node')); + CroogoRouter::connect('/node/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'node')); + + // Page + CroogoRouter::connect('/about', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page', 'slug' => 'about')); + CroogoRouter::connect('/page/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page')); + + // Users + CroogoRouter::connect('/register', array('controller' => 'users', 'action' => 'add')); + CroogoRouter::connect('/user/:username', array('controller' => 'users', 'action' => 'view'), array('pass' => array('username'))); + + // Contact + CroogoRouter::connect('/contact', array('controller' => 'contacts', 'action' => 'view', 'contact')); + CroogoRouter::connect('/contato', array('controller' => 'contacts', 'action' => 'view', 'contact')); + + + + + CroogoRouter::connect('/conta-premium.html', array( 'controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + CroogoRouter::connect('/conta-premium', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + + + + /** + * frete + */ + CroogoRouter::connect('/calculo-frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + //CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Link demo calculo frete da estrutura + * WordPress + */ + CroogoRouter::connect('/calculo/frete.html', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Corrige links de versões antigas como a estrutura + * WordPress + */ + CroogoRouter::connect('/calcular-frete/*', array( 'controller' => 'urls', 'action' => 'url' ) ); + + // Botao calculo frete antigo + CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + + /** + * BOTOES + * no WordPress existia uma estrutura na raiz + * onde havia o diretório botoes na raiz + */ + CroogoRouter::connect( '/botoes/*', array( 'controller' => 'urls', 'action' => 'botoes' ) ); + + + /** + * Rastreamento + * Corrige links de versões antigas como a estrutura + * WordPress + */ + //CroogoRouter::connect( '/rastreamento/rastrear-pedido.html', array( 'controller' => 'codigos', 'action' => 'add' ) ); + + + + + /** + * API Rest + */ + //Router::mapResources( 'Produtos', array('prefix' => '/api/') ); + Router::mapResources( 'Produtos' ); + Router::mapResources( 'Codigos' ); + Router::mapResources( 'Avisos' ); + Router::parseExtensions( 'xml', 'html', 'pdf' ); + + + +?> \ No newline at end of file diff --git a/app/PERSONALIZADO/config/database-local.php b/app/PERSONALIZADO/config/database-local.php new file mode 100644 index 0000000..664a319 --- /dev/null +++ b/app/PERSONALIZADO/config/database-local.php @@ -0,0 +1,111 @@ + The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * odbc - ODBC DBO driver + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Uses database default. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'root', + 'password' => '', + 'database' => 'rastreado', + 'prefix' => '', + 'encoding' => 'UTF8', + 'port' => '', + ); + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + 'encoding' => 'UTF8', + ); + + + + var $frete = array( + 'datasource' => 'frete', + ); + +} +?> diff --git a/app/PERSONALIZADO/config/database.php b/app/PERSONALIZADO/config/database.php new file mode 100644 index 0000000..43d02fc --- /dev/null +++ b/app/PERSONALIZADO/config/database.php @@ -0,0 +1,116 @@ + The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * odbc - ODBC DBO driver + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Uses database default. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'vibemidi_adm', + 'password' => '25000130', + 'database' => 'vibemidi_rastreado', + 'prefix' => '', + 'encoding' => 'UTF8', + ); + + //imap email connection + public $emailConnection = array( + 'datasource' => 'imap', + 'host' => 'imap.gmail.com', + 'connect' => 'imap/notls', + 'login' => 'johnhenrique@gmail.com', + 'password' => 'carambajohn', + 'mailbox' => 'INBOX', + 'port' => '993' + //'port' => '143' + ); + + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + 'encoding' => 'UTF8', + ); +} +?> diff --git a/app/PERSONALIZADO/config/settings.yml b/app/PERSONALIZADO/config/settings.yml new file mode 100644 index 0000000..3d52911 --- /dev/null +++ b/app/PERSONALIZADO/config/settings.yml @@ -0,0 +1,31 @@ +--- +Comment.date_time_format: M d, Y +Comment.feed_limit: 10 +Comment.level: 1 +Hook.bootstraps: +Hook.components: +Hook.helpers: Tinymce.TinymceHook +Hook.routes: +Meta.description: > + Botão para cálculo automático de frete, rastreamento de + pedidos via email, templates para anuncio no mercado livre +Meta.generator: 'Croogo - Content Management System' +Meta.keywords: > + botão de cálculo, frete, cálculo de frete, calculo frete, + rastreamento, geara, alfândega +Meta.robots: index, follow +Reading.date_time_format: D, M d Y H:i:s +Reading.nodes_per_page: 5 +Service.akismet_key: your-key +Service.akismet_url: http://your-blog.com +Service.recaptcha_private_key: your-private-key +Service.recaptcha_public_key: your-public-key +Site.email: john@midianegocios.com.br +Site.feed_url: +Site.locale: por +Site.status: 1 +Site.tagline: Serviços de rastreamento de encomendas e cálculo de frete. +Site.theme: rastreamento +Site.timezone: 0 +Site.title: Rastreamento +Writing.wysiwyg: 1 diff --git a/app/PERSONALIZADO/views/.svn/entries b/app/PERSONALIZADO/views/.svn/entries new file mode 100644 index 0000000..b24a069 --- /dev/null +++ b/app/PERSONALIZADO/views/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/PERSONALIZADO/views +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +elements +dir + diff --git a/app/PERSONALIZADO/views/elements/.svn/entries b/app/PERSONALIZADO/views/elements/.svn/entries new file mode 100644 index 0000000..9a64384 --- /dev/null +++ b/app/PERSONALIZADO/views/elements/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/PERSONALIZADO/views/elements +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin +dir + diff --git a/app/PERSONALIZADO/views/elements/admin/.svn/entries b/app/PERSONALIZADO/views/elements/admin/.svn/entries new file mode 100644 index 0000000..571c081 --- /dev/null +++ b/app/PERSONALIZADO/views/elements/admin/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/PERSONALIZADO/views/elements/admin +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +navigation.ctp +file + + + + +2010-11-16T13:39:31.750000Z +b075fa652a172fa2c790757c478784d6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +13208 + diff --git a/app/PERSONALIZADO/views/elements/admin/.svn/text-base/navigation.ctp.svn-base b/app/PERSONALIZADO/views/elements/admin/.svn/text-base/navigation.ctp.svn-base new file mode 100644 index 0000000..9ea4e5f --- /dev/null +++ b/app/PERSONALIZADO/views/elements/admin/.svn/text-base/navigation.ctp.svn-base @@ -0,0 +1,182 @@ +Session->read( 'Auth.User' ); + +?> + + \ No newline at end of file diff --git a/app/PERSONALIZADO/views/elements/admin/navigation.ctp b/app/PERSONALIZADO/views/elements/admin/navigation.ctp new file mode 100644 index 0000000..faafb4c --- /dev/null +++ b/app/PERSONALIZADO/views/elements/admin/navigation.ctp @@ -0,0 +1,179 @@ +Session->read( 'Auth.User' ); + +?> + + \ No newline at end of file diff --git a/app/README.mdown b/app/README.mdown new file mode 100644 index 0000000..dce7080 --- /dev/null +++ b/app/README.mdown @@ -0,0 +1,42 @@ +# Croogo + +**Croogo** is a free, open source, content management system for PHP, released under [MIT License](http://github.com/croogo/croogo/blob/master/LICENSE.txt). + +It is powered by [CakePHP](http://cakephp.org) MVC framework. + +## Requirements + * Apache with mod_rewrite + * PHP 5.2 or higher + * MySQL 4.1 or higher + +## Installation + +#### Web based installer + + * Extract the archive. Upload the content to your server. + * visit http://your-site.com/ from your browser and follow the instructions. + +#### Manual installation + + * Extract the archive. Upload the content to your server. + * Create a new MySQL database ('utf8_unicode_ci' collation), and use these two SQL dump files in given order: + * app/config/schema/sql/croogo.sql + * app/config/schema/sql/croogo_data.sql + * Rename: + * app/config/database.php.install to database.php, and edit the details. + * app/config/settings.yml.install to settings.yml + * You can access your admin panel at http://your-site.com/admin. Login details below: + * username: admin + * password: password + +It is recommended that you install Croogo using the web based installer for security reasons. + +## Links + + * **Official website**: [http://croogo.org](http://croogo.org) + * **Blog**: [http://fahad19.com/blog/term/croogo](http://fahad19.com/blog/term/croogo) + * **Downloads**: [http://github.com/croogo/croogo/downloads](http://github.com/croogo/croogo/downloads) + * **Issue Tracker**: [http://croogo.lighthouseapp.com](http://croogo.lighthouseapp.com) + * **Wiki**: [http://croogo.org/wiki/](http://croogo.org/wiki/) + * **Google Group**: [http://groups.google.com/group/croogo](http://groups.google.com/group/croogo) + * **IRC Channel**: #croogo on irc.freenode.net \ No newline at end of file diff --git a/app/VERSION.txt b/app/VERSION.txt new file mode 100644 index 0000000..785cda8 --- /dev/null +++ b/app/VERSION.txt @@ -0,0 +1 @@ +1.3.3 \ No newline at end of file diff --git a/app/app_controller.php b/app/app_controller.php new file mode 100644 index 0000000..3b49218 --- /dev/null +++ b/app/app_controller.php @@ -0,0 +1,143 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AppController extends Controller { +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Croogo', + 'Security', + 'Acl', + 'Auth', + 'Acl.AclFilter', + 'Session', + 'RequestHandler', + ); +/** + * Helpers + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Form', + 'Session', + 'Text', + 'Js', + 'Time', + 'Layout', + 'Custom', + ); +/** + * Models + * + * @var array + * @access public + */ + public $uses = array( + 'Block', + 'Link', + 'Setting', + 'Node', + ); +/** + * Cache pagination results + * + * @var boolean + * @access public + */ + public $usePaginationCache = true; +/** + * View + * + * @var string + * @access public + */ + public $view = 'Theme'; +/** + * Theme + * + * @var string + * @access public + */ + public $theme; +/** + * Constructor + * + * @access public + */ + public function __construct() { + Croogo::applyHookProperties('Hook.controller_properties'); + parent::__construct(); + if ($this->name == 'CakeError') { + $this->_set(Router::getPaths()); + $this->params = Router::getParams(); + $this->constructClasses(); + $this->Component->initialize($this); + $this->beforeFilter(); + $this->Component->triggerCallback('startup', $this); + } + } +/** + * beforeFilter + * + * @return void + */ + public function beforeFilter() { + $this->AclFilter->auth(); + $this->RequestHandler->setContent('json', 'text/x-json'); + $this->Security->blackHoleCallback = '__securityError'; + + if (isset($this->params['admin']) && $this->name != 'CakeError') { + $this->layout = 'admin'; + } + + if ($this->RequestHandler->isAjax()) { + $this->layout = 'ajax'; + } + + if (Configure::read('Site.theme') && !isset($this->params['admin'])) { + $this->theme = Configure::read('Site.theme'); + } elseif (Configure::read('Site.admin_theme') && isset($this->params['admin'])) { + $this->theme = Configure::read('Site.admin_theme'); + } + + if (!isset($this->params['admin']) && + Configure::read('Site.status') == 0) { + $this->layout = 'maintenance'; + $this->set('title_for_layout', __('Site down for maintenance', true)); + $this->render('../elements/blank'); + } + + if (isset($this->params['locale'])) { + Configure::write('Config.language', $this->params['locale']); + } + } +/** + * blackHoleCallback for SecurityComponent + * + * @return void + */ + public function __securityError() { + $this->cakeError('securityError'); + } + +} +?> \ No newline at end of file diff --git a/app/app_error.php b/app/app_error.php new file mode 100644 index 0000000..f9ceb84 --- /dev/null +++ b/app/app_error.php @@ -0,0 +1,26 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AppError extends ErrorHandler { +/** + * securityError + * + * @return void + */ + public function securityError() { + $this->controller->set(array( + 'referer' => $this->controller->referer(), + )); + $this->_outputMessage('security'); + } +} +?> \ No newline at end of file diff --git a/app/app_helper.php b/app/app_helper.php new file mode 100644 index 0000000..5f87053 --- /dev/null +++ b/app/app_helper.php @@ -0,0 +1,33 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AppHelper extends Helper { + +/** + * Url helper function + * + * @param string $url + * @param bool $full + * @return mixed + * @access public + */ + public function url($url = null, $full = false) { + if (!isset($url['locale']) && isset($this->params['locale'])) { + $url['locale'] = $this->params['locale']; + } + return parent::url($url, $full); + } +} +?> \ No newline at end of file diff --git a/app/app_model.php b/app/app_model.php new file mode 100644 index 0000000..e3f4de0 --- /dev/null +++ b/app/app_model.php @@ -0,0 +1,121 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AppModel extends Model { +/** + * use Caching + * + * @var string + */ + public $useCache = true; +/** + * Constructor + * + * @param mixed $id Set this ID for this model on startup, can also be an array of options, see above. + * @param string $table Name of database table to use. + * @param string $ds DataSource connection name. + */ + public function __construct($id = false, $table = null, $ds = null) { + Croogo::applyHookProperties('Hook.model_properties'); + parent::__construct($id, $table, $ds); + } +/** + * Override find function to use caching + * + * Caching can be done either by unique names, + * or prefixes where a hashed value of $options array is appended to the name + * + * @param mixed $type + * @param array $options + * @return mixed + * @access public + */ + public function find($type, $options = array()) { + if ($this->useCache) { + $cachedResults = $this->_findCached($type, $options); + if ($cachedResults) { + return $cachedResults; + } + } + + $args = func_get_args(); + $results = call_user_func_array(array('parent', 'find'), $args); + if ($this->useCache) { + if (isset($options['cache']['name']) && isset($options['cache']['config'])) { + $cacheName = $options['cache']['name']; + } elseif (isset($options['cache']['prefix']) && isset($options['cache']['config'])) { + $cacheName = $options['cache']['prefix'] . md5(serialize($options)); + } + + if (isset($cacheName)) { + $cacheName .= '_' . Configure::read('Config.language'); + Cache::write($cacheName, $results, $options['cache']['config']); + } + } + return $results; + } +/** + * Check if find() was already cached + * + * @param mixed $type + * @param array $options + * @return void + * @access private + */ + function _findCached($type, $options) { + if (isset($options['cache']['name']) && isset($options['cache']['config'])) { + $cacheName = $options['cache']['name']; + } elseif (isset($options['cache']['prefix']) && isset($options['cache']['config'])) { + $cacheName = $options['cache']['prefix'] . md5(serialize($options)); + } else { + return false; + } + + $cacheName .= '_' . Configure::read('Config.language'); + $results = Cache::read($cacheName, $options['cache']['config']); + if ($results) { + return $results; + } + return false; + } +/** + * Updates multiple model records based on a set of conditions. + * + * call afterSave() callback after successful update. + * + * @param array $fields Set of fields and values, indexed by fields. + * Fields are treated as SQL snippets, to insert literal values manually escape your data. + * @param mixed $conditions Conditions to match, true for all records + * @return boolean True on success, false on failure + * @access public + */ + public function updateAll($fields, $conditions = true) { + $args = func_get_args(); + $output = call_user_func_array(array('parent', 'updateAll'), $args); + if ($output) { + $created = false; + $options = array(); + $this->Behaviors->trigger($this, 'afterSave', array( + $created, + $options, + )); + $this->afterSave($created); + $this->_clearCache(); + return true; + } + return false; + } +} +?> \ No newline at end of file diff --git a/app/config/acl.ini.php b/app/config/acl.ini.php new file mode 100644 index 0000000..94a9a9a --- /dev/null +++ b/app/config/acl.ini.php @@ -0,0 +1,74 @@ +; +; SVN FILE: $Id: acl.ini.php 7945 2008-12-19 02:16:01Z gwoo $ +;/** +; * Short description for file. +; * +; * +; * PHP versions 4 and 5 +; * +; * CakePHP(tm) : Rapid Development Framework http://www.cakephp.org/ +; * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) +; * +; * Licensed under The MIT License +; * Redistributions of files must retain the above copyright notice. +; * +; * @filesource +; * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) +; * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project +; * @package cake +; * @subpackage cake.app.config +; * @since CakePHP(tm) v 0.10.0.1076 +; * @version $Revision: 7945 $ +; * @modifiedby $LastChangedBy: gwoo $ +; * @lastmodified $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $ +; * @license http://www.opensource.org/licenses/mit-license.php The MIT License +; */ + +; acl.ini.php - Cake ACL Configuration +; --------------------------------------------------------------------- +; Use this file to specify user permissions. +; aco = access control object (something in your application) +; aro = access request object (something requesting access) +; +; User records are added as follows: +; +; [uid] +; groups = group1, group2, group3 +; allow = aco1, aco2, aco3 +; deny = aco4, aco5, aco6 +; +; Group records are added in a similar manner: +; +; [gid] +; allow = aco1, aco2, aco3 +; deny = aco4, aco5, aco6 +; +; The allow, deny, and groups sections are all optional. +; NOTE: groups names *cannot* ever be the same as usernames! +; +; ACL permissions are checked in the following order: +; 1. Check for user denies (and DENY if specified) +; 2. Check for user allows (and ALLOW if specified) +; 3. Gather user's groups +; 4. Check group denies (and DENY if specified) +; 5. Check group allows (and ALLOW if specified) +; 6. If no aro, aco, or group information is found, DENY +; +; --------------------------------------------------------------------- + +;------------------------------------- +;Users +;------------------------------------- + +[username-goes-here] +groups = group1, group2 +deny = aco1, aco2 +allow = aco3, aco4 + +;------------------------------------- +;Groups +;------------------------------------- + +[groupname-goes-here] +deny = aco5, aco6 +allow = aco7, aco8 \ No newline at end of file diff --git a/app/config/bootstrap.php b/app/config/bootstrap.php new file mode 100644 index 0000000..3014870 --- /dev/null +++ b/app/config/bootstrap.php @@ -0,0 +1,53 @@ + array('/full/path/to/plugins/', '/next/full/path/to/plugins/'), + * 'models' => array('/full/path/to/models/', '/next/full/path/to/models/'), + * 'views' => array('/full/path/to/views/', '/next/full/path/to/views/'), + * 'controllers' => array('/full/path/to/controllers/', '/next/full/path/to/controllers/'), + * 'datasources' => array('/full/path/to/datasources/', '/next/full/path/to/datasources/'), + * 'behaviors' => array('/full/path/to/behaviors/', '/next/full/path/to/behaviors/'), + * 'components' => array('/full/path/to/components/', '/next/full/path/to/components/'), + * 'helpers' => array('/full/path/to/helpers/', '/next/full/path/to/helpers/'), + * 'vendors' => array('/full/path/to/vendors/', '/next/full/path/to/vendors/'), + * 'shells' => array('/full/path/to/shells/', '/next/full/path/to/shells/'), + * 'locales' => array('/full/path/to/locale/', '/next/full/path/to/locale/') + * )); + * + */ + +/** + * As of 1.3, additional rules for the inflector are added below + * + * Inflector::rules('singular', array('rules' => array(), 'irregular' => array(), 'uninflected' => array())); + * Inflector::rules('plural', array('rules' => array(), 'irregular' => array(), 'uninflected' => array())); + * + */ + App::import('Lib', 'Croogo'); + require_once CONFIGS.'croogo_bootstrap.php'; +?> \ No newline at end of file diff --git a/app/config/core.php b/app/config/core.php new file mode 100644 index 0000000..4e381e3 --- /dev/null +++ b/app/config/core.php @@ -0,0 +1,298 @@ + admin_index() and /admin/controller/index + * 'superuser' -> superuser_index() and /superuser/controller/index + * + * [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead] + */ + //Configure::write('Routing.admin', 'admin'); + +/** + * Uncomment the define below to use CakePHP prefix routes. + * + * Set to an array of prefixes you want to use in your application. Use for + * admin or other prefixed routes. + * + * Routing.prefixes = array('admin', 'manager'); + * + * Enables: + * `admin_index()` and `/admin/controller/index` + * `manager_index()` and `/manager/controller/index` + */ + Configure::write('Routing.prefixes', array('admin')); + +/** + * Turn off all caching application-wide. + * + */ + //Configure::write('Cache.disable', true); + +/** + * Enable cache checking. + * + * If set to true, for view caching you must still use the controller + * var $cacheAction inside your controllers to define caching settings. + * You can either set it controller-wide by setting var $cacheAction = true, + * or in each action using $this->cacheAction = true. + * + */ + //Configure::write('Cache.check', true); + +/** + * Defines the default error type when using the log() function. Used for + * differentiating error logging and debugging. Currently PHP supports LOG_DEBUG. + */ + define('LOG_ERROR', 2); + +/** + * The preferred session handling method. Valid values: + * + * 'php' Uses settings defined in your php.ini. + * 'cake' Saves session files in CakePHP's /tmp directory. + * 'database' Uses CakePHP's database sessions. + * + * To define a custom session handler, save it at /app/config/.php. + * Set the value of 'Session.save' to to utilize it in CakePHP. + * + * To use database sessions, run the app/config/schema/sessions.php schema using + * the cake shell command: cake schema run create Sessions + * + */ + Configure::write('Session.save', 'php'); + +/** + * The model name to be used for the session model. + * + * 'Session.save' must be set to 'database' in order to utilize this constant. + * + * The model name set here should *not* be used elsewhere in your application. + */ + //Configure::write('Session.model', 'Session'); + +/** + * The name of the table used to store CakePHP database sessions. + * + * 'Session.save' must be set to 'database' in order to utilize this constant. + * + * The table name set here should *not* include any table prefix defined elsewhere. + * + * Please note that if you set a value for Session.model (above), any value set for + * Session.table will be ignored. + * + * [Note: Session.table is deprecated as of CakePHP 1.3] + */ + //Configure::write('Session.table', 'cake_sessions'); + +/** + * The DATABASE_CONFIG::$var to use for database session handling. + * + * 'Session.save' must be set to 'database' in order to utilize this constant. + */ + //Configure::write('Session.database', 'default'); + +/** + * The name of CakePHP's session cookie. + */ + Configure::write('Session.cookie', 'CAKEPHP'); + +/** + * Session time out time (in seconds). + * Actual value depends on 'Security.level' setting. + */ + Configure::write('Session.timeout', '120'); + +/** + * If set to false, sessions are not automatically started. + */ + Configure::write('Session.start', true); + +/** + * When set to false, HTTP_USER_AGENT will not be checked + * in the session + */ + Configure::write('Session.checkAgent', true); + +/** + * The level of CakePHP security. The session timeout time defined + * in 'Session.timeout' is multiplied according to the settings here. + * Valid values: + * + * 'high' Session timeout in 'Session.timeout' x 10 + * 'medium' Session timeout in 'Session.timeout' x 100 + * 'low' Session timeout in 'Session.timeout' x 300 + * + * CakePHP session IDs are also regenerated between requests if + * 'Security.level' is set to 'high'. + */ + Configure::write('Security.level', 'medium'); + +/** + * A random string used in security hashing methods. + */ + Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi19'); + +/** + * A random numeric string (digits only) used to encrypt/decrypt strings. + */ + Configure::write('Security.cipherSeed', '7685930965745354249674968364519'); + +/** + * Compress CSS output by removing comments, whitespace, repeating tags, etc. + * This requires a/var/cache directory to be writable by the web server for caching. + * and /vendors/csspp/csspp.php + * + * To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css(). + */ + //Configure::write('Asset.filter.css', 'css.php'); + +/** + * Plug in your own custom JavaScript compressor by dropping a script in your webroot to handle the + * output, and setting the config below to the name of the script. + * + * To use, prefix your JavaScript link URLs with '/cjs/' instead of '/js/' or use JavaScriptHelper::link(). + */ + //Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php'); + +/** + * The classname and database used in CakePHP's + * access control lists. + */ + Configure::write('Acl.classname', 'DbAcl'); + Configure::write('Acl.database', 'default'); + +/** + * If you are on PHP 5.3 uncomment this line and correct your server timezone + * to fix the date & time related errors. + */ + //date_default_timezone_set('UTC'); + +/** + * + * Cache Engine Configuration + * Default settings provided below + * + * File storage engine. + * + * Cache::config('default', array( + * 'engine' => 'File', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path + * 'prefix' => 'cake_', //[optional] prefix every cache file with this string + * 'lock' => false, //[optional] use file locking + * 'serialize' => true, [optional] + * )); + * + * + * APC (http://pecl.php.net/package/APC) + * + * Cache::config('default', array( + * 'engine' => 'Apc', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * )); + * + * Xcache (http://xcache.lighttpd.net/) + * + * Cache::config('default', array( + * 'engine' => 'Xcache', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'user' => 'user', //user from xcache.admin.user settings + * 'password' => 'password', //plaintext password (xcache.admin.pass) + * )); + * + * + * Memcache (http://www.danga.com/memcached/) + * + * Cache::config('default', array( + * 'engine' => 'Memcache', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'servers' => array( + * '127.0.0.1:11211' // localhost, default port 11211 + * ), //[optional] + * 'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory) + * )); + * + */ + Cache::config('default', array('engine' => 'File')); +?> \ No newline at end of file diff --git a/app/config/croogo_bootstrap.php b/app/config/croogo_bootstrap.php new file mode 100644 index 0000000..2a0d92b --- /dev/null +++ b/app/config/croogo_bootstrap.php @@ -0,0 +1,74 @@ + '+1 hour', + 'path' => CACHE.'queries', + 'engine' => 'File', + ); + + // models + Cache::config('setting_write_configuration', $cacheConfig); + + // components + Cache::config('croogo_blocks', $cacheConfig); + Cache::config('croogo_menus', $cacheConfig); + Cache::config('croogo_nodes', $cacheConfig); + Cache::config('croogo_types', $cacheConfig); + Cache::config('croogo_vocabularies', $cacheConfig); + + // controllers + Cache::config('nodes_view', $cacheConfig); + Cache::config('nodes_promoted', $cacheConfig); + Cache::config('nodes_term', $cacheConfig); + Cache::config('nodes_index', $cacheConfig); + Cache::config('contacts_view', $cacheConfig); + +/** + * Failed login attempts + * + * Default is 5 failed login attempts in every 5 minutes + */ + Configure::write('User.failed_login_limit', 5); + Configure::write('User.failed_login_duration', 300); + Cache::config('users_login', array_merge($cacheConfig, array( + 'duration' => '+' . Configure::read('User.failed_login_duration') . ' seconds', + ))); + +/** + * Libraries + */ + App::import('Vendor', 'Spyc/Spyc'); + +/** + * Settings + */ + if (file_exists(CONFIGS.'settings.yml')) { + $settings = Spyc::YAMLLoad(file_get_contents(CONFIGS.'settings.yml')); + foreach ($settings AS $settingKey => $settingValue) { + Configure::write($settingKey, $settingValue); + } + } + +/** + * Plugins + */ + $pluginBootstraps = Configure::read('Hook.bootstraps'); + if ($pluginBootstraps) { + $plugins = explode(',', $pluginBootstraps); + foreach ($plugins AS $plugin) { + App::import('Plugin', Inflector::camelize($plugin) . 'Bootstrap'); + } + } +?> \ No newline at end of file diff --git a/app/config/croogo_routes.php b/app/config/croogo_routes.php new file mode 100644 index 0000000..a2f729f --- /dev/null +++ b/app/config/croogo_routes.php @@ -0,0 +1,106 @@ + 'install' ,'controller' => 'install')); + } + + // Basic + //CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'principal')); + + CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/promoted/*', array('controller' => 'nodes', 'action' => 'promoted')); + CroogoRouter::connect('/admin', array('admin' => true, 'controller' => 'settings', 'action' => 'dashboard')); + CroogoRouter::connect('/search/*', array('controller' => 'nodes', 'action' => 'search')); + + // Blog + CroogoRouter::connect('/blog', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + CroogoRouter::connect('/blog/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'blog')); + CroogoRouter::connect('/blog/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + CroogoRouter::connect('/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'blog')); + //CroogoRouter::connect('/blog/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + CroogoRouter::connect('/categoria/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'blog')); + + // Node + CroogoRouter::connect('/node', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/archives/*', array('controller' => 'nodes', 'action' => 'index', 'type' => 'node')); + CroogoRouter::connect('/node/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node')); + CroogoRouter::connect('/node/term/:slug/*', array('controller' => 'nodes', 'action' => 'term', 'type' => 'node')); + + // Page + CroogoRouter::connect('/about', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page', 'slug' => 'about')); + CroogoRouter::connect('/page/:slug', array('controller' => 'nodes', 'action' => 'view', 'type' => 'page')); + + // Users + //CroogoRouter::connect('/register', array('controller' => 'users', 'action' => 'add'));// nao sei porque nao estava funcionando + CroogoRouter::connect('/user/:username', array('controller' => 'users', 'action' => 'view'), array('pass' => array('username'))); + + // Contact + //CroogoRouter::connect('/contact', array('controller' => 'contacts', 'action' => 'view', 'contact'));// nao sei porque nao estava funcionando + //CroogoRouter::connect('/atendimento', array('controller' => 'contacts', 'action' => 'view', 'contact'));// nao sei porque nao estava funcionando + + + + + CroogoRouter::connect('/conta-premium.html', array( 'controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + CroogoRouter::connect('/conta-premium', array('controller' => 'nodes', 'action' => 'view', 'type' => 'node', 'slug' => 'conta-premium' ) ); + + + + /** + * frete + */ + CroogoRouter::connect('/calculo-frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + //CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Link demo calculo frete da estrutura + * WordPress + */ + CroogoRouter::connect('/calculo/frete.html', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + /** + * Corrige links de versões antigas como a estrutura + * WordPress + */ + CroogoRouter::connect('/calcular-frete/*', array( 'controller' => 'urls', 'action' => 'url' ) ); + + // Botao calculo frete antigo + CroogoRouter::connect('/frete/*', array( 'controller' => 'produtos', 'action' => 'frete' ) ); + + + + /** + * BOTOES + * no WordPress existia uma estrutura na raiz + * onde havia o diretório botoes na raiz + */ + CroogoRouter::connect( '/botoes/*', array( 'controller' => 'urls', 'action' => 'botoes' ) ); + + + /** + * Rastreamento + * Corrige links de versões antigas como a estrutura + * WordPress + */ + //CroogoRouter::connect( '/rastreamento/rastrear-pedido.html', array( 'controller' => 'codigos', 'action' => 'add' ) ); + + + + + /** + * API Rest + * nunca usei nao preciso + //Router::mapResources( 'Produtos', array('prefix' => '/api/') ); + Router::mapResources( 'Produtos' ); + Router::mapResources( 'Codigos' ); + Router::mapResources( 'Avisos' ); + Router::parseExtensions( 'xml', 'html', 'pdf' ); + */ + + +?> \ No newline at end of file diff --git a/app/config/database.php.install b/app/config/database.php.install new file mode 100644 index 0000000..ba86bc2 --- /dev/null +++ b/app/config/database.php.install @@ -0,0 +1,104 @@ + The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * odbc - ODBC DBO driver + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Uses database default. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => '{default_driver}', + 'persistent' => false, + 'host' => '{default_host}', + 'login' => '{default_login}', + 'password' => '{default_password}', + 'database' => '{default_database}', + 'prefix' => '{default_prefix}', + 'encoding' => '{default_encoding}', + 'port' => '{default_port}', + ); + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + 'encoding' => 'UTF8', + ); +} +?> diff --git a/app/config/inflections.php b/app/config/inflections.php new file mode 100644 index 0000000..429c085 --- /dev/null +++ b/app/config/inflections.php @@ -0,0 +1,70 @@ + value array of regex used to match words. + * If key matches then the value is returned. + * + * $pluralRules = array('/(s)tatus$/i' => '\1\2tatuses', '/^(ox)$/i' => '\1\2en', '/([m|l])ouse$/i' => '\1ice'); + */ + $pluralRules = array(); +/** + * This is a key only array of plural words that should not be inflected. + * Notice the last comma + * + * $uninflectedPlural = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox'); + */ + $uninflectedPlural = array(); +/** + * This is a key => value array of plural irregular words. + * If key matches then the value is returned. + * + * $irregularPlural = array('atlas' => 'atlases', 'beef' => 'beefs', 'brother' => 'brothers') + */ + $irregularPlural = array(); +/** + * This is a key => value array of regex used to match words. + * If key matches then the value is returned. + * + * $singularRules = array('/(s)tatuses$/i' => '\1\2tatus', '/(matr)ices$/i' =>'\1ix','/(vert|ind)ices$/i') + */ + $singularRules = array(); +/** + * This is a key only array of singular words that should not be inflected. + * You should not have to change this value below if you do change it use same format + * as the $uninflectedPlural above. + */ + $uninflectedSingular = $uninflectedPlural; +/** + * This is a key => value array of singular irregular words. + * Most of the time this will be a reverse of the above $irregularPlural array + * You should not have to change this value below if you do change it use same format + * + * $irregularSingular = array('atlases' => 'atlas', 'beefs' => 'beef', 'brothers' => 'brother') + */ + $irregularSingular = array_flip($irregularPlural); +?> \ No newline at end of file diff --git a/app/config/routes.php b/app/config/routes.php new file mode 100644 index 0000000..ef15c28 --- /dev/null +++ b/app/config/routes.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/app/config/schema/.DS_Store b/app/config/schema/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 '1', + 'parent_id' => '', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'controllers', + 'lft' => '1', + 'rght' => '352' + ), + array( + 'id' => '2', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Attachments', + 'lft' => '2', + 'rght' => '13' + ), + array( + 'id' => '3', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '4', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '7', + 'rght' => '8' + ), + array( + 'id' => '6', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '9', + 'rght' => '10' + ), + array( + 'id' => '7', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '11', + 'rght' => '12' + ), + array( + 'id' => '8', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Blocks', + 'lft' => '14', + 'rght' => '29' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '15', + 'rght' => '16' + ), + array( + 'id' => '10', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '17', + 'rght' => '18' + ), + array( + 'id' => '11', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '19', + 'rght' => '20' + ), + array( + 'id' => '12', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '21', + 'rght' => '22' + ), + array( + 'id' => '13', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '23', + 'rght' => '24' + ), + array( + 'id' => '14', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '25', + 'rght' => '26' + ), + array( + 'id' => '15', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '27', + 'rght' => '28' + ), + array( + 'id' => '16', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Comments', + 'lft' => '30', + 'rght' => '45' + ), + array( + 'id' => '17', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '31', + 'rght' => '32' + ), + array( + 'id' => '18', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '33', + 'rght' => '34' + ), + array( + 'id' => '19', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '35', + 'rght' => '36' + ), + array( + 'id' => '20', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '37', + 'rght' => '38' + ), + array( + 'id' => '21', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '39', + 'rght' => '40' + ), + array( + 'id' => '22', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '41', + 'rght' => '42' + ), + array( + 'id' => '23', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'delete', + 'lft' => '43', + 'rght' => '44' + ), + array( + 'id' => '24', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Contacts', + 'lft' => '46', + 'rght' => '57' + ), + array( + 'id' => '25', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '47', + 'rght' => '48' + ), + array( + 'id' => '26', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '49', + 'rght' => '50' + ), + array( + 'id' => '27', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '51', + 'rght' => '52' + ), + array( + 'id' => '28', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '53', + 'rght' => '54' + ), + array( + 'id' => '29', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '55', + 'rght' => '56' + ), + array( + 'id' => '30', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Filemanager', + 'lft' => '58', + 'rght' => '79' + ), + array( + 'id' => '31', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '59', + 'rght' => '60' + ), + array( + 'id' => '32', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '61', + 'rght' => '62' + ), + array( + 'id' => '33', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editfile', + 'lft' => '63', + 'rght' => '64' + ), + array( + 'id' => '34', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_upload', + 'lft' => '65', + 'rght' => '66' + ), + array( + 'id' => '35', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_file', + 'lft' => '67', + 'rght' => '68' + ), + array( + 'id' => '36', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_directory', + 'lft' => '69', + 'rght' => '70' + ), + array( + 'id' => '37', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_rename', + 'lft' => '71', + 'rght' => '72' + ), + array( + 'id' => '38', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_directory', + 'lft' => '73', + 'rght' => '74' + ), + array( + 'id' => '39', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_file', + 'lft' => '75', + 'rght' => '76' + ), + array( + 'id' => '40', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_chmod', + 'lft' => '77', + 'rght' => '78' + ), + array( + 'id' => '41', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Languages', + 'lft' => '80', + 'rght' => '95' + ), + array( + 'id' => '42', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '81', + 'rght' => '82' + ), + array( + 'id' => '43', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '83', + 'rght' => '84' + ), + array( + 'id' => '44', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '85', + 'rght' => '86' + ), + array( + 'id' => '45', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '87', + 'rght' => '88' + ), + array( + 'id' => '46', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '89', + 'rght' => '90' + ), + array( + 'id' => '47', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '91', + 'rght' => '92' + ), + array( + 'id' => '48', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_select', + 'lft' => '93', + 'rght' => '94' + ), + array( + 'id' => '49', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Links', + 'lft' => '96', + 'rght' => '111' + ), + array( + 'id' => '50', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '97', + 'rght' => '98' + ), + array( + 'id' => '51', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '99', + 'rght' => '100' + ), + array( + 'id' => '52', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '101', + 'rght' => '102' + ), + array( + 'id' => '53', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '103', + 'rght' => '104' + ), + array( + 'id' => '54', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '105', + 'rght' => '106' + ), + array( + 'id' => '55', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '107', + 'rght' => '108' + ), + array( + 'id' => '56', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '109', + 'rght' => '110' + ), + array( + 'id' => '57', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Menus', + 'lft' => '112', + 'rght' => '121' + ), + array( + 'id' => '58', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '113', + 'rght' => '114' + ), + array( + 'id' => '59', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '115', + 'rght' => '116' + ), + array( + 'id' => '60', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '117', + 'rght' => '118' + ), + array( + 'id' => '61', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '119', + 'rght' => '120' + ), + array( + 'id' => '62', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Messages', + 'lft' => '122', + 'rght' => '131' + ), + array( + 'id' => '63', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '123', + 'rght' => '124' + ), + array( + 'id' => '64', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '125', + 'rght' => '126' + ), + array( + 'id' => '65', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '127', + 'rght' => '128' + ), + array( + 'id' => '66', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '129', + 'rght' => '130' + ), + array( + 'id' => '67', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Nodes', + 'lft' => '132', + 'rght' => '161' + ), + array( + 'id' => '68', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '133', + 'rght' => '134' + ), + array( + 'id' => '69', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create', + 'lft' => '135', + 'rght' => '136' + ), + array( + 'id' => '70', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '137', + 'rght' => '138' + ), + array( + 'id' => '71', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '139', + 'rght' => '140' + ), + array( + 'id' => '72', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_update_paths', + 'lft' => '141', + 'rght' => '142' + ), + array( + 'id' => '73', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '143', + 'rght' => '144' + ), + array( + 'id' => '74', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_meta', + 'lft' => '145', + 'rght' => '146' + ), + array( + 'id' => '75', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add_meta', + 'lft' => '147', + 'rght' => '148' + ), + array( + 'id' => '76', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '149', + 'rght' => '150' + ), + array( + 'id' => '77', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '151', + 'rght' => '152' + ), + array( + 'id' => '78', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'term', + 'lft' => '153', + 'rght' => '154' + ), + array( + 'id' => '79', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'promoted', + 'lft' => '155', + 'rght' => '156' + ), + array( + 'id' => '80', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'search', + 'lft' => '157', + 'rght' => '158' + ), + array( + 'id' => '81', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '159', + 'rght' => '160' + ), + array( + 'id' => '82', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Regions', + 'lft' => '162', + 'rght' => '171' + ), + array( + 'id' => '83', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '163', + 'rght' => '164' + ), + array( + 'id' => '84', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '165', + 'rght' => '166' + ), + array( + 'id' => '85', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '167', + 'rght' => '168' + ), + array( + 'id' => '86', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '169', + 'rght' => '170' + ), + array( + 'id' => '87', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Roles', + 'lft' => '172', + 'rght' => '181' + ), + array( + 'id' => '88', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '173', + 'rght' => '174' + ), + array( + 'id' => '89', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '175', + 'rght' => '176' + ), + array( + 'id' => '90', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '177', + 'rght' => '178' + ), + array( + 'id' => '91', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '179', + 'rght' => '180' + ), + array( + 'id' => '92', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Settings', + 'lft' => '182', + 'rght' => '201' + ), + array( + 'id' => '93', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_dashboard', + 'lft' => '183', + 'rght' => '184' + ), + array( + 'id' => '94', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '185', + 'rght' => '186' + ), + array( + 'id' => '95', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_view', + 'lft' => '187', + 'rght' => '188' + ), + array( + 'id' => '96', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '189', + 'rght' => '190' + ), + array( + 'id' => '97', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '191', + 'rght' => '192' + ), + array( + 'id' => '98', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '193', + 'rght' => '194' + ), + array( + 'id' => '99', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_prefix', + 'lft' => '195', + 'rght' => '196' + ), + array( + 'id' => '100', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '197', + 'rght' => '198' + ), + array( + 'id' => '101', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '199', + 'rght' => '200' + ), + array( + 'id' => '102', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Terms', + 'lft' => '202', + 'rght' => '217' + ), + array( + 'id' => '103', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '203', + 'rght' => '204' + ), + array( + 'id' => '104', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '205', + 'rght' => '206' + ), + array( + 'id' => '105', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '207', + 'rght' => '208' + ), + array( + 'id' => '106', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '209', + 'rght' => '210' + ), + array( + 'id' => '107', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '211', + 'rght' => '212' + ), + array( + 'id' => '108', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '213', + 'rght' => '214' + ), + array( + 'id' => '109', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '215', + 'rght' => '216' + ), + array( + 'id' => '110', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Types', + 'lft' => '218', + 'rght' => '227' + ), + array( + 'id' => '111', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '219', + 'rght' => '220' + ), + array( + 'id' => '112', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '221', + 'rght' => '222' + ), + array( + 'id' => '113', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '223', + 'rght' => '224' + ), + array( + 'id' => '114', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '225', + 'rght' => '226' + ), + array( + 'id' => '115', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Users', + 'lft' => '228', + 'rght' => '261' + ), + array( + 'id' => '116', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '229', + 'rght' => '230' + ), + array( + 'id' => '117', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '231', + 'rght' => '232' + ), + array( + 'id' => '118', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '233', + 'rght' => '234' + ), + array( + 'id' => '119', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_reset_password', + 'lft' => '235', + 'rght' => '236' + ), + array( + 'id' => '120', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '237', + 'rght' => '238' + ), + array( + 'id' => '121', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_login', + 'lft' => '239', + 'rght' => '240' + ), + array( + 'id' => '122', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_logout', + 'lft' => '241', + 'rght' => '242' + ), + array( + 'id' => '123', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '243', + 'rght' => '244' + ), + array( + 'id' => '124', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '245', + 'rght' => '246' + ), + array( + 'id' => '125', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'activate', + 'lft' => '247', + 'rght' => '248' + ), + array( + 'id' => '126', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'edit', + 'lft' => '249', + 'rght' => '250' + ), + array( + 'id' => '127', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'forgot', + 'lft' => '251', + 'rght' => '252' + ), + array( + 'id' => '128', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'reset', + 'lft' => '253', + 'rght' => '254' + ), + array( + 'id' => '129', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'login', + 'lft' => '255', + 'rght' => '256' + ), + array( + 'id' => '130', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'logout', + 'lft' => '257', + 'rght' => '258' + ), + array( + 'id' => '131', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '259', + 'rght' => '260' + ), + array( + 'id' => '132', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Vocabularies', + 'lft' => '262', + 'rght' => '271' + ), + array( + 'id' => '133', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '263', + 'rght' => '264' + ), + array( + 'id' => '134', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '265', + 'rght' => '266' + ), + array( + 'id' => '135', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '267', + 'rght' => '268' + ), + array( + 'id' => '136', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '269', + 'rght' => '270' + ), + array( + 'id' => '137', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAcos', + 'lft' => '272', + 'rght' => '281' + ), + array( + 'id' => '138', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '273', + 'rght' => '274' + ), + array( + 'id' => '139', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '275', + 'rght' => '276' + ), + array( + 'id' => '140', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '277', + 'rght' => '278' + ), + array( + 'id' => '141', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '279', + 'rght' => '280' + ), + array( + 'id' => '142', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclActions', + 'lft' => '282', + 'rght' => '295' + ), + array( + 'id' => '143', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '283', + 'rght' => '284' + ), + array( + 'id' => '144', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '285', + 'rght' => '286' + ), + array( + 'id' => '145', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '287', + 'rght' => '288' + ), + array( + 'id' => '146', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '289', + 'rght' => '290' + ), + array( + 'id' => '147', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_move', + 'lft' => '291', + 'rght' => '292' + ), + array( + 'id' => '148', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_generate', + 'lft' => '293', + 'rght' => '294' + ), + array( + 'id' => '149', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAros', + 'lft' => '296', + 'rght' => '305' + ), + array( + 'id' => '150', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '297', + 'rght' => '298' + ), + array( + 'id' => '151', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '299', + 'rght' => '300' + ), + array( + 'id' => '152', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '301', + 'rght' => '302' + ), + array( + 'id' => '153', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '303', + 'rght' => '304' + ), + array( + 'id' => '154', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclPermissions', + 'lft' => '306', + 'rght' => '311' + ), + array( + 'id' => '155', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '307', + 'rght' => '308' + ), + array( + 'id' => '156', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '309', + 'rght' => '310' + ), + array( + 'id' => '159', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsHooks', + 'lft' => '312', + 'rght' => '317' + ), + array( + 'id' => '160', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '313', + 'rght' => '314' + ), + array( + 'id' => '161', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '315', + 'rght' => '316' + ), + array( + 'id' => '162', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsLocales', + 'lft' => '318', + 'rght' => '329' + ), + array( + 'id' => '163', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '319', + 'rght' => '320' + ), + array( + 'id' => '164', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '321', + 'rght' => '322' + ), + array( + 'id' => '165', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '323', + 'rght' => '324' + ), + array( + 'id' => '166', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '325', + 'rght' => '326' + ), + array( + 'id' => '167', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '327', + 'rght' => '328' + ), + array( + 'id' => '168', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsPlugins', + 'lft' => '330', + 'rght' => '337' + ), + array( + 'id' => '169', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '331', + 'rght' => '332' + ), + array( + 'id' => '170', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '333', + 'rght' => '334' + ), + array( + 'id' => '171', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '335', + 'rght' => '336' + ), + array( + 'id' => '172', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsThemes', + 'lft' => '338', + 'rght' => '351' + ), + array( + 'id' => '173', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '339', + 'rght' => '340' + ), + array( + 'id' => '174', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '341', + 'rght' => '342' + ), + array( + 'id' => '175', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '343', + 'rght' => '344' + ), + array( + 'id' => '176', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editor', + 'lft' => '345', + 'rght' => '346' + ), + array( + 'id' => '177', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_save', + 'lft' => '347', + 'rght' => '348' + ), + array( + 'id' => '178', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '349', + 'rght' => '350' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/aro_data.php.svn-base b/app/config/schema/data/.svn/text-base/aro_data.php.svn-base new file mode 100644 index 0000000..06cd495 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/aro_data.php.svn-base @@ -0,0 +1,46 @@ + '1', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '2', + 'alias' => '', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '3', + 'alias' => '', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '', + 'model' => 'User', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '7', + 'rght' => '8' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/aros_aco_data.php.svn-base b/app/config/schema/data/.svn/text-base/aros_aco_data.php.svn-base new file mode 100644 index 0000000..3b2c4e9 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/aros_aco_data.php.svn-base @@ -0,0 +1,253 @@ + '1', + 'aro_id' => '2', + 'aco_id' => '23', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '2', + 'aro_id' => '2', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '3', + 'aro_id' => '2', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '4', + 'aro_id' => '3', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '5', + 'aro_id' => '3', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '6', + 'aro_id' => '2', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '7', + 'aro_id' => '3', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '8', + 'aro_id' => '2', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '9', + 'aro_id' => '2', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '10', + 'aro_id' => '2', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '11', + 'aro_id' => '2', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '12', + 'aro_id' => '2', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '13', + 'aro_id' => '3', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '14', + 'aro_id' => '3', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '15', + 'aro_id' => '3', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '16', + 'aro_id' => '3', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '17', + 'aro_id' => '3', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '18', + 'aro_id' => '2', + 'aco_id' => '123', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '19', + 'aro_id' => '3', + 'aco_id' => '124', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '20', + 'aro_id' => '3', + 'aco_id' => '125', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '21', + 'aro_id' => '2', + 'aco_id' => '126', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '22', + 'aro_id' => '3', + 'aco_id' => '127', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '23', + 'aro_id' => '3', + 'aco_id' => '128', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '24', + 'aro_id' => '3', + 'aco_id' => '129', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '25', + 'aro_id' => '2', + 'aco_id' => '130', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '26', + 'aro_id' => '2', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '27', + 'aro_id' => '3', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/block_data.php.svn-base b/app/config/schema/data/.svn/text-base/block_data.php.svn-base new file mode 100644 index 0000000..7b06c49 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/block_data.php.svn-base @@ -0,0 +1,118 @@ + '3', + 'region_id' => '4', + 'title' => 'About', + 'alias' => 'about', + 'body' => 'This is the content of your block. Can be modified in admin panel.', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '2', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-07-26 17:13:14' + ), + array( + 'id' => '8', + 'region_id' => '4', + 'title' => 'Search', + 'alias' => 'search', + 'body' => '', + 'show_title' => '0', + 'class' => '', + 'status' => '1', + 'weight' => '1', + 'element' => 'search', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-12-20 03:07:27' + ), + array( + 'id' => '5', + 'region_id' => '4', + 'title' => 'Meta', + 'alias' => 'meta', + 'body' => '[menu:meta]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '6', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-22 05:17:39', + 'created' => '2009-09-12 06:36:22' + ), + array( + 'id' => '6', + 'region_id' => '4', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'body' => '[menu:blogroll]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '4', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:33', + 'created' => '2009-09-12 23:33:27' + ), + array( + 'id' => '7', + 'region_id' => '4', + 'title' => 'Categories', + 'alias' => 'categories', + 'body' => '[vocabulary:categories type="blog"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '3', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:36', + 'created' => '2009-10-03 16:52:50' + ), + array( + 'id' => '9', + 'region_id' => '4', + 'title' => 'Recent Posts', + 'alias' => 'recent_posts', + 'body' => '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC" limit="5"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '5', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2010-04-08 21:09:31', + 'created' => '2009-12-22 05:17:32' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/comment_data.php.svn-base b/app/config/schema/data/.svn/text-base/comment_data.php.svn-base new file mode 100644 index 0000000..651ad3e --- /dev/null +++ b/app/config/schema/data/.svn/text-base/comment_data.php.svn-base @@ -0,0 +1,31 @@ + '1', + 'parent_id' => '', + 'node_id' => '1', + 'user_id' => '0', + 'name' => 'Mr Croogo', + 'email' => 'email@example.com', + 'website' => 'http://www.croogo.org', + 'ip' => '127.0.0.1', + 'title' => '', + 'body' => 'Hi, this is the first comment.', + 'rating' => '', + 'status' => '1', + 'notify' => '0', + 'type' => 'blog', + 'comment_type' => 'comment', + 'lft' => '1', + 'rght' => '2', + 'updated' => '2009-12-25 12:00:00', + 'created' => '2009-12-25 12:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/contact_data.php.svn-base b/app/config/schema/data/.svn/text-base/contact_data.php.svn-base new file mode 100644 index 0000000..4f1e85e --- /dev/null +++ b/app/config/schema/data/.svn/text-base/contact_data.php.svn-base @@ -0,0 +1,35 @@ + '1', + 'title' => 'Contact', + 'alias' => 'contact', + 'body' => '', + 'name' => '', + 'position' => '', + 'address' => '', + 'address2' => '', + 'state' => '', + 'country' => '', + 'postcode' => '', + 'phone' => '', + 'fax' => '', + 'email' => 'you@your-site.com', + 'message_status' => '1', + 'message_archive' => '0', + 'message_count' => '0', + 'message_spam_protection' => '0', + 'message_captcha' => '0', + 'message_notify' => '1', + 'status' => '1', + 'updated' => '2009-10-07 22:07:49', + 'created' => '2009-09-16 01:45:17' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/i18n_data.php.svn-base b/app/config/schema/data/.svn/text-base/i18n_data.php.svn-base new file mode 100644 index 0000000..32b8dd8 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/i18n_data.php.svn-base @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/language_data.php.svn-base b/app/config/schema/data/.svn/text-base/language_data.php.svn-base new file mode 100644 index 0000000..7e5fac9 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/language_data.php.svn-base @@ -0,0 +1,20 @@ + '1', + 'title' => 'English', + 'native' => 'English', + 'alias' => 'eng', + 'status' => '1', + 'weight' => '1', + 'updated' => '2009-11-02 21:37:38', + 'created' => '2009-11-02 20:52:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/link_data.php.svn-base b/app/config/schema/data/.svn/text-base/link_data.php.svn-base new file mode 100644 index 0000000..0b375e2 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/link_data.php.svn-base @@ -0,0 +1,214 @@ + '5', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'About', + 'description' => '', + 'link' => 'controller:nodes/action:view/type:page/slug:about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:21', + 'created' => '2009-08-19 12:23:33' + ), + array( + 'id' => '6', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'Contact', + 'description' => '', + 'link' => 'controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:45', + 'created' => '2009-08-19 12:34:56' + ), + array( + 'id' => '7', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Home', + 'description' => '', + 'link' => '/', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 21:17:06', + 'created' => '2009-09-06 21:32:54' + ), + array( + 'id' => '8', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'About', + 'description' => '', + 'link' => '/about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '10', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 03:45:53', + 'created' => '2009-09-06 21:34:57' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'menu_id' => '3', + 'title' => 'Child link', + 'description' => '', + 'link' => '#', + 'target' => '', + 'rel' => '', + 'status' => '0', + 'lft' => '8', + 'rght' => '9', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:13:06', + 'created' => '2009-09-12 03:52:23' + ), + array( + 'id' => '10', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Site Admin', + 'description' => '', + 'link' => '/admin', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 06:34:09', + 'created' => '2009-09-12 06:34:09' + ), + array( + 'id' => '11', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Log out', + 'description' => '', + 'link' => '/users/logout', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '8', + 'visibility_roles' => '["1","2"]', + 'params' => '', + 'updated' => '2009-09-12 06:35:22', + 'created' => '2009-09-12 06:34:41' + ), + array( + 'id' => '12', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'Croogo', + 'description' => '', + 'link' => 'http://www.croogo.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 23:31:59', + 'created' => '2009-09-12 23:31:59' + ), + array( + 'id' => '14', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'CakePHP', + 'description' => '', + 'link' => 'http://www.cakephp.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-07 03:25:25', + 'created' => '2009-09-12 23:38:43' + ), + array( + 'id' => '15', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Contact', + 'description' => '', + 'link' => '/controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '11', + 'rght' => '12', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-16 07:54:13', + 'created' => '2009-09-16 07:53:33' + ), + array( + 'id' => '16', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Entries (RSS)', + 'description' => '', + 'link' => '/nodes/promoted.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:22', + 'created' => '2009-10-27 17:46:22' + ), + array( + 'id' => '17', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Comments (RSS)', + 'description' => '', + 'link' => '/comments.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:54', + 'created' => '2009-10-27 17:46:54' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/menu_data.php.svn-base b/app/config/schema/data/.svn/text-base/menu_data.php.svn-base new file mode 100644 index 0000000..15264f6 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/menu_data.php.svn-base @@ -0,0 +1,58 @@ + '3', + 'title' => 'Main Menu', + 'alias' => 'main', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-08-19 12:21:06', + 'created' => '2009-07-22 01:49:53' + ), + array( + 'id' => '4', + 'title' => 'Footer', + 'alias' => 'footer', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-08-19 12:22:42', + 'created' => '2009-08-19 12:22:42' + ), + array( + 'id' => '5', + 'title' => 'Meta', + 'alias' => 'meta', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-09-12 06:33:29', + 'created' => '2009-09-12 06:33:29' + ), + array( + 'id' => '6', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-09-12 23:30:24', + 'created' => '2009-09-12 23:30:24' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/message_data.php.svn-base b/app/config/schema/data/.svn/text-base/message_data.php.svn-base new file mode 100644 index 0000000..34e388b --- /dev/null +++ b/app/config/schema/data/.svn/text-base/message_data.php.svn-base @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/meta_data.php.svn-base b/app/config/schema/data/.svn/text-base/meta_data.php.svn-base new file mode 100644 index 0000000..9f4eab8 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/meta_data.php.svn-base @@ -0,0 +1,18 @@ + '1', + 'model' => 'Node', + 'foreign_key' => '1', + 'key' => 'meta_keywords', + 'value' => 'key1, key2', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/node_data.php.svn-base b/app/config/schema/data/.svn/text-base/node_data.php.svn-base new file mode 100644 index 0000000..3250088 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/node_data.php.svn-base @@ -0,0 +1,56 @@ + '1', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'Hello World', + 'slug' => 'hello-world', + 'body' => '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '2', + 'comment_count' => '1', + 'promote' => '1', + 'path' => '/blog/hello-world', + 'terms' => '{"1":"uncategorized"}', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'blog', + 'updated' => '2009-12-25 11:00:00', + 'created' => '2009-12-25 11:00:00' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'About', + 'slug' => 'about', + 'body' => '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '0', + 'comment_count' => '0', + 'promote' => '0', + 'path' => '/about', + 'terms' => '', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'page', + 'updated' => '2009-12-25 22:00:00', + 'created' => '2009-12-25 22:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/nodes_taxonomy_data.php.svn-base b/app/config/schema/data/.svn/text-base/nodes_taxonomy_data.php.svn-base new file mode 100644 index 0000000..352db3a --- /dev/null +++ b/app/config/schema/data/.svn/text-base/nodes_taxonomy_data.php.svn-base @@ -0,0 +1,15 @@ + '1', + 'node_id' => '1', + 'taxonomy_id' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/region_data.php.svn-base b/app/config/schema/data/.svn/text-base/region_data.php.svn-base new file mode 100644 index 0000000..2807843 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/region_data.php.svn-base @@ -0,0 +1,108 @@ + '3', + 'title' => 'none', + 'alias' => '', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '4', + 'title' => 'right', + 'alias' => 'right', + 'description' => '', + 'block_count' => '6' + ), + array( + 'id' => '6', + 'title' => 'left', + 'alias' => 'left', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '7', + 'title' => 'header', + 'alias' => 'header', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '8', + 'title' => 'footer', + 'alias' => 'footer', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '9', + 'title' => 'region1', + 'alias' => 'region1', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '10', + 'title' => 'region2', + 'alias' => 'region2', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '11', + 'title' => 'region3', + 'alias' => 'region3', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '12', + 'title' => 'region4', + 'alias' => 'region4', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '13', + 'title' => 'region5', + 'alias' => 'region5', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '14', + 'title' => 'region6', + 'alias' => 'region6', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '15', + 'title' => 'region7', + 'alias' => 'region7', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '16', + 'title' => 'region8', + 'alias' => 'region8', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '17', + 'title' => 'region9', + 'alias' => 'region9', + 'description' => '', + 'block_count' => '0' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/role_data.php.svn-base b/app/config/schema/data/.svn/text-base/role_data.php.svn-base new file mode 100644 index 0000000..d491812 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/role_data.php.svn-base @@ -0,0 +1,31 @@ + '1', + 'title' => 'Admin', + 'alias' => 'admin', + 'created' => '2009-04-05 00:10:34', + 'updated' => '2009-04-05 00:10:34' + ), + array( + 'id' => '2', + 'title' => 'Registered', + 'alias' => 'registered', + 'created' => '2009-04-05 00:10:50', + 'updated' => '2009-04-06 05:20:38' + ), + array( + 'id' => '3', + 'title' => 'Public', + 'alias' => 'public', + 'created' => '2009-04-05 00:12:38', + 'updated' => '2009-04-07 01:41:45' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/setting_data.php.svn-base b/app/config/schema/data/.svn/text-base/setting_data.php.svn-base new file mode 100644 index 0000000..35b0639 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/setting_data.php.svn-base @@ -0,0 +1,263 @@ + '6', + 'key' => 'Site.title', + 'value' => 'Croogo', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '1', + 'params' => '' + ), + array( + 'id' => '7', + 'key' => 'Site.tagline', + 'value' => 'A CakePHP powered Content Management System.', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '2', + 'params' => '' + ), + array( + 'id' => '8', + 'key' => 'Site.email', + 'value' => 'you@your-site.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '3', + 'params' => '' + ), + array( + 'id' => '9', + 'key' => 'Site.status', + 'value' => '1', + 'title' => '', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '5', + 'params' => '' + ), + array( + 'id' => '12', + 'key' => 'Meta.robots', + 'value' => 'index, follow', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '6', + 'params' => '' + ), + array( + 'id' => '13', + 'key' => 'Meta.keywords', + 'value' => 'croogo, Croogo', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '7', + 'params' => '' + ), + array( + 'id' => '14', + 'key' => 'Meta.description', + 'value' => 'Croogo - A CakePHP powered Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '8', + 'params' => '' + ), + array( + 'id' => '15', + 'key' => 'Meta.generator', + 'value' => 'Croogo - Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '9', + 'params' => '' + ), + array( + 'id' => '16', + 'key' => 'Service.akismet_key', + 'value' => 'your-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '11', + 'params' => '' + ), + array( + 'id' => '17', + 'key' => 'Service.recaptcha_public_key', + 'value' => 'your-public-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '12', + 'params' => '' + ), + array( + 'id' => '18', + 'key' => 'Service.recaptcha_private_key', + 'value' => 'your-private-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '13', + 'params' => '' + ), + array( + 'id' => '19', + 'key' => 'Service.akismet_url', + 'value' => 'http://your-blog.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '10', + 'params' => '' + ), + array( + 'id' => '20', + 'key' => 'Site.theme', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '14', + 'params' => '' + ), + array( + 'id' => '21', + 'key' => 'Site.feed_url', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '15', + 'params' => '' + ), + array( + 'id' => '22', + 'key' => 'Reading.nodes_per_page', + 'value' => '5', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '16', + 'params' => '' + ), + array( + 'id' => '23', + 'key' => 'Writing.wysiwyg', + 'value' => '1', + 'title' => 'Enable WYSIWYG editor', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '17', + 'params' => '' + ), + array( + 'id' => '24', + 'key' => 'Comment.level', + 'value' => '1', + 'title' => '', + 'description' => 'levels deep (threaded comments)', + 'input_type' => '', + 'editable' => '1', + 'weight' => '18', + 'params' => '' + ), + array( + 'id' => '25', + 'key' => 'Comment.feed_limit', + 'value' => '10', + 'title' => '', + 'description' => 'number of comments to show in feed', + 'input_type' => '', + 'editable' => '1', + 'weight' => '19', + 'params' => '' + ), + array( + 'id' => '26', + 'key' => 'Site.locale', + 'value' => 'eng', + 'title' => '', + 'description' => '', + 'input_type' => 'text', + 'editable' => '0', + 'weight' => '20', + 'params' => '' + ), + array( + 'id' => '27', + 'key' => 'Reading.date_time_format', + 'value' => 'D, M d Y H:i:s', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '21', + 'params' => '' + ), + array( + 'id' => '28', + 'key' => 'Comment.date_time_format', + 'value' => 'M d, Y', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '22', + 'params' => '' + ), + array( + 'id' => '29', + 'key' => 'Site.timezone', + 'value' => '0', + 'title' => '', + 'description' => 'zero (0) for GMT', + 'input_type' => '', + 'editable' => '1', + 'weight' => '4', + 'params' => '' + ), + array( + 'id' => '32', + 'key' => 'Hook.bootstraps', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '23', + 'params' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/taxonomy_data.php.svn-base b/app/config/schema/data/.svn/text-base/taxonomy_data.php.svn-base new file mode 100644 index 0000000..35b6399 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/taxonomy_data.php.svn-base @@ -0,0 +1,34 @@ + '1', + 'parent_id' => '', + 'term_id' => '1', + 'vocabulary_id' => '1', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'term_id' => '2', + 'vocabulary_id' => '1', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'term_id' => '3', + 'vocabulary_id' => '2', + 'lft' => '1', + 'rght' => '2' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/term_data.php.svn-base b/app/config/schema/data/.svn/text-base/term_data.php.svn-base new file mode 100644 index 0000000..627cf9f --- /dev/null +++ b/app/config/schema/data/.svn/text-base/term_data.php.svn-base @@ -0,0 +1,34 @@ + '1', + 'title' => 'Uncategorized', + 'slug' => 'uncategorized', + 'description' => '', + 'updated' => '2009-07-22 03:38:43', + 'created' => '2009-07-22 03:34:56' + ), + array( + 'id' => '2', + 'title' => 'Announcements', + 'slug' => 'announcements', + 'description' => '', + 'updated' => '2010-05-16 23:57:06', + 'created' => '2009-07-22 03:45:37' + ), + array( + 'id' => '3', + 'title' => 'mytag', + 'slug' => 'mytag', + 'description' => '', + 'updated' => '2009-08-26 14:42:43', + 'created' => '2009-08-26 14:42:43' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/type_data.php.svn-base b/app/config/schema/data/.svn/text-base/type_data.php.svn-base new file mode 100644 index 0000000..2790110 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/type_data.php.svn-base @@ -0,0 +1,58 @@ + '1', + 'title' => 'Page', + 'alias' => 'page', + 'description' => 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', + 'format_show_author' => '0', + 'format_show_date' => '0', + 'comment_status' => '0', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-09 00:23:24', + 'created' => '2009-09-02 18:06:27' + ), + array( + 'id' => '2', + 'title' => 'Blog', + 'alias' => 'blog', + 'description' => 'A blog entry is a single post to an online journal, or blog.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-15 12:15:43', + 'created' => '2009-09-02 18:20:44' + ), + array( + 'id' => '4', + 'title' => 'Node', + 'alias' => 'node', + 'description' => 'Default content type.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-10-06 21:53:15', + 'created' => '2009-09-05 23:51:56' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/types_vocabulary_data.php.svn-base b/app/config/schema/data/.svn/text-base/types_vocabulary_data.php.svn-base new file mode 100644 index 0000000..8a1c44f --- /dev/null +++ b/app/config/schema/data/.svn/text-base/types_vocabulary_data.php.svn-base @@ -0,0 +1,34 @@ + '31', + 'type_id' => '2', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '30', + 'type_id' => '2', + 'vocabulary_id' => '1', + 'weight' => '' + ), + array( + 'id' => '25', + 'type_id' => '4', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '24', + 'type_id' => '4', + 'vocabulary_id' => '1', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/user_data.php.svn-base b/app/config/schema/data/.svn/text-base/user_data.php.svn-base new file mode 100644 index 0000000..7231c5e --- /dev/null +++ b/app/config/schema/data/.svn/text-base/user_data.php.svn-base @@ -0,0 +1,26 @@ + '1', + 'role_id' => '1', + 'username' => 'admin', + 'password' => 'c054b152596745efa1d197b809fa7fc70ce586e5', + 'name' => 'Administrator', + 'email' => 'you@your-site.com', + 'website' => '/about', + 'activation_key' => '', + 'image' => '', + 'bio' => '', + 'timezone' => '0', + 'status' => '1', + 'updated' => '2010-06-06 07:00:10', + 'created' => '2009-04-05 00:20:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/.svn/text-base/vocabulary_data.php.svn-base b/app/config/schema/data/.svn/text-base/vocabulary_data.php.svn-base new file mode 100644 index 0000000..213af78 --- /dev/null +++ b/app/config/schema/data/.svn/text-base/vocabulary_data.php.svn-base @@ -0,0 +1,36 @@ + '1', + 'title' => 'Categories', + 'alias' => 'categories', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '1', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:21' + ), + array( + 'id' => '2', + 'title' => 'Tags', + 'alias' => 'tags', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '2', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/aco_data.php b/app/config/schema/data/aco_data.php new file mode 100644 index 0000000..8f432a3 --- /dev/null +++ b/app/config/schema/data/aco_data.php @@ -0,0 +1,1594 @@ + '1', + 'parent_id' => '', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'controllers', + 'lft' => '1', + 'rght' => '352' + ), + array( + 'id' => '2', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Attachments', + 'lft' => '2', + 'rght' => '13' + ), + array( + 'id' => '3', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '4', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '7', + 'rght' => '8' + ), + array( + 'id' => '6', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '9', + 'rght' => '10' + ), + array( + 'id' => '7', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '11', + 'rght' => '12' + ), + array( + 'id' => '8', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Blocks', + 'lft' => '14', + 'rght' => '29' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '15', + 'rght' => '16' + ), + array( + 'id' => '10', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '17', + 'rght' => '18' + ), + array( + 'id' => '11', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '19', + 'rght' => '20' + ), + array( + 'id' => '12', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '21', + 'rght' => '22' + ), + array( + 'id' => '13', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '23', + 'rght' => '24' + ), + array( + 'id' => '14', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '25', + 'rght' => '26' + ), + array( + 'id' => '15', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '27', + 'rght' => '28' + ), + array( + 'id' => '16', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Comments', + 'lft' => '30', + 'rght' => '45' + ), + array( + 'id' => '17', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '31', + 'rght' => '32' + ), + array( + 'id' => '18', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '33', + 'rght' => '34' + ), + array( + 'id' => '19', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '35', + 'rght' => '36' + ), + array( + 'id' => '20', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '37', + 'rght' => '38' + ), + array( + 'id' => '21', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '39', + 'rght' => '40' + ), + array( + 'id' => '22', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '41', + 'rght' => '42' + ), + array( + 'id' => '23', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'delete', + 'lft' => '43', + 'rght' => '44' + ), + array( + 'id' => '24', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Contacts', + 'lft' => '46', + 'rght' => '57' + ), + array( + 'id' => '25', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '47', + 'rght' => '48' + ), + array( + 'id' => '26', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '49', + 'rght' => '50' + ), + array( + 'id' => '27', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '51', + 'rght' => '52' + ), + array( + 'id' => '28', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '53', + 'rght' => '54' + ), + array( + 'id' => '29', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '55', + 'rght' => '56' + ), + array( + 'id' => '30', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Filemanager', + 'lft' => '58', + 'rght' => '79' + ), + array( + 'id' => '31', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '59', + 'rght' => '60' + ), + array( + 'id' => '32', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '61', + 'rght' => '62' + ), + array( + 'id' => '33', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editfile', + 'lft' => '63', + 'rght' => '64' + ), + array( + 'id' => '34', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_upload', + 'lft' => '65', + 'rght' => '66' + ), + array( + 'id' => '35', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_file', + 'lft' => '67', + 'rght' => '68' + ), + array( + 'id' => '36', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_directory', + 'lft' => '69', + 'rght' => '70' + ), + array( + 'id' => '37', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_rename', + 'lft' => '71', + 'rght' => '72' + ), + array( + 'id' => '38', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_directory', + 'lft' => '73', + 'rght' => '74' + ), + array( + 'id' => '39', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_file', + 'lft' => '75', + 'rght' => '76' + ), + array( + 'id' => '40', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_chmod', + 'lft' => '77', + 'rght' => '78' + ), + array( + 'id' => '41', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Languages', + 'lft' => '80', + 'rght' => '95' + ), + array( + 'id' => '42', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '81', + 'rght' => '82' + ), + array( + 'id' => '43', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '83', + 'rght' => '84' + ), + array( + 'id' => '44', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '85', + 'rght' => '86' + ), + array( + 'id' => '45', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '87', + 'rght' => '88' + ), + array( + 'id' => '46', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '89', + 'rght' => '90' + ), + array( + 'id' => '47', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '91', + 'rght' => '92' + ), + array( + 'id' => '48', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_select', + 'lft' => '93', + 'rght' => '94' + ), + array( + 'id' => '49', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Links', + 'lft' => '96', + 'rght' => '111' + ), + array( + 'id' => '50', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '97', + 'rght' => '98' + ), + array( + 'id' => '51', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '99', + 'rght' => '100' + ), + array( + 'id' => '52', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '101', + 'rght' => '102' + ), + array( + 'id' => '53', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '103', + 'rght' => '104' + ), + array( + 'id' => '54', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '105', + 'rght' => '106' + ), + array( + 'id' => '55', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '107', + 'rght' => '108' + ), + array( + 'id' => '56', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '109', + 'rght' => '110' + ), + array( + 'id' => '57', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Menus', + 'lft' => '112', + 'rght' => '121' + ), + array( + 'id' => '58', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '113', + 'rght' => '114' + ), + array( + 'id' => '59', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '115', + 'rght' => '116' + ), + array( + 'id' => '60', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '117', + 'rght' => '118' + ), + array( + 'id' => '61', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '119', + 'rght' => '120' + ), + array( + 'id' => '62', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Messages', + 'lft' => '122', + 'rght' => '131' + ), + array( + 'id' => '63', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '123', + 'rght' => '124' + ), + array( + 'id' => '64', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '125', + 'rght' => '126' + ), + array( + 'id' => '65', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '127', + 'rght' => '128' + ), + array( + 'id' => '66', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '129', + 'rght' => '130' + ), + array( + 'id' => '67', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Nodes', + 'lft' => '132', + 'rght' => '161' + ), + array( + 'id' => '68', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '133', + 'rght' => '134' + ), + array( + 'id' => '69', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create', + 'lft' => '135', + 'rght' => '136' + ), + array( + 'id' => '70', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '137', + 'rght' => '138' + ), + array( + 'id' => '71', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '139', + 'rght' => '140' + ), + array( + 'id' => '72', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_update_paths', + 'lft' => '141', + 'rght' => '142' + ), + array( + 'id' => '73', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '143', + 'rght' => '144' + ), + array( + 'id' => '74', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_meta', + 'lft' => '145', + 'rght' => '146' + ), + array( + 'id' => '75', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add_meta', + 'lft' => '147', + 'rght' => '148' + ), + array( + 'id' => '76', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '149', + 'rght' => '150' + ), + array( + 'id' => '77', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '151', + 'rght' => '152' + ), + array( + 'id' => '78', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'term', + 'lft' => '153', + 'rght' => '154' + ), + array( + 'id' => '79', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'promoted', + 'lft' => '155', + 'rght' => '156' + ), + array( + 'id' => '80', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'search', + 'lft' => '157', + 'rght' => '158' + ), + array( + 'id' => '81', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '159', + 'rght' => '160' + ), + array( + 'id' => '82', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Regions', + 'lft' => '162', + 'rght' => '171' + ), + array( + 'id' => '83', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '163', + 'rght' => '164' + ), + array( + 'id' => '84', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '165', + 'rght' => '166' + ), + array( + 'id' => '85', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '167', + 'rght' => '168' + ), + array( + 'id' => '86', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '169', + 'rght' => '170' + ), + array( + 'id' => '87', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Roles', + 'lft' => '172', + 'rght' => '181' + ), + array( + 'id' => '88', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '173', + 'rght' => '174' + ), + array( + 'id' => '89', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '175', + 'rght' => '176' + ), + array( + 'id' => '90', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '177', + 'rght' => '178' + ), + array( + 'id' => '91', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '179', + 'rght' => '180' + ), + array( + 'id' => '92', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Settings', + 'lft' => '182', + 'rght' => '201' + ), + array( + 'id' => '93', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_dashboard', + 'lft' => '183', + 'rght' => '184' + ), + array( + 'id' => '94', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '185', + 'rght' => '186' + ), + array( + 'id' => '95', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_view', + 'lft' => '187', + 'rght' => '188' + ), + array( + 'id' => '96', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '189', + 'rght' => '190' + ), + array( + 'id' => '97', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '191', + 'rght' => '192' + ), + array( + 'id' => '98', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '193', + 'rght' => '194' + ), + array( + 'id' => '99', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_prefix', + 'lft' => '195', + 'rght' => '196' + ), + array( + 'id' => '100', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '197', + 'rght' => '198' + ), + array( + 'id' => '101', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '199', + 'rght' => '200' + ), + array( + 'id' => '102', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Terms', + 'lft' => '202', + 'rght' => '217' + ), + array( + 'id' => '103', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '203', + 'rght' => '204' + ), + array( + 'id' => '104', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '205', + 'rght' => '206' + ), + array( + 'id' => '105', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '207', + 'rght' => '208' + ), + array( + 'id' => '106', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '209', + 'rght' => '210' + ), + array( + 'id' => '107', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '211', + 'rght' => '212' + ), + array( + 'id' => '108', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '213', + 'rght' => '214' + ), + array( + 'id' => '109', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '215', + 'rght' => '216' + ), + array( + 'id' => '110', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Types', + 'lft' => '218', + 'rght' => '227' + ), + array( + 'id' => '111', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '219', + 'rght' => '220' + ), + array( + 'id' => '112', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '221', + 'rght' => '222' + ), + array( + 'id' => '113', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '223', + 'rght' => '224' + ), + array( + 'id' => '114', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '225', + 'rght' => '226' + ), + array( + 'id' => '115', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Users', + 'lft' => '228', + 'rght' => '261' + ), + array( + 'id' => '116', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '229', + 'rght' => '230' + ), + array( + 'id' => '117', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '231', + 'rght' => '232' + ), + array( + 'id' => '118', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '233', + 'rght' => '234' + ), + array( + 'id' => '119', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_reset_password', + 'lft' => '235', + 'rght' => '236' + ), + array( + 'id' => '120', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '237', + 'rght' => '238' + ), + array( + 'id' => '121', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_login', + 'lft' => '239', + 'rght' => '240' + ), + array( + 'id' => '122', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_logout', + 'lft' => '241', + 'rght' => '242' + ), + array( + 'id' => '123', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '243', + 'rght' => '244' + ), + array( + 'id' => '124', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '245', + 'rght' => '246' + ), + array( + 'id' => '125', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'activate', + 'lft' => '247', + 'rght' => '248' + ), + array( + 'id' => '126', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'edit', + 'lft' => '249', + 'rght' => '250' + ), + array( + 'id' => '127', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'forgot', + 'lft' => '251', + 'rght' => '252' + ), + array( + 'id' => '128', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'reset', + 'lft' => '253', + 'rght' => '254' + ), + array( + 'id' => '129', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'login', + 'lft' => '255', + 'rght' => '256' + ), + array( + 'id' => '130', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'logout', + 'lft' => '257', + 'rght' => '258' + ), + array( + 'id' => '131', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '259', + 'rght' => '260' + ), + array( + 'id' => '132', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Vocabularies', + 'lft' => '262', + 'rght' => '271' + ), + array( + 'id' => '133', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '263', + 'rght' => '264' + ), + array( + 'id' => '134', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '265', + 'rght' => '266' + ), + array( + 'id' => '135', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '267', + 'rght' => '268' + ), + array( + 'id' => '136', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '269', + 'rght' => '270' + ), + array( + 'id' => '137', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAcos', + 'lft' => '272', + 'rght' => '281' + ), + array( + 'id' => '138', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '273', + 'rght' => '274' + ), + array( + 'id' => '139', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '275', + 'rght' => '276' + ), + array( + 'id' => '140', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '277', + 'rght' => '278' + ), + array( + 'id' => '141', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '279', + 'rght' => '280' + ), + array( + 'id' => '142', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclActions', + 'lft' => '282', + 'rght' => '295' + ), + array( + 'id' => '143', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '283', + 'rght' => '284' + ), + array( + 'id' => '144', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '285', + 'rght' => '286' + ), + array( + 'id' => '145', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '287', + 'rght' => '288' + ), + array( + 'id' => '146', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '289', + 'rght' => '290' + ), + array( + 'id' => '147', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_move', + 'lft' => '291', + 'rght' => '292' + ), + array( + 'id' => '148', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_generate', + 'lft' => '293', + 'rght' => '294' + ), + array( + 'id' => '149', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAros', + 'lft' => '296', + 'rght' => '305' + ), + array( + 'id' => '150', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '297', + 'rght' => '298' + ), + array( + 'id' => '151', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '299', + 'rght' => '300' + ), + array( + 'id' => '152', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '301', + 'rght' => '302' + ), + array( + 'id' => '153', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '303', + 'rght' => '304' + ), + array( + 'id' => '154', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclPermissions', + 'lft' => '306', + 'rght' => '311' + ), + array( + 'id' => '155', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '307', + 'rght' => '308' + ), + array( + 'id' => '156', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '309', + 'rght' => '310' + ), + array( + 'id' => '159', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsHooks', + 'lft' => '312', + 'rght' => '317' + ), + array( + 'id' => '160', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '313', + 'rght' => '314' + ), + array( + 'id' => '161', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '315', + 'rght' => '316' + ), + array( + 'id' => '162', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsLocales', + 'lft' => '318', + 'rght' => '329' + ), + array( + 'id' => '163', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '319', + 'rght' => '320' + ), + array( + 'id' => '164', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '321', + 'rght' => '322' + ), + array( + 'id' => '165', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '323', + 'rght' => '324' + ), + array( + 'id' => '166', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '325', + 'rght' => '326' + ), + array( + 'id' => '167', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '327', + 'rght' => '328' + ), + array( + 'id' => '168', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsPlugins', + 'lft' => '330', + 'rght' => '337' + ), + array( + 'id' => '169', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '331', + 'rght' => '332' + ), + array( + 'id' => '170', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '333', + 'rght' => '334' + ), + array( + 'id' => '171', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '335', + 'rght' => '336' + ), + array( + 'id' => '172', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsThemes', + 'lft' => '338', + 'rght' => '351' + ), + array( + 'id' => '173', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '339', + 'rght' => '340' + ), + array( + 'id' => '174', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '341', + 'rght' => '342' + ), + array( + 'id' => '175', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '343', + 'rght' => '344' + ), + array( + 'id' => '176', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editor', + 'lft' => '345', + 'rght' => '346' + ), + array( + 'id' => '177', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_save', + 'lft' => '347', + 'rght' => '348' + ), + array( + 'id' => '178', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '349', + 'rght' => '350' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/aro_data.php b/app/config/schema/data/aro_data.php new file mode 100644 index 0000000..06cd495 --- /dev/null +++ b/app/config/schema/data/aro_data.php @@ -0,0 +1,46 @@ + '1', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '2', + 'alias' => '', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '3', + 'alias' => '', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '', + 'model' => 'User', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '7', + 'rght' => '8' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/aros_aco_data.php b/app/config/schema/data/aros_aco_data.php new file mode 100644 index 0000000..3b2c4e9 --- /dev/null +++ b/app/config/schema/data/aros_aco_data.php @@ -0,0 +1,253 @@ + '1', + 'aro_id' => '2', + 'aco_id' => '23', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '2', + 'aro_id' => '2', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '3', + 'aro_id' => '2', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '4', + 'aro_id' => '3', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '5', + 'aro_id' => '3', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '6', + 'aro_id' => '2', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '7', + 'aro_id' => '3', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '8', + 'aro_id' => '2', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '9', + 'aro_id' => '2', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '10', + 'aro_id' => '2', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '11', + 'aro_id' => '2', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '12', + 'aro_id' => '2', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '13', + 'aro_id' => '3', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '14', + 'aro_id' => '3', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '15', + 'aro_id' => '3', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '16', + 'aro_id' => '3', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '17', + 'aro_id' => '3', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '18', + 'aro_id' => '2', + 'aco_id' => '123', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '19', + 'aro_id' => '3', + 'aco_id' => '124', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '20', + 'aro_id' => '3', + 'aco_id' => '125', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '21', + 'aro_id' => '2', + 'aco_id' => '126', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '22', + 'aro_id' => '3', + 'aco_id' => '127', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '23', + 'aro_id' => '3', + 'aco_id' => '128', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '24', + 'aro_id' => '3', + 'aco_id' => '129', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '25', + 'aro_id' => '2', + 'aco_id' => '130', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '26', + 'aro_id' => '2', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '27', + 'aro_id' => '3', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/block_data.php b/app/config/schema/data/block_data.php new file mode 100644 index 0000000..7b06c49 --- /dev/null +++ b/app/config/schema/data/block_data.php @@ -0,0 +1,118 @@ + '3', + 'region_id' => '4', + 'title' => 'About', + 'alias' => 'about', + 'body' => 'This is the content of your block. Can be modified in admin panel.', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '2', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-07-26 17:13:14' + ), + array( + 'id' => '8', + 'region_id' => '4', + 'title' => 'Search', + 'alias' => 'search', + 'body' => '', + 'show_title' => '0', + 'class' => '', + 'status' => '1', + 'weight' => '1', + 'element' => 'search', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-12-20 03:07:27' + ), + array( + 'id' => '5', + 'region_id' => '4', + 'title' => 'Meta', + 'alias' => 'meta', + 'body' => '[menu:meta]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '6', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-22 05:17:39', + 'created' => '2009-09-12 06:36:22' + ), + array( + 'id' => '6', + 'region_id' => '4', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'body' => '[menu:blogroll]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '4', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:33', + 'created' => '2009-09-12 23:33:27' + ), + array( + 'id' => '7', + 'region_id' => '4', + 'title' => 'Categories', + 'alias' => 'categories', + 'body' => '[vocabulary:categories type="blog"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '3', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:36', + 'created' => '2009-10-03 16:52:50' + ), + array( + 'id' => '9', + 'region_id' => '4', + 'title' => 'Recent Posts', + 'alias' => 'recent_posts', + 'body' => '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC" limit="5"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '5', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2010-04-08 21:09:31', + 'created' => '2009-12-22 05:17:32' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/comment_data.php b/app/config/schema/data/comment_data.php new file mode 100644 index 0000000..651ad3e --- /dev/null +++ b/app/config/schema/data/comment_data.php @@ -0,0 +1,31 @@ + '1', + 'parent_id' => '', + 'node_id' => '1', + 'user_id' => '0', + 'name' => 'Mr Croogo', + 'email' => 'email@example.com', + 'website' => 'http://www.croogo.org', + 'ip' => '127.0.0.1', + 'title' => '', + 'body' => 'Hi, this is the first comment.', + 'rating' => '', + 'status' => '1', + 'notify' => '0', + 'type' => 'blog', + 'comment_type' => 'comment', + 'lft' => '1', + 'rght' => '2', + 'updated' => '2009-12-25 12:00:00', + 'created' => '2009-12-25 12:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/contact_data.php b/app/config/schema/data/contact_data.php new file mode 100644 index 0000000..4f1e85e --- /dev/null +++ b/app/config/schema/data/contact_data.php @@ -0,0 +1,35 @@ + '1', + 'title' => 'Contact', + 'alias' => 'contact', + 'body' => '', + 'name' => '', + 'position' => '', + 'address' => '', + 'address2' => '', + 'state' => '', + 'country' => '', + 'postcode' => '', + 'phone' => '', + 'fax' => '', + 'email' => 'you@your-site.com', + 'message_status' => '1', + 'message_archive' => '0', + 'message_count' => '0', + 'message_spam_protection' => '0', + 'message_captcha' => '0', + 'message_notify' => '1', + 'status' => '1', + 'updated' => '2009-10-07 22:07:49', + 'created' => '2009-09-16 01:45:17' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/i18n_data.php b/app/config/schema/data/i18n_data.php new file mode 100644 index 0000000..32b8dd8 --- /dev/null +++ b/app/config/schema/data/i18n_data.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/config/schema/data/language_data.php b/app/config/schema/data/language_data.php new file mode 100644 index 0000000..7e5fac9 --- /dev/null +++ b/app/config/schema/data/language_data.php @@ -0,0 +1,20 @@ + '1', + 'title' => 'English', + 'native' => 'English', + 'alias' => 'eng', + 'status' => '1', + 'weight' => '1', + 'updated' => '2009-11-02 21:37:38', + 'created' => '2009-11-02 20:52:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/link_data.php b/app/config/schema/data/link_data.php new file mode 100644 index 0000000..0b375e2 --- /dev/null +++ b/app/config/schema/data/link_data.php @@ -0,0 +1,214 @@ + '5', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'About', + 'description' => '', + 'link' => 'controller:nodes/action:view/type:page/slug:about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:21', + 'created' => '2009-08-19 12:23:33' + ), + array( + 'id' => '6', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'Contact', + 'description' => '', + 'link' => 'controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:45', + 'created' => '2009-08-19 12:34:56' + ), + array( + 'id' => '7', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Home', + 'description' => '', + 'link' => '/', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 21:17:06', + 'created' => '2009-09-06 21:32:54' + ), + array( + 'id' => '8', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'About', + 'description' => '', + 'link' => '/about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '10', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 03:45:53', + 'created' => '2009-09-06 21:34:57' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'menu_id' => '3', + 'title' => 'Child link', + 'description' => '', + 'link' => '#', + 'target' => '', + 'rel' => '', + 'status' => '0', + 'lft' => '8', + 'rght' => '9', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:13:06', + 'created' => '2009-09-12 03:52:23' + ), + array( + 'id' => '10', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Site Admin', + 'description' => '', + 'link' => '/admin', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 06:34:09', + 'created' => '2009-09-12 06:34:09' + ), + array( + 'id' => '11', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Log out', + 'description' => '', + 'link' => '/users/logout', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '8', + 'visibility_roles' => '["1","2"]', + 'params' => '', + 'updated' => '2009-09-12 06:35:22', + 'created' => '2009-09-12 06:34:41' + ), + array( + 'id' => '12', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'Croogo', + 'description' => '', + 'link' => 'http://www.croogo.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 23:31:59', + 'created' => '2009-09-12 23:31:59' + ), + array( + 'id' => '14', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'CakePHP', + 'description' => '', + 'link' => 'http://www.cakephp.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-07 03:25:25', + 'created' => '2009-09-12 23:38:43' + ), + array( + 'id' => '15', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Contact', + 'description' => '', + 'link' => '/controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '11', + 'rght' => '12', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-16 07:54:13', + 'created' => '2009-09-16 07:53:33' + ), + array( + 'id' => '16', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Entries (RSS)', + 'description' => '', + 'link' => '/nodes/promoted.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:22', + 'created' => '2009-10-27 17:46:22' + ), + array( + 'id' => '17', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Comments (RSS)', + 'description' => '', + 'link' => '/comments.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:54', + 'created' => '2009-10-27 17:46:54' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/menu_data.php b/app/config/schema/data/menu_data.php new file mode 100644 index 0000000..15264f6 --- /dev/null +++ b/app/config/schema/data/menu_data.php @@ -0,0 +1,58 @@ + '3', + 'title' => 'Main Menu', + 'alias' => 'main', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-08-19 12:21:06', + 'created' => '2009-07-22 01:49:53' + ), + array( + 'id' => '4', + 'title' => 'Footer', + 'alias' => 'footer', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-08-19 12:22:42', + 'created' => '2009-08-19 12:22:42' + ), + array( + 'id' => '5', + 'title' => 'Meta', + 'alias' => 'meta', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-09-12 06:33:29', + 'created' => '2009-09-12 06:33:29' + ), + array( + 'id' => '6', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-09-12 23:30:24', + 'created' => '2009-09-12 23:30:24' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/message_data.php b/app/config/schema/data/message_data.php new file mode 100644 index 0000000..34e388b --- /dev/null +++ b/app/config/schema/data/message_data.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/config/schema/data/meta_data.php b/app/config/schema/data/meta_data.php new file mode 100644 index 0000000..9f4eab8 --- /dev/null +++ b/app/config/schema/data/meta_data.php @@ -0,0 +1,18 @@ + '1', + 'model' => 'Node', + 'foreign_key' => '1', + 'key' => 'meta_keywords', + 'value' => 'key1, key2', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/node_data.php b/app/config/schema/data/node_data.php new file mode 100644 index 0000000..3250088 --- /dev/null +++ b/app/config/schema/data/node_data.php @@ -0,0 +1,56 @@ + '1', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'Hello World', + 'slug' => 'hello-world', + 'body' => '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '2', + 'comment_count' => '1', + 'promote' => '1', + 'path' => '/blog/hello-world', + 'terms' => '{"1":"uncategorized"}', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'blog', + 'updated' => '2009-12-25 11:00:00', + 'created' => '2009-12-25 11:00:00' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'About', + 'slug' => 'about', + 'body' => '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '0', + 'comment_count' => '0', + 'promote' => '0', + 'path' => '/about', + 'terms' => '', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'page', + 'updated' => '2009-12-25 22:00:00', + 'created' => '2009-12-25 22:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/nodes_taxonomy_data.php b/app/config/schema/data/nodes_taxonomy_data.php new file mode 100644 index 0000000..352db3a --- /dev/null +++ b/app/config/schema/data/nodes_taxonomy_data.php @@ -0,0 +1,15 @@ + '1', + 'node_id' => '1', + 'taxonomy_id' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/region_data.php b/app/config/schema/data/region_data.php new file mode 100644 index 0000000..2807843 --- /dev/null +++ b/app/config/schema/data/region_data.php @@ -0,0 +1,108 @@ + '3', + 'title' => 'none', + 'alias' => '', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '4', + 'title' => 'right', + 'alias' => 'right', + 'description' => '', + 'block_count' => '6' + ), + array( + 'id' => '6', + 'title' => 'left', + 'alias' => 'left', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '7', + 'title' => 'header', + 'alias' => 'header', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '8', + 'title' => 'footer', + 'alias' => 'footer', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '9', + 'title' => 'region1', + 'alias' => 'region1', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '10', + 'title' => 'region2', + 'alias' => 'region2', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '11', + 'title' => 'region3', + 'alias' => 'region3', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '12', + 'title' => 'region4', + 'alias' => 'region4', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '13', + 'title' => 'region5', + 'alias' => 'region5', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '14', + 'title' => 'region6', + 'alias' => 'region6', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '15', + 'title' => 'region7', + 'alias' => 'region7', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '16', + 'title' => 'region8', + 'alias' => 'region8', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '17', + 'title' => 'region9', + 'alias' => 'region9', + 'description' => '', + 'block_count' => '0' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/role_data.php b/app/config/schema/data/role_data.php new file mode 100644 index 0000000..d491812 --- /dev/null +++ b/app/config/schema/data/role_data.php @@ -0,0 +1,31 @@ + '1', + 'title' => 'Admin', + 'alias' => 'admin', + 'created' => '2009-04-05 00:10:34', + 'updated' => '2009-04-05 00:10:34' + ), + array( + 'id' => '2', + 'title' => 'Registered', + 'alias' => 'registered', + 'created' => '2009-04-05 00:10:50', + 'updated' => '2009-04-06 05:20:38' + ), + array( + 'id' => '3', + 'title' => 'Public', + 'alias' => 'public', + 'created' => '2009-04-05 00:12:38', + 'updated' => '2009-04-07 01:41:45' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/setting_data.php b/app/config/schema/data/setting_data.php new file mode 100644 index 0000000..35b0639 --- /dev/null +++ b/app/config/schema/data/setting_data.php @@ -0,0 +1,263 @@ + '6', + 'key' => 'Site.title', + 'value' => 'Croogo', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '1', + 'params' => '' + ), + array( + 'id' => '7', + 'key' => 'Site.tagline', + 'value' => 'A CakePHP powered Content Management System.', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '2', + 'params' => '' + ), + array( + 'id' => '8', + 'key' => 'Site.email', + 'value' => 'you@your-site.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '3', + 'params' => '' + ), + array( + 'id' => '9', + 'key' => 'Site.status', + 'value' => '1', + 'title' => '', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '5', + 'params' => '' + ), + array( + 'id' => '12', + 'key' => 'Meta.robots', + 'value' => 'index, follow', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '6', + 'params' => '' + ), + array( + 'id' => '13', + 'key' => 'Meta.keywords', + 'value' => 'croogo, Croogo', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '7', + 'params' => '' + ), + array( + 'id' => '14', + 'key' => 'Meta.description', + 'value' => 'Croogo - A CakePHP powered Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '8', + 'params' => '' + ), + array( + 'id' => '15', + 'key' => 'Meta.generator', + 'value' => 'Croogo - Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '9', + 'params' => '' + ), + array( + 'id' => '16', + 'key' => 'Service.akismet_key', + 'value' => 'your-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '11', + 'params' => '' + ), + array( + 'id' => '17', + 'key' => 'Service.recaptcha_public_key', + 'value' => 'your-public-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '12', + 'params' => '' + ), + array( + 'id' => '18', + 'key' => 'Service.recaptcha_private_key', + 'value' => 'your-private-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '13', + 'params' => '' + ), + array( + 'id' => '19', + 'key' => 'Service.akismet_url', + 'value' => 'http://your-blog.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '10', + 'params' => '' + ), + array( + 'id' => '20', + 'key' => 'Site.theme', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '14', + 'params' => '' + ), + array( + 'id' => '21', + 'key' => 'Site.feed_url', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '15', + 'params' => '' + ), + array( + 'id' => '22', + 'key' => 'Reading.nodes_per_page', + 'value' => '5', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '16', + 'params' => '' + ), + array( + 'id' => '23', + 'key' => 'Writing.wysiwyg', + 'value' => '1', + 'title' => 'Enable WYSIWYG editor', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '17', + 'params' => '' + ), + array( + 'id' => '24', + 'key' => 'Comment.level', + 'value' => '1', + 'title' => '', + 'description' => 'levels deep (threaded comments)', + 'input_type' => '', + 'editable' => '1', + 'weight' => '18', + 'params' => '' + ), + array( + 'id' => '25', + 'key' => 'Comment.feed_limit', + 'value' => '10', + 'title' => '', + 'description' => 'number of comments to show in feed', + 'input_type' => '', + 'editable' => '1', + 'weight' => '19', + 'params' => '' + ), + array( + 'id' => '26', + 'key' => 'Site.locale', + 'value' => 'eng', + 'title' => '', + 'description' => '', + 'input_type' => 'text', + 'editable' => '0', + 'weight' => '20', + 'params' => '' + ), + array( + 'id' => '27', + 'key' => 'Reading.date_time_format', + 'value' => 'D, M d Y H:i:s', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '21', + 'params' => '' + ), + array( + 'id' => '28', + 'key' => 'Comment.date_time_format', + 'value' => 'M d, Y', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '22', + 'params' => '' + ), + array( + 'id' => '29', + 'key' => 'Site.timezone', + 'value' => '0', + 'title' => '', + 'description' => 'zero (0) for GMT', + 'input_type' => '', + 'editable' => '1', + 'weight' => '4', + 'params' => '' + ), + array( + 'id' => '32', + 'key' => 'Hook.bootstraps', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '23', + 'params' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/taxonomy_data.php b/app/config/schema/data/taxonomy_data.php new file mode 100644 index 0000000..35b6399 --- /dev/null +++ b/app/config/schema/data/taxonomy_data.php @@ -0,0 +1,34 @@ + '1', + 'parent_id' => '', + 'term_id' => '1', + 'vocabulary_id' => '1', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'term_id' => '2', + 'vocabulary_id' => '1', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'term_id' => '3', + 'vocabulary_id' => '2', + 'lft' => '1', + 'rght' => '2' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/term_data.php b/app/config/schema/data/term_data.php new file mode 100644 index 0000000..627cf9f --- /dev/null +++ b/app/config/schema/data/term_data.php @@ -0,0 +1,34 @@ + '1', + 'title' => 'Uncategorized', + 'slug' => 'uncategorized', + 'description' => '', + 'updated' => '2009-07-22 03:38:43', + 'created' => '2009-07-22 03:34:56' + ), + array( + 'id' => '2', + 'title' => 'Announcements', + 'slug' => 'announcements', + 'description' => '', + 'updated' => '2010-05-16 23:57:06', + 'created' => '2009-07-22 03:45:37' + ), + array( + 'id' => '3', + 'title' => 'mytag', + 'slug' => 'mytag', + 'description' => '', + 'updated' => '2009-08-26 14:42:43', + 'created' => '2009-08-26 14:42:43' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/type_data.php b/app/config/schema/data/type_data.php new file mode 100644 index 0000000..2790110 --- /dev/null +++ b/app/config/schema/data/type_data.php @@ -0,0 +1,58 @@ + '1', + 'title' => 'Page', + 'alias' => 'page', + 'description' => 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', + 'format_show_author' => '0', + 'format_show_date' => '0', + 'comment_status' => '0', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-09 00:23:24', + 'created' => '2009-09-02 18:06:27' + ), + array( + 'id' => '2', + 'title' => 'Blog', + 'alias' => 'blog', + 'description' => 'A blog entry is a single post to an online journal, or blog.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-15 12:15:43', + 'created' => '2009-09-02 18:20:44' + ), + array( + 'id' => '4', + 'title' => 'Node', + 'alias' => 'node', + 'description' => 'Default content type.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-10-06 21:53:15', + 'created' => '2009-09-05 23:51:56' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/types_vocabulary_data.php b/app/config/schema/data/types_vocabulary_data.php new file mode 100644 index 0000000..8a1c44f --- /dev/null +++ b/app/config/schema/data/types_vocabulary_data.php @@ -0,0 +1,34 @@ + '31', + 'type_id' => '2', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '30', + 'type_id' => '2', + 'vocabulary_id' => '1', + 'weight' => '' + ), + array( + 'id' => '25', + 'type_id' => '4', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '24', + 'type_id' => '4', + 'vocabulary_id' => '1', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/user_data.php b/app/config/schema/data/user_data.php new file mode 100644 index 0000000..7231c5e --- /dev/null +++ b/app/config/schema/data/user_data.php @@ -0,0 +1,26 @@ + '1', + 'role_id' => '1', + 'username' => 'admin', + 'password' => 'c054b152596745efa1d197b809fa7fc70ce586e5', + 'name' => 'Administrator', + 'email' => 'you@your-site.com', + 'website' => '/about', + 'activation_key' => '', + 'image' => '', + 'bio' => '', + 'timezone' => '0', + 'status' => '1', + 'updated' => '2010-06-06 07:00:10', + 'created' => '2009-04-05 00:20:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/data/vocabulary_data.php b/app/config/schema/data/vocabulary_data.php new file mode 100644 index 0000000..213af78 --- /dev/null +++ b/app/config/schema/data/vocabulary_data.php @@ -0,0 +1,36 @@ + '1', + 'title' => 'Categories', + 'alias' => 'categories', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '1', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:21' + ), + array( + 'id' => '2', + 'title' => 'Tags', + 'alias' => 'tags', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '2', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/db_acl.php b/app/config/schema/db_acl.php new file mode 100644 index 0000000..7fc92c3 --- /dev/null +++ b/app/config/schema/db_acl.php @@ -0,0 +1,74 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros_acos = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'aro_id' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'aco_id' => array('type'=>'integer', 'null' => false, 'length' => 10), + '_create' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_read' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_update' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_delete' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'ARO_ACO_KEY' => array('column' => array('aro_id', 'aco_id'), 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/i18n.php b/app/config/schema/i18n.php new file mode 100644 index 0000000..bcf133d --- /dev/null +++ b/app/config/schema/i18n.php @@ -0,0 +1,51 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'locale' => array('type'=>'string', 'null' => false, 'length' => 6, 'key' => 'index'), + 'model' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'foreign_key' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'field' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'content' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'locale' => array('column' => 'locale', 'unique' => 0), 'model' => array('column' => 'model', 'unique' => 0), 'row_id' => array('column' => 'foreign_key', 'unique' => 0), 'field' => array('column' => 'field', 'unique' => 0)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/schema.php b/app/config/schema/schema.php new file mode 100644 index 0000000..e0734ff --- /dev/null +++ b/app/config/schema/schema.php @@ -0,0 +1,341 @@ + array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'foreign_key' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $aros = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'foreign_key' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $aros_acos = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'aro_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + 'aco_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + '_create' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + '_read' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + '_update' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + '_delete' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $blocks = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'region_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'body' => array('type' => 'text', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'show_title' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'class' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'element' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'visibility_roles' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'visibility_paths' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'visibility_php' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'params' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $comments = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'node_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20), + 'user_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 20), + 'name' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 50, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'email' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'website' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 200, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'ip' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'title' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'body' => array('type' => 'text', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'rating' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'notify' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'type' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'comment_type' => array('type' => 'string', 'null' => false, 'default' => 'comment', 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $contacts = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'body' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'name' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'position' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'address' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'address2' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'state' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'country' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'postcode' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'phone' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'fax' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'email' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'message_status' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'message_archive' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'message_count' => array('type' => 'integer', 'null' => false, 'default' => '0'), + 'message_spam_protection' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'message_captcha' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'message_notify' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $i18n = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'locale' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 6, 'key' => 'index', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'model' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'index', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'foreign_key' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'index'), + 'field' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'index', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'content' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'locale' => array('column' => 'locale', 'unique' => 0), 'model' => array('column' => 'model', 'unique' => 0), 'row_id' => array('column' => 'foreign_key', 'unique' => 0), 'field' => array('column' => 'field', 'unique' => 0)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $languages = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'native' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $links = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'menu_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'link' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'target' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'rel' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'visibility_roles' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'params' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $menus = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'link_count' => array('type' => 'integer', 'null' => false, 'default' => NULL), + 'params' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $messages = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'contact_id' => array('type' => 'integer', 'null' => false, 'default' => NULL), + 'name' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'email' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'title' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'body' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'website' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'phone' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'address' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'message_type' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $meta = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'model' => array('type' => 'string', 'null' => false, 'default' => 'Node', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'foreign_key' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'key' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'value' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $nodes = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'user_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 20), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'slug' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'body' => array('type' => 'text', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'excerpt' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'mime_type' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'comment_status' => array('type' => 'integer', 'null' => false, 'default' => '1', 'length' => 1), + 'comment_count' => array('type' => 'integer', 'null' => true, 'default' => '0'), + 'promote' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'path' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'terms' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'sticky' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'visibility_roles' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'type' => array('type' => 'string', 'null' => false, 'default' => 'node', 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'slug' => array('column' => 'slug', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $nodes_taxonomies = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'node_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 20), + 'taxonomy_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $regions = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'block_count' => array('type' => 'integer', 'null' => false, 'default' => '0'), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $roles = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'created' => array('type' => 'datetime', 'null' => true, 'default' => NULL), + 'updated' => array('type' => 'datetime', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $settings = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'key' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 64, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'value' => array('type' => 'text', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'input_type' => array('type' => 'string', 'null' => false, 'default' => 'text', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'editable' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'params' => array('type' => 'text', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'key' => array('column' => 'key', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $taxonomies = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'parent_id' => array('type' => 'integer', 'null' => true, 'default' => NULL, 'length' => 20), + 'term_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + 'vocabulary_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + 'lft' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'rght' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $terms = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'slug' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'slug' => array('column' => 'slug', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $types = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'format_show_author' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'format_show_date' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'comment_status' => array('type' => 'integer', 'null' => false, 'default' => '1', 'length' => 1), + 'comment_approve' => array('type' => 'boolean', 'null' => false, 'default' => '1'), + 'comment_spam_protection' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'comment_captcha' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'params' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'plugin' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $types_vocabularies = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'type_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + 'vocabulary_id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $users = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 20, 'key' => 'primary'), + 'role_id' => array('type' => 'integer', 'null' => false, 'default' => NULL), + 'username' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 60, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'password' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'name' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 50, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'email' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'website' => array('type' => 'string', 'null' => true, 'default' => NULL, 'length' => 100, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'activation_key' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 60, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'image' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'bio' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'timezone' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 10, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'status' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + var $vocabularies = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'title' => array('type' => 'string', 'null' => false, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'alias' => array('type' => 'string', 'null' => false, 'default' => NULL, 'key' => 'unique', 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'description' => array('type' => 'text', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'required' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'multiple' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'tags' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'plugin' => array('type' => 'string', 'null' => true, 'default' => NULL, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'weight' => array('type' => 'integer', 'null' => true, 'default' => NULL), + 'updated' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'alias' => array('column' => 'alias', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); +} +?> \ No newline at end of file diff --git a/app/config/schema/sessions.php b/app/config/schema/sessions.php new file mode 100644 index 0000000..a5a0952 --- /dev/null +++ b/app/config/schema/sessions.php @@ -0,0 +1,48 @@ + array('type'=>'string', 'null' => false, 'key' => 'primary'), + 'data' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'expires' => array('type'=>'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/schema/sql/.svn/entries b/app/config/schema/sql/.svn/entries new file mode 100644 index 0000000..6d631b4 --- /dev/null +++ b/app/config/schema/sql/.svn/entries @@ -0,0 +1,198 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/config/schema/sql +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +croogo_data.sql +file + + + + +2010-09-04T08:55:28.000000Z +5a424f5b03e1bbfbe7421277648f6281 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +20785 + +db_acl.sql +file + + + + +2010-09-04T08:55:28.000000Z +9aa594584d4874944e72c7478155944d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1232 + +sessions.sql +file + + + + +2010-09-04T08:55:28.000000Z +bd22cb83c7bd43731601d8e91677b604 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +495 + +croogo.sql +file + + + + +2010-09-04T08:55:28.000000Z +821eda06ab6ee9eeb7980d074be975c7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +16888 + +i18n.sql +file + + + + +2010-09-04T08:55:28.000000Z +380658cce32315b242ca1428d8e4beaa +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +842 + diff --git a/app/config/schema/sql/.svn/text-base/croogo.sql.svn-base b/app/config/schema/sql/.svn/text-base/croogo.sql.svn-base new file mode 100644 index 0000000..d7277ef --- /dev/null +++ b/app/config/schema/sql/.svn/text-base/croogo.sql.svn-base @@ -0,0 +1,479 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `acos` +-- + +CREATE TABLE IF NOT EXISTS `acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros` +-- + +CREATE TABLE IF NOT EXISTS `aros` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros_acos` +-- + +CREATE TABLE IF NOT EXISTS `aros_acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `aro_id` int(10) unsigned NOT NULL, + `aco_id` int(10) unsigned NOT NULL, + `_create` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_read` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_update` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_delete` char(2) collate utf8_unicode_ci NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `blocks` +-- + +CREATE TABLE IF NOT EXISTS `blocks` ( + `id` bigint(20) NOT NULL auto_increment, + `region_id` bigint(20) default NULL, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `show_title` tinyint(1) NOT NULL default '1', + `class` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `weight` int(11) default NULL, + `element` varchar(255) collate utf8_unicode_ci NOT NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `visibility_paths` text collate utf8_unicode_ci NOT NULL, + `visibility_php` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comments` +-- + +CREATE TABLE IF NOT EXISTS `comments` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `node_id` bigint(20) NOT NULL, + `user_id` bigint(20) NOT NULL default '0', + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(200) collate utf8_unicode_ci NOT NULL, + `ip` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `rating` int(11) default NULL, + `status` tinyint(1) NOT NULL default '0', + `notify` tinyint(1) NOT NULL default '0', + `type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_type` varchar(100) collate utf8_unicode_ci NOT NULL default 'comment', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `contacts` +-- + +CREATE TABLE IF NOT EXISTS `contacts` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `name` varchar(255) collate utf8_unicode_ci NOT NULL, + `position` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `address2` text collate utf8_unicode_ci NOT NULL, + `state` varchar(100) collate utf8_unicode_ci NOT NULL, + `country` varchar(100) collate utf8_unicode_ci NOT NULL, + `postcode` varchar(100) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `fax` varchar(255) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `message_status` tinyint(1) NOT NULL default '1', + `message_archive` tinyint(1) NOT NULL default '1', + `message_count` int(11) NOT NULL default '0', + `message_spam_protection` tinyint(1) NOT NULL default '0', + `message_captcha` tinyint(1) NOT NULL default '0', + `message_notify` tinyint(1) NOT NULL default '1', + `status` tinyint(1) NOT NULL default '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `i18n` +-- + +CREATE TABLE IF NOT EXISTS `i18n` ( + `id` int(10) NOT NULL auto_increment, + `locale` varchar(6) collate utf8_unicode_ci NOT NULL, + `model` varchar(255) collate utf8_unicode_ci NOT NULL, + `foreign_key` int(10) NOT NULL, + `field` varchar(255) collate utf8_unicode_ci NOT NULL, + `content` mediumtext collate utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `locale` (`locale`), + KEY `model` (`model`), + KEY `row_id` (`foreign_key`), + KEY `field` (`field`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `languages` +-- + +CREATE TABLE IF NOT EXISTS `languages` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `native` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `menu_id` bigint(20) NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `link` varchar(255) collate utf8_unicode_ci NOT NULL, + `target` varchar(255) collate utf8_unicode_ci NOT NULL, + `rel` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `menus` +-- + +CREATE TABLE IF NOT EXISTS `menus` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `link_count` int(11) NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id` int(11) NOT NULL auto_increment, + `contact_id` int(11) NOT NULL, + `name` varchar(100) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `website` varchar(255) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `message_type` varchar(255) collate utf8_unicode_ci default NULL, + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `meta` +-- + +CREATE TABLE IF NOT EXISTS `meta` ( + `id` bigint(20) NOT NULL auto_increment, + `model` varchar(255) collate utf8_unicode_ci NOT NULL default 'Node', + `foreign_key` bigint(20) default NULL, + `key` varchar(255) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes` +-- + +CREATE TABLE IF NOT EXISTS `nodes` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `user_id` bigint(20) NOT NULL default '0', + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `excerpt` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `mime_type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_status` int(1) NOT NULL default '1', + `comment_count` int(11) default '0', + `promote` tinyint(1) NOT NULL default '0', + `path` varchar(255) collate utf8_unicode_ci NOT NULL, + `terms` text collate utf8_unicode_ci NOT NULL, + `sticky` tinyint(1) NOT NULL default '0', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `type` varchar(100) collate utf8_unicode_ci NOT NULL default 'node', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes_taxonomies` +-- + +CREATE TABLE IF NOT EXISTS `nodes_taxonomies` ( + `id` bigint(20) NOT NULL auto_increment, + `node_id` bigint(20) NOT NULL default '0', + `taxonomy_id` bigint(20) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regions` +-- + +CREATE TABLE IF NOT EXISTS `regions` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `block_count` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `roles` +-- + +CREATE TABLE IF NOT EXISTS `roles` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `created` datetime default NULL, + `updated` datetime default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `settings` +-- + +CREATE TABLE IF NOT EXISTS `settings` ( + `id` bigint(20) NOT NULL auto_increment, + `key` varchar(64) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` varchar(255) collate utf8_unicode_ci NOT NULL, + `input_type` varchar(255) collate utf8_unicode_ci NOT NULL default 'text', + `editable` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `params` text collate utf8_unicode_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key` (`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `taxonomies` +-- + +CREATE TABLE IF NOT EXISTS `taxonomies` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `term_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `lft` int(11) default NULL, + `rght` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `terms` +-- + +CREATE TABLE IF NOT EXISTS `terms` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types` +-- + +CREATE TABLE IF NOT EXISTS `types` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `format_show_author` tinyint(1) NOT NULL default '1', + `format_show_date` tinyint(1) NOT NULL default '1', + `comment_status` int(1) NOT NULL default '1', + `comment_approve` tinyint(1) NOT NULL default '1', + `comment_spam_protection` tinyint(1) NOT NULL default '0', + `comment_captcha` tinyint(1) NOT NULL default '0', + `params` text collate utf8_unicode_ci NOT NULL, + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types_vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `types_vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `type_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` bigint(20) NOT NULL auto_increment, + `role_id` int(11) NOT NULL, + `username` varchar(60) collate utf8_unicode_ci NOT NULL, + `password` varchar(100) collate utf8_unicode_ci NOT NULL, + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(100) collate utf8_unicode_ci NOT NULL, + `activation_key` varchar(60) collate utf8_unicode_ci NOT NULL, + `image` varchar(255) collate utf8_unicode_ci NOT NULL, + `bio` text collate utf8_unicode_ci NOT NULL, + `timezone` varchar(10) collate utf8_unicode_ci NOT NULL default '0', + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `required` tinyint(1) NOT NULL default '0', + `multiple` tinyint(1) NOT NULL default '0', + `tags` tinyint(1) NOT NULL default '0', + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/app/config/schema/sql/.svn/text-base/croogo_data.sql.svn-base b/app/config/schema/sql/.svn/text-base/croogo_data.sql.svn-base new file mode 100644 index 0000000..563276e --- /dev/null +++ b/app/config/schema/sql/.svn/text-base/croogo_data.sql.svn-base @@ -0,0 +1,429 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Dumping data for table `acos` +-- + +INSERT IGNORE INTO `acos` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, NULL, NULL, 'controllers', 1, 352), +(2, 1, NULL, NULL, 'Attachments', 2, 13), +(3, 2, NULL, NULL, 'admin_index', 3, 4), +(4, 2, NULL, NULL, 'admin_add', 5, 6), +(5, 2, NULL, NULL, 'admin_edit', 7, 8), +(6, 2, NULL, NULL, 'admin_delete', 9, 10), +(7, 2, NULL, NULL, 'admin_browse', 11, 12), +(8, 1, NULL, NULL, 'Blocks', 14, 29), +(9, 8, NULL, NULL, 'admin_index', 15, 16), +(10, 8, NULL, NULL, 'admin_add', 17, 18), +(11, 8, NULL, NULL, 'admin_edit', 19, 20), +(12, 8, NULL, NULL, 'admin_delete', 21, 22), +(13, 8, NULL, NULL, 'admin_moveup', 23, 24), +(14, 8, NULL, NULL, 'admin_movedown', 25, 26), +(15, 8, NULL, NULL, 'admin_process', 27, 28), +(16, 1, NULL, NULL, 'Comments', 30, 45), +(17, 16, NULL, NULL, 'admin_index', 31, 32), +(18, 16, NULL, NULL, 'admin_edit', 33, 34), +(19, 16, NULL, NULL, 'admin_delete', 35, 36), +(20, 16, NULL, NULL, 'admin_process', 37, 38), +(21, 16, NULL, NULL, 'index', 39, 40), +(22, 16, NULL, NULL, 'add', 41, 42), +(23, 16, NULL, NULL, 'delete', 43, 44), +(24, 1, NULL, NULL, 'Contacts', 46, 57), +(25, 24, NULL, NULL, 'admin_index', 47, 48), +(26, 24, NULL, NULL, 'admin_add', 49, 50), +(27, 24, NULL, NULL, 'admin_edit', 51, 52), +(28, 24, NULL, NULL, 'admin_delete', 53, 54), +(29, 24, NULL, NULL, 'view', 55, 56), +(30, 1, NULL, NULL, 'Filemanager', 58, 79), +(31, 30, NULL, NULL, 'admin_index', 59, 60), +(32, 30, NULL, NULL, 'admin_browse', 61, 62), +(33, 30, NULL, NULL, 'admin_editfile', 63, 64), +(34, 30, NULL, NULL, 'admin_upload', 65, 66), +(35, 30, NULL, NULL, 'admin_delete_file', 67, 68), +(36, 30, NULL, NULL, 'admin_delete_directory', 69, 70), +(37, 30, NULL, NULL, 'admin_rename', 71, 72), +(38, 30, NULL, NULL, 'admin_create_directory', 73, 74), +(39, 30, NULL, NULL, 'admin_create_file', 75, 76), +(40, 30, NULL, NULL, 'admin_chmod', 77, 78), +(41, 1, NULL, NULL, 'Languages', 80, 95), +(42, 41, NULL, NULL, 'admin_index', 81, 82), +(43, 41, NULL, NULL, 'admin_add', 83, 84), +(44, 41, NULL, NULL, 'admin_edit', 85, 86), +(45, 41, NULL, NULL, 'admin_delete', 87, 88), +(46, 41, NULL, NULL, 'admin_moveup', 89, 90), +(47, 41, NULL, NULL, 'admin_movedown', 91, 92), +(48, 41, NULL, NULL, 'admin_select', 93, 94), +(49, 1, NULL, NULL, 'Links', 96, 111), +(50, 49, NULL, NULL, 'admin_index', 97, 98), +(51, 49, NULL, NULL, 'admin_add', 99, 100), +(52, 49, NULL, NULL, 'admin_edit', 101, 102), +(53, 49, NULL, NULL, 'admin_delete', 103, 104), +(54, 49, NULL, NULL, 'admin_moveup', 105, 106), +(55, 49, NULL, NULL, 'admin_movedown', 107, 108), +(56, 49, NULL, NULL, 'admin_process', 109, 110), +(57, 1, NULL, NULL, 'Menus', 112, 121), +(58, 57, NULL, NULL, 'admin_index', 113, 114), +(59, 57, NULL, NULL, 'admin_add', 115, 116), +(60, 57, NULL, NULL, 'admin_edit', 117, 118), +(61, 57, NULL, NULL, 'admin_delete', 119, 120), +(62, 1, NULL, NULL, 'Messages', 122, 131), +(63, 62, NULL, NULL, 'admin_index', 123, 124), +(64, 62, NULL, NULL, 'admin_edit', 125, 126), +(65, 62, NULL, NULL, 'admin_delete', 127, 128), +(66, 62, NULL, NULL, 'admin_process', 129, 130), +(67, 1, NULL, NULL, 'Nodes', 132, 161), +(68, 67, NULL, NULL, 'admin_index', 133, 134), +(69, 67, NULL, NULL, 'admin_create', 135, 136), +(70, 67, NULL, NULL, 'admin_add', 137, 138), +(71, 67, NULL, NULL, 'admin_edit', 139, 140), +(72, 67, NULL, NULL, 'admin_update_paths', 141, 142), +(73, 67, NULL, NULL, 'admin_delete', 143, 144), +(74, 67, NULL, NULL, 'admin_delete_meta', 145, 146), +(75, 67, NULL, NULL, 'admin_add_meta', 147, 148), +(76, 67, NULL, NULL, 'admin_process', 149, 150), +(77, 67, NULL, NULL, 'index', 151, 152), +(78, 67, NULL, NULL, 'term', 153, 154), +(79, 67, NULL, NULL, 'promoted', 155, 156), +(80, 67, NULL, NULL, 'search', 157, 158), +(81, 67, NULL, NULL, 'view', 159, 160), +(82, 1, NULL, NULL, 'Regions', 162, 171), +(83, 82, NULL, NULL, 'admin_index', 163, 164), +(84, 82, NULL, NULL, 'admin_add', 165, 166), +(85, 82, NULL, NULL, 'admin_edit', 167, 168), +(86, 82, NULL, NULL, 'admin_delete', 169, 170), +(87, 1, NULL, NULL, 'Roles', 172, 181), +(88, 87, NULL, NULL, 'admin_index', 173, 174), +(89, 87, NULL, NULL, 'admin_add', 175, 176), +(90, 87, NULL, NULL, 'admin_edit', 177, 178), +(91, 87, NULL, NULL, 'admin_delete', 179, 180), +(92, 1, NULL, NULL, 'Settings', 182, 201), +(93, 92, NULL, NULL, 'admin_dashboard', 183, 184), +(94, 92, NULL, NULL, 'admin_index', 185, 186), +(95, 92, NULL, NULL, 'admin_view', 187, 188), +(96, 92, NULL, NULL, 'admin_add', 189, 190), +(97, 92, NULL, NULL, 'admin_edit', 191, 192), +(98, 92, NULL, NULL, 'admin_delete', 193, 194), +(99, 92, NULL, NULL, 'admin_prefix', 195, 196), +(100, 92, NULL, NULL, 'admin_moveup', 197, 198), +(101, 92, NULL, NULL, 'admin_movedown', 199, 200), +(102, 1, NULL, NULL, 'Terms', 202, 217), +(103, 102, NULL, NULL, 'admin_index', 203, 204), +(104, 102, NULL, NULL, 'admin_add', 205, 206), +(105, 102, NULL, NULL, 'admin_edit', 207, 208), +(106, 102, NULL, NULL, 'admin_delete', 209, 210), +(107, 102, NULL, NULL, 'admin_moveup', 211, 212), +(108, 102, NULL, NULL, 'admin_movedown', 213, 214), +(109, 102, NULL, NULL, 'admin_process', 215, 216), +(110, 1, NULL, NULL, 'Types', 218, 227), +(111, 110, NULL, NULL, 'admin_index', 219, 220), +(112, 110, NULL, NULL, 'admin_add', 221, 222), +(113, 110, NULL, NULL, 'admin_edit', 223, 224), +(114, 110, NULL, NULL, 'admin_delete', 225, 226), +(115, 1, NULL, NULL, 'Users', 228, 261), +(116, 115, NULL, NULL, 'admin_index', 229, 230), +(117, 115, NULL, NULL, 'admin_add', 231, 232), +(118, 115, NULL, NULL, 'admin_edit', 233, 234), +(119, 115, NULL, NULL, 'admin_reset_password', 235, 236), +(120, 115, NULL, NULL, 'admin_delete', 237, 238), +(121, 115, NULL, NULL, 'admin_login', 239, 240), +(122, 115, NULL, NULL, 'admin_logout', 241, 242), +(123, 115, NULL, NULL, 'index', 243, 244), +(124, 115, NULL, NULL, 'add', 245, 246), +(125, 115, NULL, NULL, 'activate', 247, 248), +(126, 115, NULL, NULL, 'edit', 249, 250), +(127, 115, NULL, NULL, 'forgot', 251, 252), +(128, 115, NULL, NULL, 'reset', 253, 254), +(129, 115, NULL, NULL, 'login', 255, 256), +(130, 115, NULL, NULL, 'logout', 257, 258), +(131, 115, NULL, NULL, 'view', 259, 260), +(132, 1, NULL, NULL, 'Vocabularies', 262, 271), +(133, 132, NULL, NULL, 'admin_index', 263, 264), +(134, 132, NULL, NULL, 'admin_add', 265, 266), +(135, 132, NULL, NULL, 'admin_edit', 267, 268), +(136, 132, NULL, NULL, 'admin_delete', 269, 270), +(137, 1, NULL, NULL, 'AclAcos', 272, 281), +(138, 137, NULL, NULL, 'admin_index', 273, 274), +(139, 137, NULL, NULL, 'admin_add', 275, 276), +(140, 137, NULL, NULL, 'admin_edit', 277, 278), +(141, 137, NULL, NULL, 'admin_delete', 279, 280), +(142, 1, NULL, NULL, 'AclActions', 282, 295), +(143, 142, NULL, NULL, 'admin_index', 283, 284), +(144, 142, NULL, NULL, 'admin_add', 285, 286), +(145, 142, NULL, NULL, 'admin_edit', 287, 288), +(146, 142, NULL, NULL, 'admin_delete', 289, 290), +(147, 142, NULL, NULL, 'admin_move', 291, 292), +(148, 142, NULL, NULL, 'admin_generate', 293, 294), +(149, 1, NULL, NULL, 'AclAros', 296, 305), +(150, 149, NULL, NULL, 'admin_index', 297, 298), +(151, 149, NULL, NULL, 'admin_add', 299, 300), +(152, 149, NULL, NULL, 'admin_edit', 301, 302), +(153, 149, NULL, NULL, 'admin_delete', 303, 304), +(154, 1, NULL, NULL, 'AclPermissions', 306, 311), +(155, 154, NULL, NULL, 'admin_index', 307, 308), +(156, 154, NULL, NULL, 'admin_toggle', 309, 310), +(159, 1, NULL, NULL, 'ExtensionsHooks', 312, 317), +(160, 159, NULL, NULL, 'admin_index', 313, 314), +(161, 159, NULL, NULL, 'admin_toggle', 315, 316), +(162, 1, NULL, NULL, 'ExtensionsLocales', 318, 329), +(163, 162, NULL, NULL, 'admin_index', 319, 320), +(164, 162, NULL, NULL, 'admin_activate', 321, 322), +(165, 162, NULL, NULL, 'admin_add', 323, 324), +(166, 162, NULL, NULL, 'admin_edit', 325, 326), +(167, 162, NULL, NULL, 'admin_delete', 327, 328), +(168, 1, NULL, NULL, 'ExtensionsPlugins', 330, 337), +(169, 168, NULL, NULL, 'admin_index', 331, 332), +(170, 168, NULL, NULL, 'admin_add', 333, 334), +(171, 168, NULL, NULL, 'admin_delete', 335, 336), +(172, 1, NULL, NULL, 'ExtensionsThemes', 338, 351), +(173, 172, NULL, NULL, 'admin_index', 339, 340), +(174, 172, NULL, NULL, 'admin_activate', 341, 342), +(175, 172, NULL, NULL, 'admin_add', 343, 344), +(176, 172, NULL, NULL, 'admin_editor', 345, 346), +(177, 172, NULL, NULL, 'admin_save', 347, 348), +(178, 172, NULL, NULL, 'admin_delete', 349, 350); + +-- +-- Dumping data for table `aros` +-- + +INSERT IGNORE INTO `aros` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, 'Role', 1, '', 1, 4), +(2, NULL, 'Role', 2, '', 5, 6), +(3, NULL, 'Role', 3, '', 7, 8), +(5, 1, 'User', 1, '', 2, 3); + +-- +-- Dumping data for table `aros_acos` +-- + +INSERT IGNORE INTO `aros_acos` (`id`, `aro_id`, `aco_id`, `_create`, `_read`, `_update`, `_delete`) VALUES +(1, 2, 23, '1', '1', '1', '1'), +(2, 2, 22, '1', '1', '1', '1'), +(3, 2, 21, '1', '1', '1', '1'), +(4, 3, 21, '1', '1', '1', '1'), +(5, 3, 22, '1', '1', '1', '1'), +(6, 2, 29, '1', '1', '1', '1'), +(7, 3, 29, '1', '1', '1', '1'), +(8, 2, 77, '1', '1', '1', '1'), +(9, 2, 78, '1', '1', '1', '1'), +(10, 2, 79, '1', '1', '1', '1'), +(11, 2, 80, '1', '1', '1', '1'), +(12, 2, 81, '1', '1', '1', '1'), +(13, 3, 77, '1', '1', '1', '1'), +(14, 3, 78, '1', '1', '1', '1'), +(15, 3, 79, '1', '1', '1', '1'), +(16, 3, 80, '1', '1', '1', '1'), +(17, 3, 81, '1', '1', '1', '1'), +(18, 2, 123, '1', '1', '1', '1'), +(19, 3, 124, '1', '1', '1', '1'), +(20, 3, 125, '1', '1', '1', '1'), +(21, 2, 126, '1', '1', '1', '1'), +(22, 3, 127, '1', '1', '1', '1'), +(23, 3, 128, '1', '1', '1', '1'), +(24, 3, 129, '1', '1', '1', '1'), +(25, 2, 130, '1', '1', '1', '1'), +(26, 2, 131, '1', '1', '1', '1'), +(27, 3, 131, '1', '1', '1', '1'); + +-- +-- Dumping data for table `blocks` +-- + +INSERT IGNORE INTO `blocks` (`id`, `region_id`, `title`, `alias`, `body`, `show_title`, `class`, `status`, `weight`, `element`, `visibility_roles`, `visibility_paths`, `visibility_php`, `params`, `updated`, `created`) VALUES +(3, 4, 'About', 'about', 'This is the content of your block. Can be modified in admin panel.', 1, '', 1, 2, '', '', '', '', '', '2009-12-20 03:07:39', '2009-07-26 17:13:14'), +(8, 4, 'Search', 'search', '', 0, '', 1, 1, 'search', '', '', '', '', '2009-12-20 03:07:39', '2009-12-20 03:07:27'), +(5, 4, 'Meta', 'meta', '[menu:meta]', 1, '', 1, 6, '', '', '', '', '', '2009-12-22 05:17:39', '2009-09-12 06:36:22'), +(6, 4, 'Blogroll', 'blogroll', '[menu:blogroll]', 1, '', 1, 4, '', '', '', '', '', '2009-12-20 03:07:33', '2009-09-12 23:33:27'), +(7, 4, 'Categories', 'categories', '[vocabulary:categories type="blog"]', 1, '', 1, 3, '', '', '', '', '', '2009-12-20 03:07:36', '2009-10-03 16:52:50'), +(9, 4, 'Recent Posts', 'recent_posts', '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC" limit="5"]', 1, '', 1, 5, '', '', '', '', '', '2010-04-08 21:09:31', '2009-12-22 05:17:32'); + +-- +-- Dumping data for table `comments` +-- + +INSERT INTO `comments` (`id`, `parent_id`, `node_id`, `user_id`, `name`, `email`, `website`, `ip`, `title`, `body`, `rating`, `status`, `notify`, `type`, `comment_type`, `lft`, `rght`, `updated`, `created`) VALUES +(1, NULL, 1, 0, 'Mr Croogo', 'email@example.com', 'http://www.croogo.org', '127.0.0.1', '', 'Hi, this is the first comment.', NULL, 1, 0, 'blog', 'comment', 1, 2, '2009-12-25 12:00:00', '2009-12-25 12:00:00'); + +-- +-- Dumping data for table `contacts` +-- + +INSERT IGNORE INTO `contacts` (`id`, `title`, `alias`, `body`, `name`, `position`, `address`, `address2`, `state`, `country`, `postcode`, `phone`, `fax`, `email`, `message_status`, `message_archive`, `message_count`, `message_spam_protection`, `message_captcha`, `message_notify`, `status`, `updated`, `created`) VALUES +(1, 'Contact', 'contact', '', '', '', '', '', '', '', '', '', '', 'you@your-site.com', 1, 0, 0, 0, 0, 1, 1, '2009-10-07 22:07:49', '2009-09-16 01:45:17'); + +-- +-- Dumping data for table `i18n` +-- + + +-- +-- Dumping data for table `languages` +-- + +INSERT IGNORE INTO `languages` (`id`, `title`, `native`, `alias`, `status`, `weight`, `updated`, `created`) VALUES +(1, 'English', 'English', 'eng', 1, 1, '2009-11-02 21:37:38', '2009-11-02 20:52:00'); + +-- +-- Dumping data for table `links` +-- + +INSERT IGNORE INTO `links` (`id`, `parent_id`, `menu_id`, `title`, `description`, `link`, `target`, `rel`, `status`, `lft`, `rght`, `visibility_roles`, `params`, `updated`, `created`) VALUES +(5, NULL, 4, 'About', '', 'controller:nodes/action:view/type:page/slug:about', '', '', 1, 3, 4, '', '', '2009-10-06 23:14:21', '2009-08-19 12:23:33'), +(6, NULL, 4, 'Contact', '', 'controller:contacts/action:view/contact', '', '', 1, 5, 6, '', '', '2009-10-06 23:14:45', '2009-08-19 12:34:56'), +(7, NULL, 3, 'Home', '', '/', '', '', 1, 5, 6, '', '', '2009-10-06 21:17:06', '2009-09-06 21:32:54'), +(8, NULL, 3, 'About', '', '/about', '', '', 1, 7, 10, '', '', '2009-09-12 03:45:53', '2009-09-06 21:34:57'), +(9, 8, 3, 'Child link', '', '#', '', '', 0, 8, 9, '', '', '2009-10-06 23:13:06', '2009-09-12 03:52:23'), +(10, NULL, 5, 'Site Admin', '', '/admin', '', '', 1, 1, 2, '', '', '2009-09-12 06:34:09', '2009-09-12 06:34:09'), +(11, NULL, 5, 'Log out', '', '/users/logout', '', '', 1, 7, 8, '["1","2"]', '', '2009-09-12 06:35:22', '2009-09-12 06:34:41'), +(12, NULL, 6, 'Croogo', '', 'http://www.croogo.org', '', '', 1, 3, 4, '', '', '2009-09-12 23:31:59', '2009-09-12 23:31:59'), +(14, NULL, 6, 'CakePHP', '', 'http://www.cakephp.org', '', '', 1, 1, 2, '', '', '2009-10-07 03:25:25', '2009-09-12 23:38:43'), +(15, NULL, 3, 'Contact', '', '/controller:contacts/action:view/contact', '', '', 1, 11, 12, '', '', '2009-09-16 07:54:13', '2009-09-16 07:53:33'), +(16, NULL, 5, 'Entries (RSS)', '', '/nodes/promoted.rss', '', '', 1, 3, 4, '', '', '2009-10-27 17:46:22', '2009-10-27 17:46:22'), +(17, NULL, 5, 'Comments (RSS)', '', '/comments.rss', '', '', 1, 5, 6, '', '', '2009-10-27 17:46:54', '2009-10-27 17:46:54'); + +-- +-- Dumping data for table `menus` +-- + +INSERT IGNORE INTO `menus` (`id`, `title`, `alias`, `description`, `status`, `weight`, `link_count`, `params`, `updated`, `created`) VALUES +(3, 'Main Menu', 'main', '', 1, NULL, 4, '', '2009-08-19 12:21:06', '2009-07-22 01:49:53'), +(4, 'Footer', 'footer', '', 1, NULL, 2, '', '2009-08-19 12:22:42', '2009-08-19 12:22:42'), +(5, 'Meta', 'meta', '', 1, NULL, 4, '', '2009-09-12 06:33:29', '2009-09-12 06:33:29'), +(6, 'Blogroll', 'blogroll', '', 1, NULL, 2, '', '2009-09-12 23:30:24', '2009-09-12 23:30:24'); + +-- +-- Dumping data for table `messages` +-- + + +-- +-- Dumping data for table `meta` +-- + +INSERT IGNORE INTO `meta` (`id`, `model`, `foreign_key`, `key`, `value`, `weight`) VALUES +(1, 'Node', 1, 'meta_keywords', 'key1, key2', NULL); + +-- +-- Dumping data for table `nodes` +-- + +INSERT IGNORE INTO `nodes` (`id`, `parent_id`, `user_id`, `title`, `slug`, `body`, `excerpt`, `status`, `mime_type`, `comment_status`, `comment_count`, `promote`, `path`, `terms`, `sticky`, `lft`, `rght`, `visibility_roles`, `type`, `updated`, `created`) VALUES +(1, NULL, 1, 'Hello World', 'hello-world', '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', '', 1, '', 2, 1, 1, '/blog/hello-world', '{"1":"uncategorized"}', 0, 1, 2, '', 'blog', '2009-12-25 11:00:00', '2009-12-25 11:00:00'), +(2, NULL, 1, 'About', 'about', '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', '', 1, '', 0, 0, 0, '/about', '', 0, 1, 2, '', 'page', '2009-12-25 22:00:00', '2009-12-25 22:00:00'); + +-- +-- Dumping data for table `nodes_taxonomies` +-- + +INSERT INTO `nodes_taxonomies` (`id`, `node_id`, `taxonomy_id`) VALUES +(1, 1, 1); + +-- +-- Dumping data for table `regions` +-- + +INSERT IGNORE INTO `regions` (`id`, `title`, `alias`, `description`, `block_count`) VALUES +(3, 'none', '', '', 0), +(4, 'right', 'right', '', 6), +(6, 'left', 'left', '', 0), +(7, 'header', 'header', '', 0), +(8, 'footer', 'footer', '', 0), +(9, 'region1', 'region1', '', 0), +(10, 'region2', 'region2', '', 0), +(11, 'region3', 'region3', '', 0), +(12, 'region4', 'region4', '', 0), +(13, 'region5', 'region5', '', 0), +(14, 'region6', 'region6', '', 0), +(15, 'region7', 'region7', '', 0), +(16, 'region8', 'region8', '', 0), +(17, 'region9', 'region9', '', 0); + +-- +-- Dumping data for table `roles` +-- + +INSERT IGNORE INTO `roles` (`id`, `title`, `alias`, `created`, `updated`) VALUES +(1, 'Admin', 'admin', '2009-04-05 00:10:34', '2009-04-05 00:10:34'), +(2, 'Registered', 'registered', '2009-04-05 00:10:50', '2009-04-06 05:20:38'), +(3, 'Public', 'public', '2009-04-05 00:12:38', '2009-04-07 01:41:45'); + +-- +-- Dumping data for table `settings` +-- + +INSERT IGNORE INTO `settings` (`id`, `key`, `value`, `title`, `description`, `input_type`, `editable`, `weight`, `params`) VALUES +(6, 'Site.title', 'Croogo', '', '', '', 1, 1, ''), +(7, 'Site.tagline', 'A CakePHP powered Content Management System.', '', '', 'textarea', 1, 2, ''), +(8, 'Site.email', 'you@your-site.com', '', '', '', 1, 3, ''), +(9, 'Site.status', '1', '', '', 'checkbox', 1, 5, ''), +(12, 'Meta.robots', 'index, follow', '', '', '', 1, 6, ''), +(13, 'Meta.keywords', 'croogo, Croogo', '', '', 'textarea', 1, 7, ''), +(14, 'Meta.description', 'Croogo - A CakePHP powered Content Management System', '', '', 'textarea', 1, 8, ''), +(15, 'Meta.generator', 'Croogo - Content Management System', '', '', '', 0, 9, ''), +(16, 'Service.akismet_key', 'your-key', '', '', '', 1, 11, ''), +(17, 'Service.recaptcha_public_key', 'your-public-key', '', '', '', 1, 12, ''), +(18, 'Service.recaptcha_private_key', 'your-private-key', '', '', '', 1, 13, ''), +(19, 'Service.akismet_url', 'http://your-blog.com', '', '', '', 1, 10, ''), +(20, 'Site.theme', '', '', '', '', 0, 14, ''), +(21, 'Site.feed_url', '', '', '', '', 0, 15, ''), +(22, 'Reading.nodes_per_page', '5', '', '', '', 1, 16, ''), +(23, 'Writing.wysiwyg', '1', 'Enable WYSIWYG editor', '', 'checkbox', 1, 17, ''), +(24, 'Comment.level', '1', '', 'levels deep (threaded comments)', '', 1, 18, ''), +(25, 'Comment.feed_limit', '10', '', 'number of comments to show in feed', '', 1, 19, ''), +(26, 'Site.locale', 'eng', '', '', 'text', 0, 20, ''), +(27, 'Reading.date_time_format', 'D, M d Y H:i:s', '', '', '', 1, 21, ''), +(28, 'Comment.date_time_format', 'M d, Y', '', '', '', 1, 22, ''), +(29, 'Site.timezone', '0', '', 'zero (0) for GMT', '', 1, 4, ''), +(32, 'Hook.bootstraps', '', '', '', '', 0, 23, ''); + +-- +-- Dumping data for table `taxonomies` +-- + +INSERT IGNORE INTO `taxonomies` (`id`, `parent_id`, `term_id`, `vocabulary_id`, `lft`, `rght`) VALUES +(1, NULL, 1, 1, 1, 2), +(2, NULL, 2, 1, 3, 4), +(3, NULL, 3, 2, 1, 2); + +-- +-- Dumping data for table `terms` +-- + +INSERT IGNORE INTO `terms` (`id`, `title`, `slug`, `description`, `updated`, `created`) VALUES +(1, 'Uncategorized', 'uncategorized', '', '2009-07-22 03:38:43', '2009-07-22 03:34:56'), +(2, 'Announcements', 'announcements', '', '2010-05-16 23:57:06', '2009-07-22 03:45:37'), +(3, 'mytag', 'mytag', '', '2009-08-26 14:42:43', '2009-08-26 14:42:43'); + +-- +-- Dumping data for table `types` +-- + +INSERT IGNORE INTO `types` (`id`, `title`, `alias`, `description`, `format_show_author`, `format_show_date`, `comment_status`, `comment_approve`, `comment_spam_protection`, `comment_captcha`, `params`, `plugin`, `updated`, `created`) VALUES +(1, 'Page', 'page', 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', 0, 0, 0, 1, 0, 0, '', '', '2009-09-09 00:23:24', '2009-09-02 18:06:27'), +(2, 'Blog', 'blog', 'A blog entry is a single post to an online journal, or blog.', 1, 1, 2, 1, 0, 0, '', '', '2009-09-15 12:15:43', '2009-09-02 18:20:44'), +(4, 'Node', 'node', 'Default content type.', 1, 1, 2, 1, 0, 0, '', '', '2009-10-06 21:53:15', '2009-09-05 23:51:56'); + +-- +-- Dumping data for table `types_vocabularies` +-- + +INSERT IGNORE INTO `types_vocabularies` (`id`, `type_id`, `vocabulary_id`, `weight`) VALUES +(31, 2, 2, NULL), +(30, 2, 1, NULL), +(25, 4, 2, NULL), +(24, 4, 1, NULL); + +-- +-- Dumping data for table `users` +-- + +INSERT IGNORE INTO `users` (`id`, `role_id`, `username`, `password`, `name`, `email`, `website`, `activation_key`, `image`, `bio`, `timezone`, `status`, `updated`, `created`) VALUES +(1, 1, 'admin', 'c054b152596745efa1d197b809fa7fc70ce586e5', 'Administrator', 'you@your-site.com', '/about', '', '', '', '0', 1, '2009-10-07 22:23:27', '2009-04-05 00:20:34'); + +-- +-- Dumping data for table `vocabularies` +-- + +INSERT IGNORE INTO `vocabularies` (`id`, `title`, `alias`, `description`, `required`, `multiple`, `tags`, `plugin`, `weight`, `updated`, `created`) VALUES +(1, 'Categories', 'categories', '', 0, 1, 0, '', 1, '2010-05-17 20:03:11', '2009-07-22 02:16:21'), +(2, 'Tags', 'tags', '', 0, 1, 0, '', 2, '2010-05-17 20:03:11', '2009-07-22 02:16:34'); diff --git a/app/config/schema/sql/.svn/text-base/db_acl.sql.svn-base b/app/config/schema/sql/.svn/text-base/db_acl.sql.svn-base new file mode 100644 index 0000000..080f06c --- /dev/null +++ b/app/config/schema/sql/.svn/text-base/db_acl.sql.svn-base @@ -0,0 +1,40 @@ +# $Id: db_acl.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE aros_acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + aro_id INTEGER(10) UNSIGNED NOT NULL, + aco_id INTEGER(10) UNSIGNED NOT NULL, + _create CHAR(2) NOT NULL DEFAULT 0, + _read CHAR(2) NOT NULL DEFAULT 0, + _update CHAR(2) NOT NULL DEFAULT 0, + _delete CHAR(2) NOT NULL DEFAULT 0, + PRIMARY KEY(id) +); + +CREATE TABLE aros ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); diff --git a/app/config/schema/sql/.svn/text-base/i18n.sql.svn-base b/app/config/schema/sql/.svn/text-base/i18n.sql.svn-base new file mode 100644 index 0000000..4660a5a --- /dev/null +++ b/app/config/schema/sql/.svn/text-base/i18n.sql.svn-base @@ -0,0 +1,26 @@ +# $Id: i18n.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE i18n ( + id int(10) NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content mediumtext, + PRIMARY KEY (id), +# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), +# INDEX I18N_LOCALE_ROW(locale, model, foreign_key), +# INDEX I18N_LOCALE_MODEL(locale, model), +# INDEX I18N_FIELD(model, foreign_key, field), +# INDEX I18N_ROW(model, foreign_key), + INDEX locale (locale), + INDEX model (model), + INDEX row_id (foreign_key), + INDEX field (field) +); diff --git a/app/config/schema/sql/.svn/text-base/sessions.sql.svn-base b/app/config/schema/sql/.svn/text-base/sessions.sql.svn-base new file mode 100644 index 0000000..23a1925 --- /dev/null +++ b/app/config/schema/sql/.svn/text-base/sessions.sql.svn-base @@ -0,0 +1,16 @@ +# $Id: sessions.sql 7118 2008-06-04 20:49:29Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# 1785 E. Sahara Avenue, Suite 490-204 +# Las Vegas, Nevada 89104 +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE cake_sessions ( + id varchar(255) NOT NULL default '', + data text, + expires int(11) default NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/app/config/schema/sql/croogo.sql b/app/config/schema/sql/croogo.sql new file mode 100644 index 0000000..090116f --- /dev/null +++ b/app/config/schema/sql/croogo.sql @@ -0,0 +1,479 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `acos` +-- + +CREATE TABLE IF NOT EXISTS `acos` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `parent_id` int(10) DEFAULT NULL, + `model` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `foreign_key` int(10) DEFAULT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `lft` int(10) DEFAULT NULL, + `rght` int(10) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros` +-- + +CREATE TABLE IF NOT EXISTS `aros` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `parent_id` int(10) DEFAULT NULL, + `model` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `foreign_key` int(10) DEFAULT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `lft` int(10) DEFAULT NULL, + `rght` int(10) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros_acos` +-- + +CREATE TABLE IF NOT EXISTS `aros_acos` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `aro_id` int(10) NOT NULL, + `aco_id` int(10) NOT NULL, + `_create` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `_read` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `_update` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `_delete` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `blocks` +-- + +CREATE TABLE IF NOT EXISTS `blocks` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `region_id` int(20) DEFAULT NULL, + `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci NOT NULL, + `show_title` tinyint(1) NOT NULL DEFAULT '1', + `class` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `weight` int(11) DEFAULT NULL, + `element` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `visibility_roles` text COLLATE utf8_unicode_ci, + `visibility_paths` text COLLATE utf8_unicode_ci, + `visibility_php` text COLLATE utf8_unicode_ci, + `params` text COLLATE utf8_unicode_ci, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comments` +-- + +CREATE TABLE IF NOT EXISTS `comments` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `parent_id` int(20) DEFAULT NULL, + `node_id` int(20) NOT NULL, + `user_id` int(20) NOT NULL DEFAULT '0', + `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `website` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, + `ip` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci NOT NULL, + `rating` int(11) DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `notify` tinyint(1) NOT NULL DEFAULT '0', + `type` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `comment_type` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'comment', + `lft` int(11) DEFAULT NULL, + `rght` int(11) DEFAULT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `contacts` +-- + +CREATE TABLE IF NOT EXISTS `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `body` text COLLATE utf8_unicode_ci, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `address` text COLLATE utf8_unicode_ci, + `address2` text COLLATE utf8_unicode_ci, + `state` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `postcode` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `fax` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `message_status` tinyint(1) NOT NULL DEFAULT '1', + `message_archive` tinyint(1) NOT NULL DEFAULT '1', + `message_count` int(11) NOT NULL DEFAULT '0', + `message_spam_protection` tinyint(1) NOT NULL DEFAULT '0', + `message_captcha` tinyint(1) NOT NULL DEFAULT '0', + `message_notify` tinyint(1) NOT NULL DEFAULT '1', + `status` tinyint(1) NOT NULL DEFAULT '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `i18n` +-- + +CREATE TABLE IF NOT EXISTS `i18n` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `locale` varchar(6) COLLATE utf8_unicode_ci NOT NULL, + `model` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `foreign_key` int(10) NOT NULL, + `field` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `content` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `locale` (`locale`), + KEY `model` (`model`), + KEY `row_id` (`foreign_key`), + KEY `field` (`field`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `languages` +-- + +CREATE TABLE IF NOT EXISTS `languages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `native` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL DEFAULT '1', + `weight` int(11) DEFAULT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `parent_id` int(20) DEFAULT NULL, + `menu_id` int(20) NOT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `link` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `target` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `rel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '1', + `lft` int(11) DEFAULT NULL, + `rght` int(11) DEFAULT NULL, + `visibility_roles` text COLLATE utf8_unicode_ci, + `params` text COLLATE utf8_unicode_ci, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `menus` +-- + +CREATE TABLE IF NOT EXISTS `menus` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `status` tinyint(1) NOT NULL DEFAULT '1', + `weight` int(11) DEFAULT NULL, + `link_count` int(11) NOT NULL, + `params` text COLLATE utf8_unicode_ci, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `contact_id` int(11) NOT NULL, + `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `website` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `address` text COLLATE utf8_unicode_ci, + `message_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `meta` +-- + +CREATE TABLE IF NOT EXISTS `meta` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `model` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Node', + `foreign_key` int(20) DEFAULT NULL, + `key` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `value` text COLLATE utf8_unicode_ci, + `weight` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes` +-- + +CREATE TABLE IF NOT EXISTS `nodes` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `parent_id` int(20) DEFAULT NULL, + `user_id` int(20) NOT NULL DEFAULT '0', + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `body` text COLLATE utf8_unicode_ci NOT NULL, + `excerpt` text COLLATE utf8_unicode_ci, + `status` tinyint(1) NOT NULL DEFAULT '0', + `mime_type` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `comment_status` int(1) NOT NULL DEFAULT '1', + `comment_count` int(11) DEFAULT '0', + `promote` tinyint(1) NOT NULL DEFAULT '0', + `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `terms` text COLLATE utf8_unicode_ci, + `sticky` tinyint(1) NOT NULL DEFAULT '0', + `lft` int(11) DEFAULT NULL, + `rght` int(11) DEFAULT NULL, + `visibility_roles` text COLLATE utf8_unicode_ci, + `type` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'node', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes_taxonomies` +-- + +CREATE TABLE IF NOT EXISTS `nodes_taxonomies` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `node_id` int(20) NOT NULL DEFAULT '0', + `taxonomy_id` int(20) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regions` +-- + +CREATE TABLE IF NOT EXISTS `regions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `block_count` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `roles` +-- + +CREATE TABLE IF NOT EXISTS `roles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `settings` +-- + +CREATE TABLE IF NOT EXISTS `settings` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `key` varchar(64) COLLATE utf8_unicode_ci NOT NULL, + `value` text COLLATE utf8_unicode_ci NOT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `input_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text', + `editable` tinyint(1) NOT NULL DEFAULT '1', + `weight` int(11) DEFAULT NULL, + `params` text COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key` (`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `taxonomies` +-- + +CREATE TABLE IF NOT EXISTS `taxonomies` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `parent_id` int(20) DEFAULT NULL, + `term_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `lft` int(11) DEFAULT NULL, + `rght` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `terms` +-- + +CREATE TABLE IF NOT EXISTS `terms` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types` +-- + +CREATE TABLE IF NOT EXISTS `types` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `format_show_author` tinyint(1) NOT NULL DEFAULT '1', + `format_show_date` tinyint(1) NOT NULL DEFAULT '1', + `comment_status` int(1) NOT NULL DEFAULT '1', + `comment_approve` tinyint(1) NOT NULL DEFAULT '1', + `comment_spam_protection` tinyint(1) NOT NULL DEFAULT '0', + `comment_captcha` tinyint(1) NOT NULL DEFAULT '0', + `params` text COLLATE utf8_unicode_ci, + `plugin` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types_vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `types_vocabularies` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `type_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `weight` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` int(20) NOT NULL AUTO_INCREMENT, + `role_id` int(11) NOT NULL, + `username` varchar(60) COLLATE utf8_unicode_ci NOT NULL, + `password` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, + `website` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `activation_key` varchar(60) COLLATE utf8_unicode_ci NOT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bio` text COLLATE utf8_unicode_ci, + `timezone` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', + `status` tinyint(1) NOT NULL DEFAULT '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `vocabularies` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `alias` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci, + `required` tinyint(1) NOT NULL DEFAULT '0', + `multiple` tinyint(1) NOT NULL DEFAULT '0', + `tags` tinyint(1) NOT NULL DEFAULT '0', + `plugin` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `weight` int(11) DEFAULT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/app/config/schema/sql/croogo_data.sql b/app/config/schema/sql/croogo_data.sql new file mode 100644 index 0000000..563276e --- /dev/null +++ b/app/config/schema/sql/croogo_data.sql @@ -0,0 +1,429 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Dumping data for table `acos` +-- + +INSERT IGNORE INTO `acos` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, NULL, NULL, 'controllers', 1, 352), +(2, 1, NULL, NULL, 'Attachments', 2, 13), +(3, 2, NULL, NULL, 'admin_index', 3, 4), +(4, 2, NULL, NULL, 'admin_add', 5, 6), +(5, 2, NULL, NULL, 'admin_edit', 7, 8), +(6, 2, NULL, NULL, 'admin_delete', 9, 10), +(7, 2, NULL, NULL, 'admin_browse', 11, 12), +(8, 1, NULL, NULL, 'Blocks', 14, 29), +(9, 8, NULL, NULL, 'admin_index', 15, 16), +(10, 8, NULL, NULL, 'admin_add', 17, 18), +(11, 8, NULL, NULL, 'admin_edit', 19, 20), +(12, 8, NULL, NULL, 'admin_delete', 21, 22), +(13, 8, NULL, NULL, 'admin_moveup', 23, 24), +(14, 8, NULL, NULL, 'admin_movedown', 25, 26), +(15, 8, NULL, NULL, 'admin_process', 27, 28), +(16, 1, NULL, NULL, 'Comments', 30, 45), +(17, 16, NULL, NULL, 'admin_index', 31, 32), +(18, 16, NULL, NULL, 'admin_edit', 33, 34), +(19, 16, NULL, NULL, 'admin_delete', 35, 36), +(20, 16, NULL, NULL, 'admin_process', 37, 38), +(21, 16, NULL, NULL, 'index', 39, 40), +(22, 16, NULL, NULL, 'add', 41, 42), +(23, 16, NULL, NULL, 'delete', 43, 44), +(24, 1, NULL, NULL, 'Contacts', 46, 57), +(25, 24, NULL, NULL, 'admin_index', 47, 48), +(26, 24, NULL, NULL, 'admin_add', 49, 50), +(27, 24, NULL, NULL, 'admin_edit', 51, 52), +(28, 24, NULL, NULL, 'admin_delete', 53, 54), +(29, 24, NULL, NULL, 'view', 55, 56), +(30, 1, NULL, NULL, 'Filemanager', 58, 79), +(31, 30, NULL, NULL, 'admin_index', 59, 60), +(32, 30, NULL, NULL, 'admin_browse', 61, 62), +(33, 30, NULL, NULL, 'admin_editfile', 63, 64), +(34, 30, NULL, NULL, 'admin_upload', 65, 66), +(35, 30, NULL, NULL, 'admin_delete_file', 67, 68), +(36, 30, NULL, NULL, 'admin_delete_directory', 69, 70), +(37, 30, NULL, NULL, 'admin_rename', 71, 72), +(38, 30, NULL, NULL, 'admin_create_directory', 73, 74), +(39, 30, NULL, NULL, 'admin_create_file', 75, 76), +(40, 30, NULL, NULL, 'admin_chmod', 77, 78), +(41, 1, NULL, NULL, 'Languages', 80, 95), +(42, 41, NULL, NULL, 'admin_index', 81, 82), +(43, 41, NULL, NULL, 'admin_add', 83, 84), +(44, 41, NULL, NULL, 'admin_edit', 85, 86), +(45, 41, NULL, NULL, 'admin_delete', 87, 88), +(46, 41, NULL, NULL, 'admin_moveup', 89, 90), +(47, 41, NULL, NULL, 'admin_movedown', 91, 92), +(48, 41, NULL, NULL, 'admin_select', 93, 94), +(49, 1, NULL, NULL, 'Links', 96, 111), +(50, 49, NULL, NULL, 'admin_index', 97, 98), +(51, 49, NULL, NULL, 'admin_add', 99, 100), +(52, 49, NULL, NULL, 'admin_edit', 101, 102), +(53, 49, NULL, NULL, 'admin_delete', 103, 104), +(54, 49, NULL, NULL, 'admin_moveup', 105, 106), +(55, 49, NULL, NULL, 'admin_movedown', 107, 108), +(56, 49, NULL, NULL, 'admin_process', 109, 110), +(57, 1, NULL, NULL, 'Menus', 112, 121), +(58, 57, NULL, NULL, 'admin_index', 113, 114), +(59, 57, NULL, NULL, 'admin_add', 115, 116), +(60, 57, NULL, NULL, 'admin_edit', 117, 118), +(61, 57, NULL, NULL, 'admin_delete', 119, 120), +(62, 1, NULL, NULL, 'Messages', 122, 131), +(63, 62, NULL, NULL, 'admin_index', 123, 124), +(64, 62, NULL, NULL, 'admin_edit', 125, 126), +(65, 62, NULL, NULL, 'admin_delete', 127, 128), +(66, 62, NULL, NULL, 'admin_process', 129, 130), +(67, 1, NULL, NULL, 'Nodes', 132, 161), +(68, 67, NULL, NULL, 'admin_index', 133, 134), +(69, 67, NULL, NULL, 'admin_create', 135, 136), +(70, 67, NULL, NULL, 'admin_add', 137, 138), +(71, 67, NULL, NULL, 'admin_edit', 139, 140), +(72, 67, NULL, NULL, 'admin_update_paths', 141, 142), +(73, 67, NULL, NULL, 'admin_delete', 143, 144), +(74, 67, NULL, NULL, 'admin_delete_meta', 145, 146), +(75, 67, NULL, NULL, 'admin_add_meta', 147, 148), +(76, 67, NULL, NULL, 'admin_process', 149, 150), +(77, 67, NULL, NULL, 'index', 151, 152), +(78, 67, NULL, NULL, 'term', 153, 154), +(79, 67, NULL, NULL, 'promoted', 155, 156), +(80, 67, NULL, NULL, 'search', 157, 158), +(81, 67, NULL, NULL, 'view', 159, 160), +(82, 1, NULL, NULL, 'Regions', 162, 171), +(83, 82, NULL, NULL, 'admin_index', 163, 164), +(84, 82, NULL, NULL, 'admin_add', 165, 166), +(85, 82, NULL, NULL, 'admin_edit', 167, 168), +(86, 82, NULL, NULL, 'admin_delete', 169, 170), +(87, 1, NULL, NULL, 'Roles', 172, 181), +(88, 87, NULL, NULL, 'admin_index', 173, 174), +(89, 87, NULL, NULL, 'admin_add', 175, 176), +(90, 87, NULL, NULL, 'admin_edit', 177, 178), +(91, 87, NULL, NULL, 'admin_delete', 179, 180), +(92, 1, NULL, NULL, 'Settings', 182, 201), +(93, 92, NULL, NULL, 'admin_dashboard', 183, 184), +(94, 92, NULL, NULL, 'admin_index', 185, 186), +(95, 92, NULL, NULL, 'admin_view', 187, 188), +(96, 92, NULL, NULL, 'admin_add', 189, 190), +(97, 92, NULL, NULL, 'admin_edit', 191, 192), +(98, 92, NULL, NULL, 'admin_delete', 193, 194), +(99, 92, NULL, NULL, 'admin_prefix', 195, 196), +(100, 92, NULL, NULL, 'admin_moveup', 197, 198), +(101, 92, NULL, NULL, 'admin_movedown', 199, 200), +(102, 1, NULL, NULL, 'Terms', 202, 217), +(103, 102, NULL, NULL, 'admin_index', 203, 204), +(104, 102, NULL, NULL, 'admin_add', 205, 206), +(105, 102, NULL, NULL, 'admin_edit', 207, 208), +(106, 102, NULL, NULL, 'admin_delete', 209, 210), +(107, 102, NULL, NULL, 'admin_moveup', 211, 212), +(108, 102, NULL, NULL, 'admin_movedown', 213, 214), +(109, 102, NULL, NULL, 'admin_process', 215, 216), +(110, 1, NULL, NULL, 'Types', 218, 227), +(111, 110, NULL, NULL, 'admin_index', 219, 220), +(112, 110, NULL, NULL, 'admin_add', 221, 222), +(113, 110, NULL, NULL, 'admin_edit', 223, 224), +(114, 110, NULL, NULL, 'admin_delete', 225, 226), +(115, 1, NULL, NULL, 'Users', 228, 261), +(116, 115, NULL, NULL, 'admin_index', 229, 230), +(117, 115, NULL, NULL, 'admin_add', 231, 232), +(118, 115, NULL, NULL, 'admin_edit', 233, 234), +(119, 115, NULL, NULL, 'admin_reset_password', 235, 236), +(120, 115, NULL, NULL, 'admin_delete', 237, 238), +(121, 115, NULL, NULL, 'admin_login', 239, 240), +(122, 115, NULL, NULL, 'admin_logout', 241, 242), +(123, 115, NULL, NULL, 'index', 243, 244), +(124, 115, NULL, NULL, 'add', 245, 246), +(125, 115, NULL, NULL, 'activate', 247, 248), +(126, 115, NULL, NULL, 'edit', 249, 250), +(127, 115, NULL, NULL, 'forgot', 251, 252), +(128, 115, NULL, NULL, 'reset', 253, 254), +(129, 115, NULL, NULL, 'login', 255, 256), +(130, 115, NULL, NULL, 'logout', 257, 258), +(131, 115, NULL, NULL, 'view', 259, 260), +(132, 1, NULL, NULL, 'Vocabularies', 262, 271), +(133, 132, NULL, NULL, 'admin_index', 263, 264), +(134, 132, NULL, NULL, 'admin_add', 265, 266), +(135, 132, NULL, NULL, 'admin_edit', 267, 268), +(136, 132, NULL, NULL, 'admin_delete', 269, 270), +(137, 1, NULL, NULL, 'AclAcos', 272, 281), +(138, 137, NULL, NULL, 'admin_index', 273, 274), +(139, 137, NULL, NULL, 'admin_add', 275, 276), +(140, 137, NULL, NULL, 'admin_edit', 277, 278), +(141, 137, NULL, NULL, 'admin_delete', 279, 280), +(142, 1, NULL, NULL, 'AclActions', 282, 295), +(143, 142, NULL, NULL, 'admin_index', 283, 284), +(144, 142, NULL, NULL, 'admin_add', 285, 286), +(145, 142, NULL, NULL, 'admin_edit', 287, 288), +(146, 142, NULL, NULL, 'admin_delete', 289, 290), +(147, 142, NULL, NULL, 'admin_move', 291, 292), +(148, 142, NULL, NULL, 'admin_generate', 293, 294), +(149, 1, NULL, NULL, 'AclAros', 296, 305), +(150, 149, NULL, NULL, 'admin_index', 297, 298), +(151, 149, NULL, NULL, 'admin_add', 299, 300), +(152, 149, NULL, NULL, 'admin_edit', 301, 302), +(153, 149, NULL, NULL, 'admin_delete', 303, 304), +(154, 1, NULL, NULL, 'AclPermissions', 306, 311), +(155, 154, NULL, NULL, 'admin_index', 307, 308), +(156, 154, NULL, NULL, 'admin_toggle', 309, 310), +(159, 1, NULL, NULL, 'ExtensionsHooks', 312, 317), +(160, 159, NULL, NULL, 'admin_index', 313, 314), +(161, 159, NULL, NULL, 'admin_toggle', 315, 316), +(162, 1, NULL, NULL, 'ExtensionsLocales', 318, 329), +(163, 162, NULL, NULL, 'admin_index', 319, 320), +(164, 162, NULL, NULL, 'admin_activate', 321, 322), +(165, 162, NULL, NULL, 'admin_add', 323, 324), +(166, 162, NULL, NULL, 'admin_edit', 325, 326), +(167, 162, NULL, NULL, 'admin_delete', 327, 328), +(168, 1, NULL, NULL, 'ExtensionsPlugins', 330, 337), +(169, 168, NULL, NULL, 'admin_index', 331, 332), +(170, 168, NULL, NULL, 'admin_add', 333, 334), +(171, 168, NULL, NULL, 'admin_delete', 335, 336), +(172, 1, NULL, NULL, 'ExtensionsThemes', 338, 351), +(173, 172, NULL, NULL, 'admin_index', 339, 340), +(174, 172, NULL, NULL, 'admin_activate', 341, 342), +(175, 172, NULL, NULL, 'admin_add', 343, 344), +(176, 172, NULL, NULL, 'admin_editor', 345, 346), +(177, 172, NULL, NULL, 'admin_save', 347, 348), +(178, 172, NULL, NULL, 'admin_delete', 349, 350); + +-- +-- Dumping data for table `aros` +-- + +INSERT IGNORE INTO `aros` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, 'Role', 1, '', 1, 4), +(2, NULL, 'Role', 2, '', 5, 6), +(3, NULL, 'Role', 3, '', 7, 8), +(5, 1, 'User', 1, '', 2, 3); + +-- +-- Dumping data for table `aros_acos` +-- + +INSERT IGNORE INTO `aros_acos` (`id`, `aro_id`, `aco_id`, `_create`, `_read`, `_update`, `_delete`) VALUES +(1, 2, 23, '1', '1', '1', '1'), +(2, 2, 22, '1', '1', '1', '1'), +(3, 2, 21, '1', '1', '1', '1'), +(4, 3, 21, '1', '1', '1', '1'), +(5, 3, 22, '1', '1', '1', '1'), +(6, 2, 29, '1', '1', '1', '1'), +(7, 3, 29, '1', '1', '1', '1'), +(8, 2, 77, '1', '1', '1', '1'), +(9, 2, 78, '1', '1', '1', '1'), +(10, 2, 79, '1', '1', '1', '1'), +(11, 2, 80, '1', '1', '1', '1'), +(12, 2, 81, '1', '1', '1', '1'), +(13, 3, 77, '1', '1', '1', '1'), +(14, 3, 78, '1', '1', '1', '1'), +(15, 3, 79, '1', '1', '1', '1'), +(16, 3, 80, '1', '1', '1', '1'), +(17, 3, 81, '1', '1', '1', '1'), +(18, 2, 123, '1', '1', '1', '1'), +(19, 3, 124, '1', '1', '1', '1'), +(20, 3, 125, '1', '1', '1', '1'), +(21, 2, 126, '1', '1', '1', '1'), +(22, 3, 127, '1', '1', '1', '1'), +(23, 3, 128, '1', '1', '1', '1'), +(24, 3, 129, '1', '1', '1', '1'), +(25, 2, 130, '1', '1', '1', '1'), +(26, 2, 131, '1', '1', '1', '1'), +(27, 3, 131, '1', '1', '1', '1'); + +-- +-- Dumping data for table `blocks` +-- + +INSERT IGNORE INTO `blocks` (`id`, `region_id`, `title`, `alias`, `body`, `show_title`, `class`, `status`, `weight`, `element`, `visibility_roles`, `visibility_paths`, `visibility_php`, `params`, `updated`, `created`) VALUES +(3, 4, 'About', 'about', 'This is the content of your block. Can be modified in admin panel.', 1, '', 1, 2, '', '', '', '', '', '2009-12-20 03:07:39', '2009-07-26 17:13:14'), +(8, 4, 'Search', 'search', '', 0, '', 1, 1, 'search', '', '', '', '', '2009-12-20 03:07:39', '2009-12-20 03:07:27'), +(5, 4, 'Meta', 'meta', '[menu:meta]', 1, '', 1, 6, '', '', '', '', '', '2009-12-22 05:17:39', '2009-09-12 06:36:22'), +(6, 4, 'Blogroll', 'blogroll', '[menu:blogroll]', 1, '', 1, 4, '', '', '', '', '', '2009-12-20 03:07:33', '2009-09-12 23:33:27'), +(7, 4, 'Categories', 'categories', '[vocabulary:categories type="blog"]', 1, '', 1, 3, '', '', '', '', '', '2009-12-20 03:07:36', '2009-10-03 16:52:50'), +(9, 4, 'Recent Posts', 'recent_posts', '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC" limit="5"]', 1, '', 1, 5, '', '', '', '', '', '2010-04-08 21:09:31', '2009-12-22 05:17:32'); + +-- +-- Dumping data for table `comments` +-- + +INSERT INTO `comments` (`id`, `parent_id`, `node_id`, `user_id`, `name`, `email`, `website`, `ip`, `title`, `body`, `rating`, `status`, `notify`, `type`, `comment_type`, `lft`, `rght`, `updated`, `created`) VALUES +(1, NULL, 1, 0, 'Mr Croogo', 'email@example.com', 'http://www.croogo.org', '127.0.0.1', '', 'Hi, this is the first comment.', NULL, 1, 0, 'blog', 'comment', 1, 2, '2009-12-25 12:00:00', '2009-12-25 12:00:00'); + +-- +-- Dumping data for table `contacts` +-- + +INSERT IGNORE INTO `contacts` (`id`, `title`, `alias`, `body`, `name`, `position`, `address`, `address2`, `state`, `country`, `postcode`, `phone`, `fax`, `email`, `message_status`, `message_archive`, `message_count`, `message_spam_protection`, `message_captcha`, `message_notify`, `status`, `updated`, `created`) VALUES +(1, 'Contact', 'contact', '', '', '', '', '', '', '', '', '', '', 'you@your-site.com', 1, 0, 0, 0, 0, 1, 1, '2009-10-07 22:07:49', '2009-09-16 01:45:17'); + +-- +-- Dumping data for table `i18n` +-- + + +-- +-- Dumping data for table `languages` +-- + +INSERT IGNORE INTO `languages` (`id`, `title`, `native`, `alias`, `status`, `weight`, `updated`, `created`) VALUES +(1, 'English', 'English', 'eng', 1, 1, '2009-11-02 21:37:38', '2009-11-02 20:52:00'); + +-- +-- Dumping data for table `links` +-- + +INSERT IGNORE INTO `links` (`id`, `parent_id`, `menu_id`, `title`, `description`, `link`, `target`, `rel`, `status`, `lft`, `rght`, `visibility_roles`, `params`, `updated`, `created`) VALUES +(5, NULL, 4, 'About', '', 'controller:nodes/action:view/type:page/slug:about', '', '', 1, 3, 4, '', '', '2009-10-06 23:14:21', '2009-08-19 12:23:33'), +(6, NULL, 4, 'Contact', '', 'controller:contacts/action:view/contact', '', '', 1, 5, 6, '', '', '2009-10-06 23:14:45', '2009-08-19 12:34:56'), +(7, NULL, 3, 'Home', '', '/', '', '', 1, 5, 6, '', '', '2009-10-06 21:17:06', '2009-09-06 21:32:54'), +(8, NULL, 3, 'About', '', '/about', '', '', 1, 7, 10, '', '', '2009-09-12 03:45:53', '2009-09-06 21:34:57'), +(9, 8, 3, 'Child link', '', '#', '', '', 0, 8, 9, '', '', '2009-10-06 23:13:06', '2009-09-12 03:52:23'), +(10, NULL, 5, 'Site Admin', '', '/admin', '', '', 1, 1, 2, '', '', '2009-09-12 06:34:09', '2009-09-12 06:34:09'), +(11, NULL, 5, 'Log out', '', '/users/logout', '', '', 1, 7, 8, '["1","2"]', '', '2009-09-12 06:35:22', '2009-09-12 06:34:41'), +(12, NULL, 6, 'Croogo', '', 'http://www.croogo.org', '', '', 1, 3, 4, '', '', '2009-09-12 23:31:59', '2009-09-12 23:31:59'), +(14, NULL, 6, 'CakePHP', '', 'http://www.cakephp.org', '', '', 1, 1, 2, '', '', '2009-10-07 03:25:25', '2009-09-12 23:38:43'), +(15, NULL, 3, 'Contact', '', '/controller:contacts/action:view/contact', '', '', 1, 11, 12, '', '', '2009-09-16 07:54:13', '2009-09-16 07:53:33'), +(16, NULL, 5, 'Entries (RSS)', '', '/nodes/promoted.rss', '', '', 1, 3, 4, '', '', '2009-10-27 17:46:22', '2009-10-27 17:46:22'), +(17, NULL, 5, 'Comments (RSS)', '', '/comments.rss', '', '', 1, 5, 6, '', '', '2009-10-27 17:46:54', '2009-10-27 17:46:54'); + +-- +-- Dumping data for table `menus` +-- + +INSERT IGNORE INTO `menus` (`id`, `title`, `alias`, `description`, `status`, `weight`, `link_count`, `params`, `updated`, `created`) VALUES +(3, 'Main Menu', 'main', '', 1, NULL, 4, '', '2009-08-19 12:21:06', '2009-07-22 01:49:53'), +(4, 'Footer', 'footer', '', 1, NULL, 2, '', '2009-08-19 12:22:42', '2009-08-19 12:22:42'), +(5, 'Meta', 'meta', '', 1, NULL, 4, '', '2009-09-12 06:33:29', '2009-09-12 06:33:29'), +(6, 'Blogroll', 'blogroll', '', 1, NULL, 2, '', '2009-09-12 23:30:24', '2009-09-12 23:30:24'); + +-- +-- Dumping data for table `messages` +-- + + +-- +-- Dumping data for table `meta` +-- + +INSERT IGNORE INTO `meta` (`id`, `model`, `foreign_key`, `key`, `value`, `weight`) VALUES +(1, 'Node', 1, 'meta_keywords', 'key1, key2', NULL); + +-- +-- Dumping data for table `nodes` +-- + +INSERT IGNORE INTO `nodes` (`id`, `parent_id`, `user_id`, `title`, `slug`, `body`, `excerpt`, `status`, `mime_type`, `comment_status`, `comment_count`, `promote`, `path`, `terms`, `sticky`, `lft`, `rght`, `visibility_roles`, `type`, `updated`, `created`) VALUES +(1, NULL, 1, 'Hello World', 'hello-world', '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', '', 1, '', 2, 1, 1, '/blog/hello-world', '{"1":"uncategorized"}', 0, 1, 2, '', 'blog', '2009-12-25 11:00:00', '2009-12-25 11:00:00'), +(2, NULL, 1, 'About', 'about', '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', '', 1, '', 0, 0, 0, '/about', '', 0, 1, 2, '', 'page', '2009-12-25 22:00:00', '2009-12-25 22:00:00'); + +-- +-- Dumping data for table `nodes_taxonomies` +-- + +INSERT INTO `nodes_taxonomies` (`id`, `node_id`, `taxonomy_id`) VALUES +(1, 1, 1); + +-- +-- Dumping data for table `regions` +-- + +INSERT IGNORE INTO `regions` (`id`, `title`, `alias`, `description`, `block_count`) VALUES +(3, 'none', '', '', 0), +(4, 'right', 'right', '', 6), +(6, 'left', 'left', '', 0), +(7, 'header', 'header', '', 0), +(8, 'footer', 'footer', '', 0), +(9, 'region1', 'region1', '', 0), +(10, 'region2', 'region2', '', 0), +(11, 'region3', 'region3', '', 0), +(12, 'region4', 'region4', '', 0), +(13, 'region5', 'region5', '', 0), +(14, 'region6', 'region6', '', 0), +(15, 'region7', 'region7', '', 0), +(16, 'region8', 'region8', '', 0), +(17, 'region9', 'region9', '', 0); + +-- +-- Dumping data for table `roles` +-- + +INSERT IGNORE INTO `roles` (`id`, `title`, `alias`, `created`, `updated`) VALUES +(1, 'Admin', 'admin', '2009-04-05 00:10:34', '2009-04-05 00:10:34'), +(2, 'Registered', 'registered', '2009-04-05 00:10:50', '2009-04-06 05:20:38'), +(3, 'Public', 'public', '2009-04-05 00:12:38', '2009-04-07 01:41:45'); + +-- +-- Dumping data for table `settings` +-- + +INSERT IGNORE INTO `settings` (`id`, `key`, `value`, `title`, `description`, `input_type`, `editable`, `weight`, `params`) VALUES +(6, 'Site.title', 'Croogo', '', '', '', 1, 1, ''), +(7, 'Site.tagline', 'A CakePHP powered Content Management System.', '', '', 'textarea', 1, 2, ''), +(8, 'Site.email', 'you@your-site.com', '', '', '', 1, 3, ''), +(9, 'Site.status', '1', '', '', 'checkbox', 1, 5, ''), +(12, 'Meta.robots', 'index, follow', '', '', '', 1, 6, ''), +(13, 'Meta.keywords', 'croogo, Croogo', '', '', 'textarea', 1, 7, ''), +(14, 'Meta.description', 'Croogo - A CakePHP powered Content Management System', '', '', 'textarea', 1, 8, ''), +(15, 'Meta.generator', 'Croogo - Content Management System', '', '', '', 0, 9, ''), +(16, 'Service.akismet_key', 'your-key', '', '', '', 1, 11, ''), +(17, 'Service.recaptcha_public_key', 'your-public-key', '', '', '', 1, 12, ''), +(18, 'Service.recaptcha_private_key', 'your-private-key', '', '', '', 1, 13, ''), +(19, 'Service.akismet_url', 'http://your-blog.com', '', '', '', 1, 10, ''), +(20, 'Site.theme', '', '', '', '', 0, 14, ''), +(21, 'Site.feed_url', '', '', '', '', 0, 15, ''), +(22, 'Reading.nodes_per_page', '5', '', '', '', 1, 16, ''), +(23, 'Writing.wysiwyg', '1', 'Enable WYSIWYG editor', '', 'checkbox', 1, 17, ''), +(24, 'Comment.level', '1', '', 'levels deep (threaded comments)', '', 1, 18, ''), +(25, 'Comment.feed_limit', '10', '', 'number of comments to show in feed', '', 1, 19, ''), +(26, 'Site.locale', 'eng', '', '', 'text', 0, 20, ''), +(27, 'Reading.date_time_format', 'D, M d Y H:i:s', '', '', '', 1, 21, ''), +(28, 'Comment.date_time_format', 'M d, Y', '', '', '', 1, 22, ''), +(29, 'Site.timezone', '0', '', 'zero (0) for GMT', '', 1, 4, ''), +(32, 'Hook.bootstraps', '', '', '', '', 0, 23, ''); + +-- +-- Dumping data for table `taxonomies` +-- + +INSERT IGNORE INTO `taxonomies` (`id`, `parent_id`, `term_id`, `vocabulary_id`, `lft`, `rght`) VALUES +(1, NULL, 1, 1, 1, 2), +(2, NULL, 2, 1, 3, 4), +(3, NULL, 3, 2, 1, 2); + +-- +-- Dumping data for table `terms` +-- + +INSERT IGNORE INTO `terms` (`id`, `title`, `slug`, `description`, `updated`, `created`) VALUES +(1, 'Uncategorized', 'uncategorized', '', '2009-07-22 03:38:43', '2009-07-22 03:34:56'), +(2, 'Announcements', 'announcements', '', '2010-05-16 23:57:06', '2009-07-22 03:45:37'), +(3, 'mytag', 'mytag', '', '2009-08-26 14:42:43', '2009-08-26 14:42:43'); + +-- +-- Dumping data for table `types` +-- + +INSERT IGNORE INTO `types` (`id`, `title`, `alias`, `description`, `format_show_author`, `format_show_date`, `comment_status`, `comment_approve`, `comment_spam_protection`, `comment_captcha`, `params`, `plugin`, `updated`, `created`) VALUES +(1, 'Page', 'page', 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', 0, 0, 0, 1, 0, 0, '', '', '2009-09-09 00:23:24', '2009-09-02 18:06:27'), +(2, 'Blog', 'blog', 'A blog entry is a single post to an online journal, or blog.', 1, 1, 2, 1, 0, 0, '', '', '2009-09-15 12:15:43', '2009-09-02 18:20:44'), +(4, 'Node', 'node', 'Default content type.', 1, 1, 2, 1, 0, 0, '', '', '2009-10-06 21:53:15', '2009-09-05 23:51:56'); + +-- +-- Dumping data for table `types_vocabularies` +-- + +INSERT IGNORE INTO `types_vocabularies` (`id`, `type_id`, `vocabulary_id`, `weight`) VALUES +(31, 2, 2, NULL), +(30, 2, 1, NULL), +(25, 4, 2, NULL), +(24, 4, 1, NULL); + +-- +-- Dumping data for table `users` +-- + +INSERT IGNORE INTO `users` (`id`, `role_id`, `username`, `password`, `name`, `email`, `website`, `activation_key`, `image`, `bio`, `timezone`, `status`, `updated`, `created`) VALUES +(1, 1, 'admin', 'c054b152596745efa1d197b809fa7fc70ce586e5', 'Administrator', 'you@your-site.com', '/about', '', '', '', '0', 1, '2009-10-07 22:23:27', '2009-04-05 00:20:34'); + +-- +-- Dumping data for table `vocabularies` +-- + +INSERT IGNORE INTO `vocabularies` (`id`, `title`, `alias`, `description`, `required`, `multiple`, `tags`, `plugin`, `weight`, `updated`, `created`) VALUES +(1, 'Categories', 'categories', '', 0, 1, 0, '', 1, '2010-05-17 20:03:11', '2009-07-22 02:16:21'), +(2, 'Tags', 'tags', '', 0, 1, 0, '', 2, '2010-05-17 20:03:11', '2009-07-22 02:16:34'); diff --git a/app/config/schema/sql/db_acl.sql b/app/config/schema/sql/db_acl.sql new file mode 100644 index 0000000..080f06c --- /dev/null +++ b/app/config/schema/sql/db_acl.sql @@ -0,0 +1,40 @@ +# $Id: db_acl.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE aros_acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + aro_id INTEGER(10) UNSIGNED NOT NULL, + aco_id INTEGER(10) UNSIGNED NOT NULL, + _create CHAR(2) NOT NULL DEFAULT 0, + _read CHAR(2) NOT NULL DEFAULT 0, + _update CHAR(2) NOT NULL DEFAULT 0, + _delete CHAR(2) NOT NULL DEFAULT 0, + PRIMARY KEY(id) +); + +CREATE TABLE aros ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); diff --git a/app/config/schema/sql/i18n.sql b/app/config/schema/sql/i18n.sql new file mode 100644 index 0000000..4660a5a --- /dev/null +++ b/app/config/schema/sql/i18n.sql @@ -0,0 +1,26 @@ +# $Id: i18n.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE i18n ( + id int(10) NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content mediumtext, + PRIMARY KEY (id), +# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), +# INDEX I18N_LOCALE_ROW(locale, model, foreign_key), +# INDEX I18N_LOCALE_MODEL(locale, model), +# INDEX I18N_FIELD(model, foreign_key, field), +# INDEX I18N_ROW(model, foreign_key), + INDEX locale (locale), + INDEX model (model), + INDEX row_id (foreign_key), + INDEX field (field) +); diff --git a/app/config/schema/sql/sessions.sql b/app/config/schema/sql/sessions.sql new file mode 100644 index 0000000..23a1925 --- /dev/null +++ b/app/config/schema/sql/sessions.sql @@ -0,0 +1,16 @@ +# $Id: sessions.sql 7118 2008-06-04 20:49:29Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# 1785 E. Sahara Avenue, Suite 490-204 +# Las Vegas, Nevada 89104 +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE cake_sessions ( + id varchar(255) NOT NULL default '', + data text, + expires int(11) default NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/app/config/settings.yml.install b/app/config/settings.yml.install new file mode 100644 index 0000000..9d66ee9 --- /dev/null +++ b/app/config/settings.yml.install @@ -0,0 +1,24 @@ +--- +Comment.date_time_format: M d, Y +Comment.feed_limit: 10 +Comment.level: 1 +Hook.bootstraps: +Meta.description: 'Croogo - A CakePHP powered Content Management System' +Meta.generator: 'Croogo - Content Management System' +Meta.keywords: croogo, Croogo +Meta.robots: index, follow +Reading.date_time_format: D, M d Y H:i:s +Reading.nodes_per_page: 5 +Service.akismet_key: your-key +Service.akismet_url: http://your-blog.com +Service.recaptcha_private_key: your-private-key +Service.recaptcha_public_key: your-public-key +Site.email: you@your-site.com +Site.feed_url: +Site.locale: eng +Site.status: 1 +Site.tagline: A CakePHP powered Content Management System. +Site.theme: +Site.timezone: 0 +Site.title: Croogo +Writing.wysiwyg: 1 diff --git a/app/config/sql/.svn/entries b/app/config/sql/.svn/entries new file mode 100644 index 0000000..ccd8afe --- /dev/null +++ b/app/config/sql/.svn/entries @@ -0,0 +1,300 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/config/sql +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +croogo_data.sql +file + + + + +2010-05-07T04:46:10.000000Z +24e9ecdba8bc674d52bd158348f8dd9c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +22344 + +db_acl.sql +file + + + + +2010-04-14T05:56:52.000000Z +5d2f222f131bd22f0b7837ae93e12707 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1272 + +sessions.sql +file + + + + +2010-04-14T05:56:50.000000Z +126fdb542d5835351d0e45edbbbaa694 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +510 + +i18n.php +file + + + + +2010-04-14T05:56:52.000000Z +a14d1caf408c32b60b9cbab1092691e4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2193 + +croogo.sql +file + + + + +2010-04-14T05:56:52.000000Z +2cc4525cb024c2bfab11de61aecf39cc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +17231 + +db_acl.php +file + + + + +2010-04-14T05:56:52.000000Z +c3e2531c323fc22fc294b75d50e4f51c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3579 + +sessions.php +file + + + + +2010-04-14T05:56:50.000000Z +e2e02e99db61451ba85ce9f32dc1d485 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1705 + +i18n.sql +file + + + + +2010-04-14T05:56:50.000000Z +29ba08f2dc6755c0812f2c76d381cfb9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +868 + diff --git a/app/config/sql/.svn/text-base/croogo.sql.svn-base b/app/config/sql/.svn/text-base/croogo.sql.svn-base new file mode 100644 index 0000000..db10e45 --- /dev/null +++ b/app/config/sql/.svn/text-base/croogo.sql.svn-base @@ -0,0 +1,472 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `acos` +-- + +CREATE TABLE IF NOT EXISTS `acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros` +-- + +CREATE TABLE IF NOT EXISTS `aros` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros_acos` +-- + +CREATE TABLE IF NOT EXISTS `aros_acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `aro_id` int(10) unsigned NOT NULL, + `aco_id` int(10) unsigned NOT NULL, + `_create` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_read` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_update` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_delete` char(2) collate utf8_unicode_ci NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `blocks` +-- + +CREATE TABLE IF NOT EXISTS `blocks` ( + `id` bigint(20) NOT NULL auto_increment, + `region_id` bigint(20) default NULL, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `show_title` tinyint(1) NOT NULL default '1', + `class` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `weight` int(11) default NULL, + `element` varchar(255) collate utf8_unicode_ci NOT NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `visibility_paths` text collate utf8_unicode_ci NOT NULL, + `visibility_php` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comments` +-- + +CREATE TABLE IF NOT EXISTS `comments` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `node_id` bigint(20) NOT NULL, + `user_id` bigint(20) NOT NULL default '0', + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(200) collate utf8_unicode_ci NOT NULL, + `ip` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `rating` int(11) default NULL, + `status` tinyint(1) NOT NULL default '0', + `notify` tinyint(1) NOT NULL default '0', + `type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_type` varchar(100) collate utf8_unicode_ci NOT NULL default 'comment', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `contacts` +-- + +CREATE TABLE IF NOT EXISTS `contacts` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `name` varchar(255) collate utf8_unicode_ci NOT NULL, + `position` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `address2` text collate utf8_unicode_ci NOT NULL, + `state` varchar(100) collate utf8_unicode_ci NOT NULL, + `country` varchar(100) collate utf8_unicode_ci NOT NULL, + `postcode` varchar(100) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `fax` varchar(255) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `message_status` tinyint(1) NOT NULL default '1', + `message_archive` tinyint(1) NOT NULL default '1', + `message_count` int(11) NOT NULL default '0', + `message_spam_protection` tinyint(1) NOT NULL default '0', + `message_captcha` tinyint(1) NOT NULL default '0', + `message_notify` tinyint(1) NOT NULL default '1', + `status` tinyint(1) NOT NULL default '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `i18n` +-- + +CREATE TABLE IF NOT EXISTS `i18n` ( + `id` int(10) NOT NULL auto_increment, + `locale` varchar(6) collate utf8_unicode_ci NOT NULL, + `model` varchar(255) collate utf8_unicode_ci NOT NULL, + `foreign_key` int(10) NOT NULL, + `field` varchar(255) collate utf8_unicode_ci NOT NULL, + `content` mediumtext collate utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `locale` (`locale`), + KEY `model` (`model`), + KEY `row_id` (`foreign_key`), + KEY `field` (`field`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `languages` +-- + +CREATE TABLE IF NOT EXISTS `languages` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `native` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `menu_id` bigint(20) NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `link` varchar(255) collate utf8_unicode_ci NOT NULL, + `target` varchar(255) collate utf8_unicode_ci NOT NULL, + `rel` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `menus` +-- + +CREATE TABLE IF NOT EXISTS `menus` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `link_count` int(11) NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id` int(11) NOT NULL auto_increment, + `contact_id` int(11) NOT NULL, + `name` varchar(100) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `website` varchar(255) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `message_type` varchar(255) collate utf8_unicode_ci default NULL, + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `meta` +-- + +CREATE TABLE IF NOT EXISTS `meta` ( + `id` bigint(20) NOT NULL auto_increment, + `model` varchar(255) collate utf8_unicode_ci NOT NULL default 'Node', + `foreign_key` bigint(20) default NULL, + `key` varchar(255) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes` +-- + +CREATE TABLE IF NOT EXISTS `nodes` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `user_id` bigint(20) NOT NULL default '0', + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `excerpt` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `mime_type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_status` int(1) NOT NULL default '1', + `comment_count` int(11) default '0', + `promote` tinyint(1) NOT NULL default '0', + `path` varchar(255) collate utf8_unicode_ci NOT NULL, + `terms` text collate utf8_unicode_ci NOT NULL, + `sticky` tinyint(1) NOT NULL default '0', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `type` varchar(100) collate utf8_unicode_ci NOT NULL default 'node', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`), + FULLTEXT KEY `body` (`body`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes_terms` +-- + +CREATE TABLE IF NOT EXISTS `nodes_terms` ( + `id` bigint(20) NOT NULL auto_increment, + `node_id` int(10) NOT NULL default '0', + `vocabulary_id` int(10) NOT NULL default '0', + `term_id` int(10) NOT NULL default '0', + `weight` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regions` +-- + +CREATE TABLE IF NOT EXISTS `regions` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `block_count` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `roles` +-- + +CREATE TABLE IF NOT EXISTS `roles` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `created` datetime default NULL, + `updated` datetime default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `settings` +-- + +CREATE TABLE IF NOT EXISTS `settings` ( + `id` bigint(20) NOT NULL auto_increment, + `key` varchar(64) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` varchar(255) collate utf8_unicode_ci NOT NULL, + `input_type` varchar(255) collate utf8_unicode_ci NOT NULL default 'text', + `editable` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `params` text collate utf8_unicode_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key` (`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `terms` +-- + +CREATE TABLE IF NOT EXISTS `terms` ( + `id` int(10) NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `vocabulary_id` int(10) NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `lft` int(11) NOT NULL, + `rght` int(11) NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types` +-- + +CREATE TABLE IF NOT EXISTS `types` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `format_show_author` tinyint(1) NOT NULL default '1', + `format_show_date` tinyint(1) NOT NULL default '1', + `comment_status` int(1) NOT NULL default '1', + `comment_approve` tinyint(1) NOT NULL default '1', + `comment_spam_protection` tinyint(1) NOT NULL default '0', + `comment_captcha` tinyint(1) NOT NULL default '0', + `params` text collate utf8_unicode_ci NOT NULL, + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types_vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `types_vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `type_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` bigint(20) NOT NULL auto_increment, + `role_id` int(11) NOT NULL, + `username` varchar(60) collate utf8_unicode_ci NOT NULL, + `password` varchar(100) collate utf8_unicode_ci NOT NULL, + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(100) collate utf8_unicode_ci NOT NULL, + `activation_key` varchar(60) collate utf8_unicode_ci NOT NULL, + `image` varchar(255) collate utf8_unicode_ci NOT NULL, + `bio` text collate utf8_unicode_ci NOT NULL, + `timezone` varchar(10) collate utf8_unicode_ci NOT NULL default '0', + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `required` tinyint(1) NOT NULL default '0', + `multiple` tinyint(1) NOT NULL default '0', + `tags` tinyint(1) NOT NULL default '0', + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `term_count` int(10) NOT NULL default '0', + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/app/config/sql/.svn/text-base/croogo_data.sql.svn-base b/app/config/sql/.svn/text-base/croogo_data.sql.svn-base new file mode 100644 index 0000000..777238c --- /dev/null +++ b/app/config/sql/.svn/text-base/croogo_data.sql.svn-base @@ -0,0 +1,448 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Dumping data for table `acos` +-- + +INSERT IGNORE INTO `acos` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, NULL, NULL, 'controllers', 1, 352), +(2, 1, NULL, NULL, 'Attachments', 2, 13), +(3, 2, NULL, NULL, 'admin_index', 3, 4), +(4, 2, NULL, NULL, 'admin_add', 5, 6), +(5, 2, NULL, NULL, 'admin_edit', 7, 8), +(6, 2, NULL, NULL, 'admin_delete', 9, 10), +(7, 2, NULL, NULL, 'admin_browse', 11, 12), +(8, 1, NULL, NULL, 'Blocks', 14, 29), +(9, 8, NULL, NULL, 'admin_index', 15, 16), +(10, 8, NULL, NULL, 'admin_add', 17, 18), +(11, 8, NULL, NULL, 'admin_edit', 19, 20), +(12, 8, NULL, NULL, 'admin_delete', 21, 22), +(13, 8, NULL, NULL, 'admin_moveup', 23, 24), +(14, 8, NULL, NULL, 'admin_movedown', 25, 26), +(15, 8, NULL, NULL, 'admin_process', 27, 28), +(16, 1, NULL, NULL, 'Comments', 30, 45), +(17, 16, NULL, NULL, 'admin_index', 31, 32), +(18, 16, NULL, NULL, 'admin_edit', 33, 34), +(19, 16, NULL, NULL, 'admin_delete', 35, 36), +(20, 16, NULL, NULL, 'admin_process', 37, 38), +(21, 16, NULL, NULL, 'index', 39, 40), +(22, 16, NULL, NULL, 'add', 41, 42), +(23, 16, NULL, NULL, 'delete', 43, 44), +(24, 1, NULL, NULL, 'Contacts', 46, 57), +(25, 24, NULL, NULL, 'admin_index', 47, 48), +(26, 24, NULL, NULL, 'admin_add', 49, 50), +(27, 24, NULL, NULL, 'admin_edit', 51, 52), +(28, 24, NULL, NULL, 'admin_delete', 53, 54), +(29, 24, NULL, NULL, 'view', 55, 56), +(30, 1, NULL, NULL, 'Filemanager', 58, 79), +(31, 30, NULL, NULL, 'admin_index', 59, 60), +(32, 30, NULL, NULL, 'admin_browse', 61, 62), +(33, 30, NULL, NULL, 'admin_editfile', 63, 64), +(34, 30, NULL, NULL, 'admin_upload', 65, 66), +(35, 30, NULL, NULL, 'admin_delete_file', 67, 68), +(36, 30, NULL, NULL, 'admin_delete_directory', 69, 70), +(37, 30, NULL, NULL, 'admin_rename', 71, 72), +(38, 30, NULL, NULL, 'admin_create_directory', 73, 74), +(39, 30, NULL, NULL, 'admin_create_file', 75, 76), +(40, 30, NULL, NULL, 'admin_chmod', 77, 78), +(41, 1, NULL, NULL, 'Languages', 80, 95), +(42, 41, NULL, NULL, 'admin_index', 81, 82), +(43, 41, NULL, NULL, 'admin_add', 83, 84), +(44, 41, NULL, NULL, 'admin_edit', 85, 86), +(45, 41, NULL, NULL, 'admin_delete', 87, 88), +(46, 41, NULL, NULL, 'admin_moveup', 89, 90), +(47, 41, NULL, NULL, 'admin_movedown', 91, 92), +(48, 41, NULL, NULL, 'admin_select', 93, 94), +(49, 1, NULL, NULL, 'Links', 96, 111), +(50, 49, NULL, NULL, 'admin_index', 97, 98), +(51, 49, NULL, NULL, 'admin_add', 99, 100), +(52, 49, NULL, NULL, 'admin_edit', 101, 102), +(53, 49, NULL, NULL, 'admin_delete', 103, 104), +(54, 49, NULL, NULL, 'admin_moveup', 105, 106), +(55, 49, NULL, NULL, 'admin_movedown', 107, 108), +(56, 49, NULL, NULL, 'admin_process', 109, 110), +(57, 1, NULL, NULL, 'Menus', 112, 121), +(58, 57, NULL, NULL, 'admin_index', 113, 114), +(59, 57, NULL, NULL, 'admin_add', 115, 116), +(60, 57, NULL, NULL, 'admin_edit', 117, 118), +(61, 57, NULL, NULL, 'admin_delete', 119, 120), +(62, 1, NULL, NULL, 'Messages', 122, 131), +(63, 62, NULL, NULL, 'admin_index', 123, 124), +(64, 62, NULL, NULL, 'admin_edit', 125, 126), +(65, 62, NULL, NULL, 'admin_delete', 127, 128), +(66, 62, NULL, NULL, 'admin_process', 129, 130), +(67, 1, NULL, NULL, 'Nodes', 132, 161), +(68, 67, NULL, NULL, 'admin_index', 133, 134), +(69, 67, NULL, NULL, 'admin_create', 135, 136), +(70, 67, NULL, NULL, 'admin_add', 137, 138), +(71, 67, NULL, NULL, 'admin_edit', 139, 140), +(72, 67, NULL, NULL, 'admin_update_paths', 141, 142), +(73, 67, NULL, NULL, 'admin_delete', 143, 144), +(74, 67, NULL, NULL, 'admin_delete_meta', 145, 146), +(75, 67, NULL, NULL, 'admin_add_meta', 147, 148), +(76, 67, NULL, NULL, 'admin_process', 149, 150), +(77, 67, NULL, NULL, 'index', 151, 152), +(78, 67, NULL, NULL, 'term', 153, 154), +(79, 67, NULL, NULL, 'promoted', 155, 156), +(80, 67, NULL, NULL, 'search', 157, 158), +(81, 67, NULL, NULL, 'view', 159, 160), +(82, 1, NULL, NULL, 'Regions', 162, 171), +(83, 82, NULL, NULL, 'admin_index', 163, 164), +(84, 82, NULL, NULL, 'admin_add', 165, 166), +(85, 82, NULL, NULL, 'admin_edit', 167, 168), +(86, 82, NULL, NULL, 'admin_delete', 169, 170), +(87, 1, NULL, NULL, 'Roles', 172, 181), +(88, 87, NULL, NULL, 'admin_index', 173, 174), +(89, 87, NULL, NULL, 'admin_add', 175, 176), +(90, 87, NULL, NULL, 'admin_edit', 177, 178), +(91, 87, NULL, NULL, 'admin_delete', 179, 180), +(92, 1, NULL, NULL, 'Settings', 182, 201), +(93, 92, NULL, NULL, 'admin_dashboard', 183, 184), +(94, 92, NULL, NULL, 'admin_index', 185, 186), +(95, 92, NULL, NULL, 'admin_view', 187, 188), +(96, 92, NULL, NULL, 'admin_add', 189, 190), +(97, 92, NULL, NULL, 'admin_edit', 191, 192), +(98, 92, NULL, NULL, 'admin_delete', 193, 194), +(99, 92, NULL, NULL, 'admin_prefix', 195, 196), +(100, 92, NULL, NULL, 'admin_moveup', 197, 198), +(101, 92, NULL, NULL, 'admin_movedown', 199, 200), +(102, 1, NULL, NULL, 'Terms', 202, 217), +(103, 102, NULL, NULL, 'admin_index', 203, 204), +(104, 102, NULL, NULL, 'admin_add', 205, 206), +(105, 102, NULL, NULL, 'admin_edit', 207, 208), +(106, 102, NULL, NULL, 'admin_delete', 209, 210), +(107, 102, NULL, NULL, 'admin_moveup', 211, 212), +(108, 102, NULL, NULL, 'admin_movedown', 213, 214), +(109, 102, NULL, NULL, 'admin_process', 215, 216), +(110, 1, NULL, NULL, 'Types', 218, 227), +(111, 110, NULL, NULL, 'admin_index', 219, 220), +(112, 110, NULL, NULL, 'admin_add', 221, 222), +(113, 110, NULL, NULL, 'admin_edit', 223, 224), +(114, 110, NULL, NULL, 'admin_delete', 225, 226), +(115, 1, NULL, NULL, 'Users', 228, 261), +(116, 115, NULL, NULL, 'admin_index', 229, 230), +(117, 115, NULL, NULL, 'admin_add', 231, 232), +(118, 115, NULL, NULL, 'admin_edit', 233, 234), +(119, 115, NULL, NULL, 'admin_reset_password', 235, 236), +(120, 115, NULL, NULL, 'admin_delete', 237, 238), +(121, 115, NULL, NULL, 'admin_login', 239, 240), +(122, 115, NULL, NULL, 'admin_logout', 241, 242), +(123, 115, NULL, NULL, 'index', 243, 244), +(124, 115, NULL, NULL, 'add', 245, 246), +(125, 115, NULL, NULL, 'activate', 247, 248), +(126, 115, NULL, NULL, 'edit', 249, 250), +(127, 115, NULL, NULL, 'forgot', 251, 252), +(128, 115, NULL, NULL, 'reset', 253, 254), +(129, 115, NULL, NULL, 'login', 255, 256), +(130, 115, NULL, NULL, 'logout', 257, 258), +(131, 115, NULL, NULL, 'view', 259, 260), +(132, 1, NULL, NULL, 'Vocabularies', 262, 271), +(133, 132, NULL, NULL, 'admin_index', 263, 264), +(134, 132, NULL, NULL, 'admin_add', 265, 266), +(135, 132, NULL, NULL, 'admin_edit', 267, 268), +(136, 132, NULL, NULL, 'admin_delete', 269, 270), +(137, 1, NULL, NULL, 'AclAcos', 272, 281), +(138, 137, NULL, NULL, 'admin_index', 273, 274), +(139, 137, NULL, NULL, 'admin_add', 275, 276), +(140, 137, NULL, NULL, 'admin_edit', 277, 278), +(141, 137, NULL, NULL, 'admin_delete', 279, 280), +(142, 1, NULL, NULL, 'AclActions', 282, 295), +(143, 142, NULL, NULL, 'admin_index', 283, 284), +(144, 142, NULL, NULL, 'admin_add', 285, 286), +(145, 142, NULL, NULL, 'admin_edit', 287, 288), +(146, 142, NULL, NULL, 'admin_delete', 289, 290), +(147, 142, NULL, NULL, 'admin_move', 291, 292), +(148, 142, NULL, NULL, 'admin_generate', 293, 294), +(149, 1, NULL, NULL, 'AclAros', 296, 305), +(150, 149, NULL, NULL, 'admin_index', 297, 298), +(151, 149, NULL, NULL, 'admin_add', 299, 300), +(152, 149, NULL, NULL, 'admin_edit', 301, 302), +(153, 149, NULL, NULL, 'admin_delete', 303, 304), +(154, 1, NULL, NULL, 'AclPermissions', 306, 311), +(155, 154, NULL, NULL, 'admin_index', 307, 308), +(156, 154, NULL, NULL, 'admin_toggle', 309, 310), +(159, 1, NULL, NULL, 'ExtensionsHooks', 312, 317), +(160, 159, NULL, NULL, 'admin_index', 313, 314), +(161, 159, NULL, NULL, 'admin_toggle', 315, 316), +(162, 1, NULL, NULL, 'ExtensionsLocales', 318, 329), +(163, 162, NULL, NULL, 'admin_index', 319, 320), +(164, 162, NULL, NULL, 'admin_activate', 321, 322), +(165, 162, NULL, NULL, 'admin_add', 323, 324), +(166, 162, NULL, NULL, 'admin_edit', 325, 326), +(167, 162, NULL, NULL, 'admin_delete', 327, 328), +(168, 1, NULL, NULL, 'ExtensionsPlugins', 330, 337), +(169, 168, NULL, NULL, 'admin_index', 331, 332), +(170, 168, NULL, NULL, 'admin_add', 333, 334), +(171, 168, NULL, NULL, 'admin_delete', 335, 336), +(172, 1, NULL, NULL, 'ExtensionsThemes', 338, 351), +(173, 172, NULL, NULL, 'admin_index', 339, 340), +(174, 172, NULL, NULL, 'admin_activate', 341, 342), +(175, 172, NULL, NULL, 'admin_add', 343, 344), +(176, 172, NULL, NULL, 'admin_editor', 345, 346), +(177, 172, NULL, NULL, 'admin_save', 347, 348), +(178, 172, NULL, NULL, 'admin_delete', 349, 350)/*, + + +(179, 1, NULL, NULL, 'Codigos', 352, 369), +(180, 179, NULL, NULL, 'admin_index', 353, 354), +(182, 179, NULL, NULL, 'admin_add', 355, 356), +(183, 179, NULL, NULL, 'admin_edit', 357, 358), +(183, 179, NULL, NULL, 'admin_view', 359, 360), +(184, 179, NULL, NULL, 'admin_delete', 361, 362), +(185, 179, NULL, NULL, 'add', 363, 364), +(186, 179, NULL, NULL, 'rastrear', 365, 366), +(187, 179, NULL, NULL, 'index', 367, 368), + +(188, 1, NULL, NULL, 'Rastreamento', 370, 389), +(189, 188, NULL, NULL, 'admin_index', 371, 372), +(190, 188, NULL, NULL, 'admin_add', 373, 374), +(191, 188, NULL, NULL, 'admin_edit', 375, 376), +(192, 188, NULL, NULL, 'admin_view', 377, 378), +(193, 188, NULL, NULL, 'admin_delete', 379, 380), +(194, 188, NULL, NULL, 'add', 381, 382), +(195, 188, NULL, NULL, 'view', 383, 384), +(196, 188, NULL, NULL, 'index', 385, 386), +(197, 188, NULL, NULL, 'rastrear', 387, 388) +*/ +; + +-- +-- Dumping data for table `aros` +-- + +INSERT IGNORE INTO `aros` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, 'Role', 1, '', 1, 4), +(2, NULL, 'Role', 2, '', 5, 6), +(3, NULL, 'Role', 3, '', 7, 8), +(5, 1, 'User', 1, '', 2, 3); + +-- +-- Dumping data for table `aros_acos` +-- + +INSERT IGNORE INTO `aros_acos` (`id`, `aro_id`, `aco_id`, `_create`, `_read`, `_update`, `_delete`) VALUES +(1, 2, 23, '1', '1', '1', '1'), +(2, 2, 22, '1', '1', '1', '1'), +(3, 2, 21, '1', '1', '1', '1'), +(4, 3, 21, '1', '1', '1', '1'), +(5, 3, 22, '1', '1', '1', '1'), +(6, 2, 29, '1', '1', '1', '1'), +(7, 3, 29, '1', '1', '1', '1'), +(8, 2, 77, '1', '1', '1', '1'), +(9, 2, 78, '1', '1', '1', '1'), +(10, 2, 79, '1', '1', '1', '1'), +(11, 2, 80, '1', '1', '1', '1'), +(12, 2, 81, '1', '1', '1', '1'), +(13, 3, 77, '1', '1', '1', '1'), +(14, 3, 78, '1', '1', '1', '1'), +(15, 3, 79, '1', '1', '1', '1'), +(16, 3, 80, '1', '1', '1', '1'), +(17, 3, 81, '1', '1', '1', '1'), +(18, 2, 123, '1', '1', '1', '1'), +(19, 3, 124, '1', '1', '1', '1'), +(20, 3, 125, '1', '1', '1', '1'), +(21, 2, 126, '1', '1', '1', '1'), +(22, 3, 127, '1', '1', '1', '1'), +(23, 3, 128, '1', '1', '1', '1'), +(24, 3, 129, '1', '1', '1', '1'), +(25, 2, 130, '1', '1', '1', '1'), +(26, 2, 131, '1', '1', '1', '1'), +(27, 3, 131, '1', '1', '1', '1'); + +-- +-- Dumping data for table `blocks` +-- + +INSERT IGNORE INTO `blocks` (`id`, `region_id`, `title`, `alias`, `body`, `show_title`, `class`, `status`, `weight`, `element`, `visibility_roles`, `visibility_paths`, `visibility_php`, `params`, `updated`, `created`) VALUES +(3, 4, 'About', 'about', 'This is the content of your block. Can be modified in admin panel.', 1, '', 1, 2, '', '', '', '', '', '2009-12-20 03:07:39', '2009-07-26 17:13:14'), +(8, 4, 'Search', 'search', '', 0, '', 1, 1, 'search', '', '', '', '', '2009-12-20 03:07:39', '2009-12-20 03:07:27'), +(5, 4, 'Meta', 'meta', '[menu:meta]', 1, '', 1, 6, '', '', '', '', '', '2009-12-22 05:17:39', '2009-09-12 06:36:22'), +(6, 4, 'Blogroll', 'blogroll', '[menu:blogroll]', 1, '', 1, 4, '', '', '', '', '', '2009-12-20 03:07:33', '2009-09-12 23:33:27'), +(7, 4, 'Categories', 'categories', '[vocabulary:categories type="blog"]', 1, '', 1, 3, '', '', '', '', '', '2009-12-20 03:07:36', '2009-10-03 16:52:50'), +(9, 4, 'Recent Posts', 'recent_posts', '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC"]', 1, '', 1, 5, '', '', '', '', '', '2009-12-22 05:17:39', '2009-12-22 05:17:32'); + +-- +-- Dumping data for table `comments` +-- + +INSERT IGNORE INTO `comments` (`id`, `parent_id`, `node_id`, `user_id`, `name`, `email`, `website`, `ip`, `title`, `body`, `rating`, `status`, `notify`, `type`, `comment_type`, `lft`, `rght`, `updated`, `created`) VALUES +(13, NULL, 21, 0, 'Mr Croogo', 'email@example.com', 'http://www.croogo.org', '127.0.0.1', '', 'Hi, this is the first comment.', NULL, 1, 0, 'blog', 'comment', 1, 2, '2009-10-06 22:13:05', '2009-10-03 19:43:52'); + +-- +-- Dumping data for table `contacts` +-- + +INSERT IGNORE INTO `contacts` (`id`, `title`, `alias`, `body`, `name`, `position`, `address`, `address2`, `state`, `country`, `postcode`, `phone`, `fax`, `email`, `message_status`, `message_archive`, `message_count`, `message_spam_protection`, `message_captcha`, `message_notify`, `status`, `updated`, `created`) VALUES +(1, 'Contact', 'contact', '', '', '', '', '', '', '', '', '', '', 'you@your-site.com', 1, 0, 0, 0, 0, 1, 1, '2009-10-07 22:07:49', '2009-09-16 01:45:17'); + +-- +-- Dumping data for table `i18n` +-- + + +-- +-- Dumping data for table `languages` +-- + +INSERT IGNORE INTO `languages` (`id`, `title`, `native`, `alias`, `status`, `weight`, `updated`, `created`) VALUES +(1, 'English', 'English', 'eng', 1, 1, '2009-11-02 21:37:38', '2009-11-02 20:52:00'); + +-- +-- Dumping data for table `links` +-- + +INSERT IGNORE INTO `links` (`id`, `parent_id`, `menu_id`, `title`, `description`, `link`, `target`, `rel`, `status`, `lft`, `rght`, `visibility_roles`, `params`, `updated`, `created`) VALUES +(5, NULL, 4, 'About', '', 'controller:nodes/action:view/type:page/slug:about', '', '', 1, 3, 4, '', '', '2009-10-06 23:14:21', '2009-08-19 12:23:33'), +(6, NULL, 4, 'Contact', '', 'controller:contacts/action:view/contact', '', '', 1, 5, 6, '', '', '2009-10-06 23:14:45', '2009-08-19 12:34:56'), +(7, NULL, 3, 'Home', '', '/', '', '', 1, 5, 6, '', '', '2009-10-06 21:17:06', '2009-09-06 21:32:54'), +(8, NULL, 3, 'About', '', '/about', '', '', 1, 7, 10, '', '', '2009-09-12 03:45:53', '2009-09-06 21:34:57'), +(9, 8, 3, 'Child link', '', '#', '', '', 0, 8, 9, '', '', '2009-10-06 23:13:06', '2009-09-12 03:52:23'), +(10, NULL, 5, 'Site Admin', '', '/admin', '', '', 1, 1, 2, '', '', '2009-09-12 06:34:09', '2009-09-12 06:34:09'), +(11, NULL, 5, 'Log out', '', '/users/logout', '', '', 1, 7, 8, '["1","2"]', '', '2009-09-12 06:35:22', '2009-09-12 06:34:41'), +(12, NULL, 6, 'Croogo', '', 'http://www.croogo.org', '', '', 1, 3, 4, '', '', '2009-09-12 23:31:59', '2009-09-12 23:31:59'), +(14, NULL, 6, 'CakePHP', '', 'http://www.cakephp.org', '', '', 1, 1, 2, '', '', '2009-10-07 03:25:25', '2009-09-12 23:38:43'), +(15, NULL, 3, 'Contact', '', '/controller:contacts/action:view/contact', '', '', 1, 11, 12, '', '', '2009-09-16 07:54:13', '2009-09-16 07:53:33'), +(16, NULL, 5, 'Entries (RSS)', '', '/nodes/promoted.rss', '', '', 1, 3, 4, '', '', '2009-10-27 17:46:22', '2009-10-27 17:46:22'), +(17, NULL, 5, 'Comments (RSS)', '', '/comments.rss', '', '', 1, 5, 6, '', '', '2009-10-27 17:46:54', '2009-10-27 17:46:54'); + +-- +-- Dumping data for table `menus` +-- + +INSERT IGNORE INTO `menus` (`id`, `title`, `alias`, `description`, `status`, `weight`, `link_count`, `params`, `updated`, `created`) VALUES +(3, 'Main Menu', 'main', '', 1, NULL, 4, '', '2009-08-19 12:21:06', '2009-07-22 01:49:53'), +(4, 'Footer', 'footer', '', 1, NULL, 2, '', '2009-08-19 12:22:42', '2009-08-19 12:22:42'), +(5, 'Meta', 'meta', '', 1, NULL, 4, '', '2009-09-12 06:33:29', '2009-09-12 06:33:29'), +(6, 'Blogroll', 'blogroll', '', 1, NULL, 2, '', '2009-09-12 23:30:24', '2009-09-12 23:30:24'); + +-- +-- Dumping data for table `messages` +-- + + +-- +-- Dumping data for table `meta` +-- + +INSERT IGNORE INTO `meta` (`id`, `model`, `foreign_key`, `key`, `value`, `weight`) VALUES +(23, 'Node', 20, 'meta_keywords', 'key1, key2', NULL); + +-- +-- Dumping data for table `nodes` +-- + +INSERT IGNORE INTO `nodes` (`id`, `parent_id`, `user_id`, `title`, `slug`, `body`, `excerpt`, `status`, `mime_type`, `comment_status`, `comment_count`, `promote`, `path`, `terms`, `sticky`, `lft`, `rght`, `visibility_roles`, `type`, `updated`, `created`) VALUES +(20, NULL, 1, 'About', 'about', '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', '', 1, '', 0, 0, 0, '/about', '', 0, 1, 2, '', 'page', '2009-12-28 21:54:31', '2009-12-25 22:00:00'), +(21, NULL, 1, 'Hello World', 'hello-world', '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', '', 1, '', 2, 1, 1, '/blog/hello-world', '{"1":"uncategorized"}', 0, 1, 2, '', 'blog', '2009-12-28 21:55:09', '2009-12-25 11:00:00'); + +-- +-- Dumping data for table `nodes_terms` +-- + +INSERT IGNORE INTO `nodes_terms` (`id`, `node_id`, `vocabulary_id`, `term_id`, `weight`) VALUES +(6407, 21, 0, 1, NULL); + +-- +-- Dumping data for table `regions` +-- + +INSERT IGNORE INTO `regions` (`id`, `title`, `alias`, `description`, `block_count`) VALUES +(3, 'none', '', '', 0), +(4, 'right', 'right', '', 6), +(6, 'left', 'left', '', 0), +(7, 'header', 'header', '', 0), +(8, 'footer', 'footer', '', 0), +(9, 'region1', 'region1', '', 0), +(10, 'region2', 'region2', '', 0), +(11, 'region3', 'region3', '', 0), +(12, 'region4', 'region4', '', 0), +(13, 'region5', 'region5', '', 0), +(14, 'region6', 'region6', '', 0), +(15, 'region7', 'region7', '', 0), +(16, 'region8', 'region8', '', 0), +(17, 'region9', 'region9', '', 0); + +-- +-- Dumping data for table `roles` +-- + +INSERT IGNORE INTO `roles` (`id`, `title`, `alias`, `created`, `updated`) VALUES +(1, 'Admin', 'admin', '2009-04-05 00:10:34', '2009-04-05 00:10:34'), +(2, 'Registered', 'registered', '2009-04-05 00:10:50', '2009-04-06 05:20:38'), +(3, 'Public', 'public', '2009-04-05 00:12:38', '2009-04-07 01:41:45'); + +-- +-- Dumping data for table `settings` +-- + +INSERT IGNORE INTO `settings` (`id`, `key`, `value`, `title`, `description`, `input_type`, `editable`, `weight`, `params`) VALUES +(6, 'Site.title', 'Croogo', '', '', '', 1, 1, ''), +(7, 'Site.tagline', 'A CakePHP powered Content Management System.', '', '', 'textarea', 1, 2, ''), +(8, 'Site.email', 'you@your-site.com', '', '', '', 1, 3, ''), +(9, 'Site.status', '1', '', '', 'checkbox', 1, 5, ''), +(12, 'Meta.robots', 'index, follow', '', '', '', 1, 6, ''), +(13, 'Meta.keywords', 'croogo, Croogo', '', '', 'textarea', 1, 7, ''), +(14, 'Meta.description', 'Croogo - A CakePHP powered Content Management System', '', '', 'textarea', 1, 8, ''), +(15, 'Meta.generator', 'Croogo - Content Management System', '', '', '', 0, 9, ''), +(16, 'Service.akismet_key', 'your-key', '', '', '', 1, 11, ''), +(17, 'Service.recaptcha_public_key', 'your-public-key', '', '', '', 1, 12, ''), +(18, 'Service.recaptcha_private_key', 'your-private-key', '', '', '', 1, 13, ''), +(19, 'Service.akismet_url', 'http://your-blog.com', '', '', '', 1, 10, ''), +(20, 'Site.theme', '', '', '', '', 0, 14, ''), +(21, 'Site.feed_url', '', '', '', '', 0, 15, ''), +(22, 'Reading.nodes_per_page', '5', '', '', '', 1, 16, ''), +(23, 'Writing.wysiwyg', '1', 'Enable WYSIWYG editor', '', 'checkbox', 1, 17, ''), +(24, 'Comment.level', '1', '', 'levels deep (threaded comments)', '', 1, 18, ''), +(25, 'Comment.feed_limit', '10', '', 'number of comments to show in feed', '', 1, 19, ''), +(26, 'Site.locale', 'eng', '', '', 'text', 0, 20, ''), +(27, 'Reading.date_time_format', 'D, M d Y H:i:s', '', '', '', 1, 21, ''), +(28, 'Comment.date_time_format', 'M d, Y', '', '', '', 1, 22, ''), +(29, 'Site.timezone', '0', '', 'zero (0) for GMT', '', 1, 4, ''), +(30, 'Hook.helpers', 'Tinymce.TinymceHook', '', '', '', 0, 23, ''), +(31, 'Hook.components', '', '', '', '', 0, 24, ''), +(32, 'Hook.bootstraps', '', '', '', '', 0, 25, ''), +(33, 'Hook.routes', '', '', '', '', 0, 26, ''); + +-- +-- Dumping data for table `terms` +-- + +INSERT IGNORE INTO `terms` (`id`, `parent_id`, `vocabulary_id`, `title`, `slug`, `description`, `lft`, `rght`, `status`, `updated`, `created`) VALUES +(1, NULL, 1, 'Uncategorized', 'uncategorized', '', 1, 2, 1, '2009-07-22 03:38:43', '2009-07-22 03:34:56'), +(2, NULL, 1, 'Announcements', 'announcements', '', 3, 8, 1, '2009-07-22 03:45:37', '2009-07-22 03:45:37'), +(6, NULL, 2, 'mytag', 'mytag', '', 9, 10, 1, '2009-08-26 14:42:43', '2009-08-26 14:42:43'), +(7, NULL, 3, 'test term', 'test-term-1', '', 11, 12, 1, '2009-09-02 19:27:26', '2009-09-02 19:27:26'); + +-- +-- Dumping data for table `types` +-- + +INSERT IGNORE INTO `types` (`id`, `title`, `alias`, `description`, `format_show_author`, `format_show_date`, `comment_status`, `comment_approve`, `comment_spam_protection`, `comment_captcha`, `params`, `plugin`, `updated`, `created`) VALUES +(1, 'Page', 'page', 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', 0, 0, 0, 1, 0, 0, '', '', '2009-09-09 00:23:24', '2009-09-02 18:06:27'), +(2, 'Blog', 'blog', 'A blog entry is a single post to an online journal, or blog.', 1, 1, 2, 1, 0, 0, '', '', '2009-09-15 12:15:43', '2009-09-02 18:20:44'), +(4, 'Node', 'node', 'Default content type.', 1, 1, 2, 1, 0, 0, '', '', '2009-10-06 21:53:15', '2009-09-05 23:51:56'); + +-- +-- Dumping data for table `types_vocabularies` +-- + +INSERT IGNORE INTO `types_vocabularies` (`id`, `type_id`, `vocabulary_id`, `weight`) VALUES +(23, 2, 2, NULL), +(22, 2, 1, NULL), +(25, 4, 2, NULL), +(24, 4, 1, NULL); + +-- +-- Dumping data for table `users` +-- + +INSERT IGNORE INTO `users` (`id`, `role_id`, `username`, `password`, `name`, `email`, `website`, `activation_key`, `image`, `bio`, `timezone`, `status`, `updated`, `created`) VALUES +(1, 1, 'admin', 'c054b152596745efa1d197b809fa7fc70ce586e5', 'Administrator', 'you@your-site.com', '/about', '', '', '', '0', 1, '2009-10-07 22:23:27', '2009-04-05 00:20:34'); + +-- +-- Dumping data for table `vocabularies` +-- + +INSERT IGNORE INTO `vocabularies` (`id`, `title`, `alias`, `description`, `required`, `multiple`, `tags`, `plugin`, `term_count`, `weight`, `updated`, `created`) VALUES +(1, 'Categories', 'categories', '', 0, 0, 0, '', 2, NULL, '2009-07-22 02:16:21', '2009-07-22 02:16:21'), +(2, 'Tags', 'tags', '', 0, 0, 0, '', 1, NULL, '2009-07-22 02:16:34', '2009-07-22 02:16:34'); diff --git a/app/config/sql/.svn/text-base/db_acl.php.svn-base b/app/config/sql/.svn/text-base/db_acl.php.svn-base new file mode 100644 index 0000000..5f24eab --- /dev/null +++ b/app/config/sql/.svn/text-base/db_acl.php.svn-base @@ -0,0 +1,79 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros_acos = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'aro_id' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'aco_id' => array('type'=>'integer', 'null' => false, 'length' => 10), + '_create' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_read' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_update' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_delete' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'ARO_ACO_KEY' => array('column' => array('aro_id', 'aco_id'), 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/.svn/text-base/db_acl.sql.svn-base b/app/config/sql/.svn/text-base/db_acl.sql.svn-base new file mode 100644 index 0000000..080f06c --- /dev/null +++ b/app/config/sql/.svn/text-base/db_acl.sql.svn-base @@ -0,0 +1,40 @@ +# $Id: db_acl.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE aros_acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + aro_id INTEGER(10) UNSIGNED NOT NULL, + aco_id INTEGER(10) UNSIGNED NOT NULL, + _create CHAR(2) NOT NULL DEFAULT 0, + _read CHAR(2) NOT NULL DEFAULT 0, + _update CHAR(2) NOT NULL DEFAULT 0, + _delete CHAR(2) NOT NULL DEFAULT 0, + PRIMARY KEY(id) +); + +CREATE TABLE aros ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); diff --git a/app/config/sql/.svn/text-base/i18n.php.svn-base b/app/config/sql/.svn/text-base/i18n.php.svn-base new file mode 100644 index 0000000..72233ff --- /dev/null +++ b/app/config/sql/.svn/text-base/i18n.php.svn-base @@ -0,0 +1,56 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'locale' => array('type'=>'string', 'null' => false, 'length' => 6, 'key' => 'index'), + 'model' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'foreign_key' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'field' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'content' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'locale' => array('column' => 'locale', 'unique' => 0), 'model' => array('column' => 'model', 'unique' => 0), 'row_id' => array('column' => 'foreign_key', 'unique' => 0), 'field' => array('column' => 'field', 'unique' => 0)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/.svn/text-base/i18n.sql.svn-base b/app/config/sql/.svn/text-base/i18n.sql.svn-base new file mode 100644 index 0000000..4660a5a --- /dev/null +++ b/app/config/sql/.svn/text-base/i18n.sql.svn-base @@ -0,0 +1,26 @@ +# $Id: i18n.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE i18n ( + id int(10) NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content mediumtext, + PRIMARY KEY (id), +# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), +# INDEX I18N_LOCALE_ROW(locale, model, foreign_key), +# INDEX I18N_LOCALE_MODEL(locale, model), +# INDEX I18N_FIELD(model, foreign_key, field), +# INDEX I18N_ROW(model, foreign_key), + INDEX locale (locale), + INDEX model (model), + INDEX row_id (foreign_key), + INDEX field (field) +); diff --git a/app/config/sql/.svn/text-base/sessions.php.svn-base b/app/config/sql/.svn/text-base/sessions.php.svn-base new file mode 100644 index 0000000..7f00a26 --- /dev/null +++ b/app/config/sql/.svn/text-base/sessions.php.svn-base @@ -0,0 +1,53 @@ + array('type'=>'string', 'null' => false, 'key' => 'primary'), + 'data' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'expires' => array('type'=>'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/.svn/text-base/sessions.sql.svn-base b/app/config/sql/.svn/text-base/sessions.sql.svn-base new file mode 100644 index 0000000..23a1925 --- /dev/null +++ b/app/config/sql/.svn/text-base/sessions.sql.svn-base @@ -0,0 +1,16 @@ +# $Id: sessions.sql 7118 2008-06-04 20:49:29Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# 1785 E. Sahara Avenue, Suite 490-204 +# Las Vegas, Nevada 89104 +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE cake_sessions ( + id varchar(255) NOT NULL default '', + data text, + expires int(11) default NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/app/config/sql/croogo.sql b/app/config/sql/croogo.sql new file mode 100644 index 0000000..db10e45 --- /dev/null +++ b/app/config/sql/croogo.sql @@ -0,0 +1,472 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `acos` +-- + +CREATE TABLE IF NOT EXISTS `acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros` +-- + +CREATE TABLE IF NOT EXISTS `aros` ( + `id` int(10) unsigned NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `model` varchar(255) collate utf8_unicode_ci default '', + `foreign_key` int(10) unsigned default NULL, + `alias` varchar(255) collate utf8_unicode_ci default '', + `lft` int(10) default NULL, + `rght` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `aros_acos` +-- + +CREATE TABLE IF NOT EXISTS `aros_acos` ( + `id` int(10) unsigned NOT NULL auto_increment, + `aro_id` int(10) unsigned NOT NULL, + `aco_id` int(10) unsigned NOT NULL, + `_create` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_read` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_update` char(2) collate utf8_unicode_ci NOT NULL default '0', + `_delete` char(2) collate utf8_unicode_ci NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `blocks` +-- + +CREATE TABLE IF NOT EXISTS `blocks` ( + `id` bigint(20) NOT NULL auto_increment, + `region_id` bigint(20) default NULL, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `show_title` tinyint(1) NOT NULL default '1', + `class` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `weight` int(11) default NULL, + `element` varchar(255) collate utf8_unicode_ci NOT NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `visibility_paths` text collate utf8_unicode_ci NOT NULL, + `visibility_php` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comments` +-- + +CREATE TABLE IF NOT EXISTS `comments` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `node_id` bigint(20) NOT NULL, + `user_id` bigint(20) NOT NULL default '0', + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(200) collate utf8_unicode_ci NOT NULL, + `ip` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `rating` int(11) default NULL, + `status` tinyint(1) NOT NULL default '0', + `notify` tinyint(1) NOT NULL default '0', + `type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_type` varchar(100) collate utf8_unicode_ci NOT NULL default 'comment', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `contacts` +-- + +CREATE TABLE IF NOT EXISTS `contacts` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `name` varchar(255) collate utf8_unicode_ci NOT NULL, + `position` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `address2` text collate utf8_unicode_ci NOT NULL, + `state` varchar(100) collate utf8_unicode_ci NOT NULL, + `country` varchar(100) collate utf8_unicode_ci NOT NULL, + `postcode` varchar(100) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `fax` varchar(255) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `message_status` tinyint(1) NOT NULL default '1', + `message_archive` tinyint(1) NOT NULL default '1', + `message_count` int(11) NOT NULL default '0', + `message_spam_protection` tinyint(1) NOT NULL default '0', + `message_captcha` tinyint(1) NOT NULL default '0', + `message_notify` tinyint(1) NOT NULL default '1', + `status` tinyint(1) NOT NULL default '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `i18n` +-- + +CREATE TABLE IF NOT EXISTS `i18n` ( + `id` int(10) NOT NULL auto_increment, + `locale` varchar(6) collate utf8_unicode_ci NOT NULL, + `model` varchar(255) collate utf8_unicode_ci NOT NULL, + `foreign_key` int(10) NOT NULL, + `field` varchar(255) collate utf8_unicode_ci NOT NULL, + `content` mediumtext collate utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `locale` (`locale`), + KEY `model` (`model`), + KEY `row_id` (`foreign_key`), + KEY `field` (`field`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `languages` +-- + +CREATE TABLE IF NOT EXISTS `languages` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `native` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `menu_id` bigint(20) NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `link` varchar(255) collate utf8_unicode_ci NOT NULL, + `target` varchar(255) collate utf8_unicode_ci NOT NULL, + `rel` varchar(255) collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `menus` +-- + +CREATE TABLE IF NOT EXISTS `menus` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `link_count` int(11) NOT NULL, + `params` text collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id` int(11) NOT NULL auto_increment, + `contact_id` int(11) NOT NULL, + `name` varchar(100) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `website` varchar(255) collate utf8_unicode_ci NOT NULL, + `phone` varchar(255) collate utf8_unicode_ci NOT NULL, + `address` text collate utf8_unicode_ci NOT NULL, + `message_type` varchar(255) collate utf8_unicode_ci default NULL, + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `meta` +-- + +CREATE TABLE IF NOT EXISTS `meta` ( + `id` bigint(20) NOT NULL auto_increment, + `model` varchar(255) collate utf8_unicode_ci NOT NULL default 'Node', + `foreign_key` bigint(20) default NULL, + `key` varchar(255) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes` +-- + +CREATE TABLE IF NOT EXISTS `nodes` ( + `id` bigint(20) NOT NULL auto_increment, + `parent_id` bigint(20) default NULL, + `user_id` bigint(20) NOT NULL default '0', + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `body` text collate utf8_unicode_ci NOT NULL, + `excerpt` text collate utf8_unicode_ci NOT NULL, + `status` tinyint(1) NOT NULL default '0', + `mime_type` varchar(100) collate utf8_unicode_ci NOT NULL, + `comment_status` int(1) NOT NULL default '1', + `comment_count` int(11) default '0', + `promote` tinyint(1) NOT NULL default '0', + `path` varchar(255) collate utf8_unicode_ci NOT NULL, + `terms` text collate utf8_unicode_ci NOT NULL, + `sticky` tinyint(1) NOT NULL default '0', + `lft` int(11) default NULL, + `rght` int(11) default NULL, + `visibility_roles` text collate utf8_unicode_ci NOT NULL, + `type` varchar(100) collate utf8_unicode_ci NOT NULL default 'node', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`), + FULLTEXT KEY `body` (`body`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `nodes_terms` +-- + +CREATE TABLE IF NOT EXISTS `nodes_terms` ( + `id` bigint(20) NOT NULL auto_increment, + `node_id` int(10) NOT NULL default '0', + `vocabulary_id` int(10) NOT NULL default '0', + `term_id` int(10) NOT NULL default '0', + `weight` int(10) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regions` +-- + +CREATE TABLE IF NOT EXISTS `regions` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `block_count` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `roles` +-- + +CREATE TABLE IF NOT EXISTS `roles` ( + `id` int(11) NOT NULL auto_increment, + `title` varchar(100) collate utf8_unicode_ci NOT NULL, + `alias` varchar(100) collate utf8_unicode_ci default NULL, + `created` datetime default NULL, + `updated` datetime default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `settings` +-- + +CREATE TABLE IF NOT EXISTS `settings` ( + `id` bigint(20) NOT NULL auto_increment, + `key` varchar(64) collate utf8_unicode_ci NOT NULL, + `value` longtext collate utf8_unicode_ci NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` varchar(255) collate utf8_unicode_ci NOT NULL, + `input_type` varchar(255) collate utf8_unicode_ci NOT NULL default 'text', + `editable` tinyint(1) NOT NULL default '1', + `weight` int(11) default NULL, + `params` text collate utf8_unicode_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key` (`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `terms` +-- + +CREATE TABLE IF NOT EXISTS `terms` ( + `id` int(10) NOT NULL auto_increment, + `parent_id` int(10) default NULL, + `vocabulary_id` int(10) NOT NULL, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `slug` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `lft` int(11) NOT NULL, + `rght` int(11) NOT NULL, + `status` tinyint(1) NOT NULL default '1', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types` +-- + +CREATE TABLE IF NOT EXISTS `types` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `format_show_author` tinyint(1) NOT NULL default '1', + `format_show_date` tinyint(1) NOT NULL default '1', + `comment_status` int(1) NOT NULL default '1', + `comment_approve` tinyint(1) NOT NULL default '1', + `comment_spam_protection` tinyint(1) NOT NULL default '0', + `comment_captcha` tinyint(1) NOT NULL default '0', + `params` text collate utf8_unicode_ci NOT NULL, + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `types_vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `types_vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `type_id` int(10) NOT NULL, + `vocabulary_id` int(10) NOT NULL, + `weight` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id` bigint(20) NOT NULL auto_increment, + `role_id` int(11) NOT NULL, + `username` varchar(60) collate utf8_unicode_ci NOT NULL, + `password` varchar(100) collate utf8_unicode_ci NOT NULL, + `name` varchar(50) collate utf8_unicode_ci NOT NULL, + `email` varchar(100) collate utf8_unicode_ci NOT NULL, + `website` varchar(100) collate utf8_unicode_ci NOT NULL, + `activation_key` varchar(60) collate utf8_unicode_ci NOT NULL, + `image` varchar(255) collate utf8_unicode_ci NOT NULL, + `bio` text collate utf8_unicode_ci NOT NULL, + `timezone` varchar(10) collate utf8_unicode_ci NOT NULL default '0', + `status` tinyint(1) NOT NULL default '0', + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vocabularies` +-- + +CREATE TABLE IF NOT EXISTS `vocabularies` ( + `id` int(10) NOT NULL auto_increment, + `title` varchar(255) collate utf8_unicode_ci NOT NULL, + `alias` varchar(255) collate utf8_unicode_ci NOT NULL, + `description` text collate utf8_unicode_ci NOT NULL, + `required` tinyint(1) NOT NULL default '0', + `multiple` tinyint(1) NOT NULL default '0', + `tags` tinyint(1) NOT NULL default '0', + `plugin` varchar(255) collate utf8_unicode_ci NOT NULL, + `term_count` int(10) NOT NULL default '0', + `weight` int(11) default NULL, + `updated` datetime NOT NULL, + `created` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/app/config/sql/croogo_data.sql b/app/config/sql/croogo_data.sql new file mode 100644 index 0000000..777238c --- /dev/null +++ b/app/config/sql/croogo_data.sql @@ -0,0 +1,448 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Dumping data for table `acos` +-- + +INSERT IGNORE INTO `acos` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, NULL, NULL, 'controllers', 1, 352), +(2, 1, NULL, NULL, 'Attachments', 2, 13), +(3, 2, NULL, NULL, 'admin_index', 3, 4), +(4, 2, NULL, NULL, 'admin_add', 5, 6), +(5, 2, NULL, NULL, 'admin_edit', 7, 8), +(6, 2, NULL, NULL, 'admin_delete', 9, 10), +(7, 2, NULL, NULL, 'admin_browse', 11, 12), +(8, 1, NULL, NULL, 'Blocks', 14, 29), +(9, 8, NULL, NULL, 'admin_index', 15, 16), +(10, 8, NULL, NULL, 'admin_add', 17, 18), +(11, 8, NULL, NULL, 'admin_edit', 19, 20), +(12, 8, NULL, NULL, 'admin_delete', 21, 22), +(13, 8, NULL, NULL, 'admin_moveup', 23, 24), +(14, 8, NULL, NULL, 'admin_movedown', 25, 26), +(15, 8, NULL, NULL, 'admin_process', 27, 28), +(16, 1, NULL, NULL, 'Comments', 30, 45), +(17, 16, NULL, NULL, 'admin_index', 31, 32), +(18, 16, NULL, NULL, 'admin_edit', 33, 34), +(19, 16, NULL, NULL, 'admin_delete', 35, 36), +(20, 16, NULL, NULL, 'admin_process', 37, 38), +(21, 16, NULL, NULL, 'index', 39, 40), +(22, 16, NULL, NULL, 'add', 41, 42), +(23, 16, NULL, NULL, 'delete', 43, 44), +(24, 1, NULL, NULL, 'Contacts', 46, 57), +(25, 24, NULL, NULL, 'admin_index', 47, 48), +(26, 24, NULL, NULL, 'admin_add', 49, 50), +(27, 24, NULL, NULL, 'admin_edit', 51, 52), +(28, 24, NULL, NULL, 'admin_delete', 53, 54), +(29, 24, NULL, NULL, 'view', 55, 56), +(30, 1, NULL, NULL, 'Filemanager', 58, 79), +(31, 30, NULL, NULL, 'admin_index', 59, 60), +(32, 30, NULL, NULL, 'admin_browse', 61, 62), +(33, 30, NULL, NULL, 'admin_editfile', 63, 64), +(34, 30, NULL, NULL, 'admin_upload', 65, 66), +(35, 30, NULL, NULL, 'admin_delete_file', 67, 68), +(36, 30, NULL, NULL, 'admin_delete_directory', 69, 70), +(37, 30, NULL, NULL, 'admin_rename', 71, 72), +(38, 30, NULL, NULL, 'admin_create_directory', 73, 74), +(39, 30, NULL, NULL, 'admin_create_file', 75, 76), +(40, 30, NULL, NULL, 'admin_chmod', 77, 78), +(41, 1, NULL, NULL, 'Languages', 80, 95), +(42, 41, NULL, NULL, 'admin_index', 81, 82), +(43, 41, NULL, NULL, 'admin_add', 83, 84), +(44, 41, NULL, NULL, 'admin_edit', 85, 86), +(45, 41, NULL, NULL, 'admin_delete', 87, 88), +(46, 41, NULL, NULL, 'admin_moveup', 89, 90), +(47, 41, NULL, NULL, 'admin_movedown', 91, 92), +(48, 41, NULL, NULL, 'admin_select', 93, 94), +(49, 1, NULL, NULL, 'Links', 96, 111), +(50, 49, NULL, NULL, 'admin_index', 97, 98), +(51, 49, NULL, NULL, 'admin_add', 99, 100), +(52, 49, NULL, NULL, 'admin_edit', 101, 102), +(53, 49, NULL, NULL, 'admin_delete', 103, 104), +(54, 49, NULL, NULL, 'admin_moveup', 105, 106), +(55, 49, NULL, NULL, 'admin_movedown', 107, 108), +(56, 49, NULL, NULL, 'admin_process', 109, 110), +(57, 1, NULL, NULL, 'Menus', 112, 121), +(58, 57, NULL, NULL, 'admin_index', 113, 114), +(59, 57, NULL, NULL, 'admin_add', 115, 116), +(60, 57, NULL, NULL, 'admin_edit', 117, 118), +(61, 57, NULL, NULL, 'admin_delete', 119, 120), +(62, 1, NULL, NULL, 'Messages', 122, 131), +(63, 62, NULL, NULL, 'admin_index', 123, 124), +(64, 62, NULL, NULL, 'admin_edit', 125, 126), +(65, 62, NULL, NULL, 'admin_delete', 127, 128), +(66, 62, NULL, NULL, 'admin_process', 129, 130), +(67, 1, NULL, NULL, 'Nodes', 132, 161), +(68, 67, NULL, NULL, 'admin_index', 133, 134), +(69, 67, NULL, NULL, 'admin_create', 135, 136), +(70, 67, NULL, NULL, 'admin_add', 137, 138), +(71, 67, NULL, NULL, 'admin_edit', 139, 140), +(72, 67, NULL, NULL, 'admin_update_paths', 141, 142), +(73, 67, NULL, NULL, 'admin_delete', 143, 144), +(74, 67, NULL, NULL, 'admin_delete_meta', 145, 146), +(75, 67, NULL, NULL, 'admin_add_meta', 147, 148), +(76, 67, NULL, NULL, 'admin_process', 149, 150), +(77, 67, NULL, NULL, 'index', 151, 152), +(78, 67, NULL, NULL, 'term', 153, 154), +(79, 67, NULL, NULL, 'promoted', 155, 156), +(80, 67, NULL, NULL, 'search', 157, 158), +(81, 67, NULL, NULL, 'view', 159, 160), +(82, 1, NULL, NULL, 'Regions', 162, 171), +(83, 82, NULL, NULL, 'admin_index', 163, 164), +(84, 82, NULL, NULL, 'admin_add', 165, 166), +(85, 82, NULL, NULL, 'admin_edit', 167, 168), +(86, 82, NULL, NULL, 'admin_delete', 169, 170), +(87, 1, NULL, NULL, 'Roles', 172, 181), +(88, 87, NULL, NULL, 'admin_index', 173, 174), +(89, 87, NULL, NULL, 'admin_add', 175, 176), +(90, 87, NULL, NULL, 'admin_edit', 177, 178), +(91, 87, NULL, NULL, 'admin_delete', 179, 180), +(92, 1, NULL, NULL, 'Settings', 182, 201), +(93, 92, NULL, NULL, 'admin_dashboard', 183, 184), +(94, 92, NULL, NULL, 'admin_index', 185, 186), +(95, 92, NULL, NULL, 'admin_view', 187, 188), +(96, 92, NULL, NULL, 'admin_add', 189, 190), +(97, 92, NULL, NULL, 'admin_edit', 191, 192), +(98, 92, NULL, NULL, 'admin_delete', 193, 194), +(99, 92, NULL, NULL, 'admin_prefix', 195, 196), +(100, 92, NULL, NULL, 'admin_moveup', 197, 198), +(101, 92, NULL, NULL, 'admin_movedown', 199, 200), +(102, 1, NULL, NULL, 'Terms', 202, 217), +(103, 102, NULL, NULL, 'admin_index', 203, 204), +(104, 102, NULL, NULL, 'admin_add', 205, 206), +(105, 102, NULL, NULL, 'admin_edit', 207, 208), +(106, 102, NULL, NULL, 'admin_delete', 209, 210), +(107, 102, NULL, NULL, 'admin_moveup', 211, 212), +(108, 102, NULL, NULL, 'admin_movedown', 213, 214), +(109, 102, NULL, NULL, 'admin_process', 215, 216), +(110, 1, NULL, NULL, 'Types', 218, 227), +(111, 110, NULL, NULL, 'admin_index', 219, 220), +(112, 110, NULL, NULL, 'admin_add', 221, 222), +(113, 110, NULL, NULL, 'admin_edit', 223, 224), +(114, 110, NULL, NULL, 'admin_delete', 225, 226), +(115, 1, NULL, NULL, 'Users', 228, 261), +(116, 115, NULL, NULL, 'admin_index', 229, 230), +(117, 115, NULL, NULL, 'admin_add', 231, 232), +(118, 115, NULL, NULL, 'admin_edit', 233, 234), +(119, 115, NULL, NULL, 'admin_reset_password', 235, 236), +(120, 115, NULL, NULL, 'admin_delete', 237, 238), +(121, 115, NULL, NULL, 'admin_login', 239, 240), +(122, 115, NULL, NULL, 'admin_logout', 241, 242), +(123, 115, NULL, NULL, 'index', 243, 244), +(124, 115, NULL, NULL, 'add', 245, 246), +(125, 115, NULL, NULL, 'activate', 247, 248), +(126, 115, NULL, NULL, 'edit', 249, 250), +(127, 115, NULL, NULL, 'forgot', 251, 252), +(128, 115, NULL, NULL, 'reset', 253, 254), +(129, 115, NULL, NULL, 'login', 255, 256), +(130, 115, NULL, NULL, 'logout', 257, 258), +(131, 115, NULL, NULL, 'view', 259, 260), +(132, 1, NULL, NULL, 'Vocabularies', 262, 271), +(133, 132, NULL, NULL, 'admin_index', 263, 264), +(134, 132, NULL, NULL, 'admin_add', 265, 266), +(135, 132, NULL, NULL, 'admin_edit', 267, 268), +(136, 132, NULL, NULL, 'admin_delete', 269, 270), +(137, 1, NULL, NULL, 'AclAcos', 272, 281), +(138, 137, NULL, NULL, 'admin_index', 273, 274), +(139, 137, NULL, NULL, 'admin_add', 275, 276), +(140, 137, NULL, NULL, 'admin_edit', 277, 278), +(141, 137, NULL, NULL, 'admin_delete', 279, 280), +(142, 1, NULL, NULL, 'AclActions', 282, 295), +(143, 142, NULL, NULL, 'admin_index', 283, 284), +(144, 142, NULL, NULL, 'admin_add', 285, 286), +(145, 142, NULL, NULL, 'admin_edit', 287, 288), +(146, 142, NULL, NULL, 'admin_delete', 289, 290), +(147, 142, NULL, NULL, 'admin_move', 291, 292), +(148, 142, NULL, NULL, 'admin_generate', 293, 294), +(149, 1, NULL, NULL, 'AclAros', 296, 305), +(150, 149, NULL, NULL, 'admin_index', 297, 298), +(151, 149, NULL, NULL, 'admin_add', 299, 300), +(152, 149, NULL, NULL, 'admin_edit', 301, 302), +(153, 149, NULL, NULL, 'admin_delete', 303, 304), +(154, 1, NULL, NULL, 'AclPermissions', 306, 311), +(155, 154, NULL, NULL, 'admin_index', 307, 308), +(156, 154, NULL, NULL, 'admin_toggle', 309, 310), +(159, 1, NULL, NULL, 'ExtensionsHooks', 312, 317), +(160, 159, NULL, NULL, 'admin_index', 313, 314), +(161, 159, NULL, NULL, 'admin_toggle', 315, 316), +(162, 1, NULL, NULL, 'ExtensionsLocales', 318, 329), +(163, 162, NULL, NULL, 'admin_index', 319, 320), +(164, 162, NULL, NULL, 'admin_activate', 321, 322), +(165, 162, NULL, NULL, 'admin_add', 323, 324), +(166, 162, NULL, NULL, 'admin_edit', 325, 326), +(167, 162, NULL, NULL, 'admin_delete', 327, 328), +(168, 1, NULL, NULL, 'ExtensionsPlugins', 330, 337), +(169, 168, NULL, NULL, 'admin_index', 331, 332), +(170, 168, NULL, NULL, 'admin_add', 333, 334), +(171, 168, NULL, NULL, 'admin_delete', 335, 336), +(172, 1, NULL, NULL, 'ExtensionsThemes', 338, 351), +(173, 172, NULL, NULL, 'admin_index', 339, 340), +(174, 172, NULL, NULL, 'admin_activate', 341, 342), +(175, 172, NULL, NULL, 'admin_add', 343, 344), +(176, 172, NULL, NULL, 'admin_editor', 345, 346), +(177, 172, NULL, NULL, 'admin_save', 347, 348), +(178, 172, NULL, NULL, 'admin_delete', 349, 350)/*, + + +(179, 1, NULL, NULL, 'Codigos', 352, 369), +(180, 179, NULL, NULL, 'admin_index', 353, 354), +(182, 179, NULL, NULL, 'admin_add', 355, 356), +(183, 179, NULL, NULL, 'admin_edit', 357, 358), +(183, 179, NULL, NULL, 'admin_view', 359, 360), +(184, 179, NULL, NULL, 'admin_delete', 361, 362), +(185, 179, NULL, NULL, 'add', 363, 364), +(186, 179, NULL, NULL, 'rastrear', 365, 366), +(187, 179, NULL, NULL, 'index', 367, 368), + +(188, 1, NULL, NULL, 'Rastreamento', 370, 389), +(189, 188, NULL, NULL, 'admin_index', 371, 372), +(190, 188, NULL, NULL, 'admin_add', 373, 374), +(191, 188, NULL, NULL, 'admin_edit', 375, 376), +(192, 188, NULL, NULL, 'admin_view', 377, 378), +(193, 188, NULL, NULL, 'admin_delete', 379, 380), +(194, 188, NULL, NULL, 'add', 381, 382), +(195, 188, NULL, NULL, 'view', 383, 384), +(196, 188, NULL, NULL, 'index', 385, 386), +(197, 188, NULL, NULL, 'rastrear', 387, 388) +*/ +; + +-- +-- Dumping data for table `aros` +-- + +INSERT IGNORE INTO `aros` (`id`, `parent_id`, `model`, `foreign_key`, `alias`, `lft`, `rght`) VALUES +(1, NULL, 'Role', 1, '', 1, 4), +(2, NULL, 'Role', 2, '', 5, 6), +(3, NULL, 'Role', 3, '', 7, 8), +(5, 1, 'User', 1, '', 2, 3); + +-- +-- Dumping data for table `aros_acos` +-- + +INSERT IGNORE INTO `aros_acos` (`id`, `aro_id`, `aco_id`, `_create`, `_read`, `_update`, `_delete`) VALUES +(1, 2, 23, '1', '1', '1', '1'), +(2, 2, 22, '1', '1', '1', '1'), +(3, 2, 21, '1', '1', '1', '1'), +(4, 3, 21, '1', '1', '1', '1'), +(5, 3, 22, '1', '1', '1', '1'), +(6, 2, 29, '1', '1', '1', '1'), +(7, 3, 29, '1', '1', '1', '1'), +(8, 2, 77, '1', '1', '1', '1'), +(9, 2, 78, '1', '1', '1', '1'), +(10, 2, 79, '1', '1', '1', '1'), +(11, 2, 80, '1', '1', '1', '1'), +(12, 2, 81, '1', '1', '1', '1'), +(13, 3, 77, '1', '1', '1', '1'), +(14, 3, 78, '1', '1', '1', '1'), +(15, 3, 79, '1', '1', '1', '1'), +(16, 3, 80, '1', '1', '1', '1'), +(17, 3, 81, '1', '1', '1', '1'), +(18, 2, 123, '1', '1', '1', '1'), +(19, 3, 124, '1', '1', '1', '1'), +(20, 3, 125, '1', '1', '1', '1'), +(21, 2, 126, '1', '1', '1', '1'), +(22, 3, 127, '1', '1', '1', '1'), +(23, 3, 128, '1', '1', '1', '1'), +(24, 3, 129, '1', '1', '1', '1'), +(25, 2, 130, '1', '1', '1', '1'), +(26, 2, 131, '1', '1', '1', '1'), +(27, 3, 131, '1', '1', '1', '1'); + +-- +-- Dumping data for table `blocks` +-- + +INSERT IGNORE INTO `blocks` (`id`, `region_id`, `title`, `alias`, `body`, `show_title`, `class`, `status`, `weight`, `element`, `visibility_roles`, `visibility_paths`, `visibility_php`, `params`, `updated`, `created`) VALUES +(3, 4, 'About', 'about', 'This is the content of your block. Can be modified in admin panel.', 1, '', 1, 2, '', '', '', '', '', '2009-12-20 03:07:39', '2009-07-26 17:13:14'), +(8, 4, 'Search', 'search', '', 0, '', 1, 1, 'search', '', '', '', '', '2009-12-20 03:07:39', '2009-12-20 03:07:27'), +(5, 4, 'Meta', 'meta', '[menu:meta]', 1, '', 1, 6, '', '', '', '', '', '2009-12-22 05:17:39', '2009-09-12 06:36:22'), +(6, 4, 'Blogroll', 'blogroll', '[menu:blogroll]', 1, '', 1, 4, '', '', '', '', '', '2009-12-20 03:07:33', '2009-09-12 23:33:27'), +(7, 4, 'Categories', 'categories', '[vocabulary:categories type="blog"]', 1, '', 1, 3, '', '', '', '', '', '2009-12-20 03:07:36', '2009-10-03 16:52:50'), +(9, 4, 'Recent Posts', 'recent_posts', '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC"]', 1, '', 1, 5, '', '', '', '', '', '2009-12-22 05:17:39', '2009-12-22 05:17:32'); + +-- +-- Dumping data for table `comments` +-- + +INSERT IGNORE INTO `comments` (`id`, `parent_id`, `node_id`, `user_id`, `name`, `email`, `website`, `ip`, `title`, `body`, `rating`, `status`, `notify`, `type`, `comment_type`, `lft`, `rght`, `updated`, `created`) VALUES +(13, NULL, 21, 0, 'Mr Croogo', 'email@example.com', 'http://www.croogo.org', '127.0.0.1', '', 'Hi, this is the first comment.', NULL, 1, 0, 'blog', 'comment', 1, 2, '2009-10-06 22:13:05', '2009-10-03 19:43:52'); + +-- +-- Dumping data for table `contacts` +-- + +INSERT IGNORE INTO `contacts` (`id`, `title`, `alias`, `body`, `name`, `position`, `address`, `address2`, `state`, `country`, `postcode`, `phone`, `fax`, `email`, `message_status`, `message_archive`, `message_count`, `message_spam_protection`, `message_captcha`, `message_notify`, `status`, `updated`, `created`) VALUES +(1, 'Contact', 'contact', '', '', '', '', '', '', '', '', '', '', 'you@your-site.com', 1, 0, 0, 0, 0, 1, 1, '2009-10-07 22:07:49', '2009-09-16 01:45:17'); + +-- +-- Dumping data for table `i18n` +-- + + +-- +-- Dumping data for table `languages` +-- + +INSERT IGNORE INTO `languages` (`id`, `title`, `native`, `alias`, `status`, `weight`, `updated`, `created`) VALUES +(1, 'English', 'English', 'eng', 1, 1, '2009-11-02 21:37:38', '2009-11-02 20:52:00'); + +-- +-- Dumping data for table `links` +-- + +INSERT IGNORE INTO `links` (`id`, `parent_id`, `menu_id`, `title`, `description`, `link`, `target`, `rel`, `status`, `lft`, `rght`, `visibility_roles`, `params`, `updated`, `created`) VALUES +(5, NULL, 4, 'About', '', 'controller:nodes/action:view/type:page/slug:about', '', '', 1, 3, 4, '', '', '2009-10-06 23:14:21', '2009-08-19 12:23:33'), +(6, NULL, 4, 'Contact', '', 'controller:contacts/action:view/contact', '', '', 1, 5, 6, '', '', '2009-10-06 23:14:45', '2009-08-19 12:34:56'), +(7, NULL, 3, 'Home', '', '/', '', '', 1, 5, 6, '', '', '2009-10-06 21:17:06', '2009-09-06 21:32:54'), +(8, NULL, 3, 'About', '', '/about', '', '', 1, 7, 10, '', '', '2009-09-12 03:45:53', '2009-09-06 21:34:57'), +(9, 8, 3, 'Child link', '', '#', '', '', 0, 8, 9, '', '', '2009-10-06 23:13:06', '2009-09-12 03:52:23'), +(10, NULL, 5, 'Site Admin', '', '/admin', '', '', 1, 1, 2, '', '', '2009-09-12 06:34:09', '2009-09-12 06:34:09'), +(11, NULL, 5, 'Log out', '', '/users/logout', '', '', 1, 7, 8, '["1","2"]', '', '2009-09-12 06:35:22', '2009-09-12 06:34:41'), +(12, NULL, 6, 'Croogo', '', 'http://www.croogo.org', '', '', 1, 3, 4, '', '', '2009-09-12 23:31:59', '2009-09-12 23:31:59'), +(14, NULL, 6, 'CakePHP', '', 'http://www.cakephp.org', '', '', 1, 1, 2, '', '', '2009-10-07 03:25:25', '2009-09-12 23:38:43'), +(15, NULL, 3, 'Contact', '', '/controller:contacts/action:view/contact', '', '', 1, 11, 12, '', '', '2009-09-16 07:54:13', '2009-09-16 07:53:33'), +(16, NULL, 5, 'Entries (RSS)', '', '/nodes/promoted.rss', '', '', 1, 3, 4, '', '', '2009-10-27 17:46:22', '2009-10-27 17:46:22'), +(17, NULL, 5, 'Comments (RSS)', '', '/comments.rss', '', '', 1, 5, 6, '', '', '2009-10-27 17:46:54', '2009-10-27 17:46:54'); + +-- +-- Dumping data for table `menus` +-- + +INSERT IGNORE INTO `menus` (`id`, `title`, `alias`, `description`, `status`, `weight`, `link_count`, `params`, `updated`, `created`) VALUES +(3, 'Main Menu', 'main', '', 1, NULL, 4, '', '2009-08-19 12:21:06', '2009-07-22 01:49:53'), +(4, 'Footer', 'footer', '', 1, NULL, 2, '', '2009-08-19 12:22:42', '2009-08-19 12:22:42'), +(5, 'Meta', 'meta', '', 1, NULL, 4, '', '2009-09-12 06:33:29', '2009-09-12 06:33:29'), +(6, 'Blogroll', 'blogroll', '', 1, NULL, 2, '', '2009-09-12 23:30:24', '2009-09-12 23:30:24'); + +-- +-- Dumping data for table `messages` +-- + + +-- +-- Dumping data for table `meta` +-- + +INSERT IGNORE INTO `meta` (`id`, `model`, `foreign_key`, `key`, `value`, `weight`) VALUES +(23, 'Node', 20, 'meta_keywords', 'key1, key2', NULL); + +-- +-- Dumping data for table `nodes` +-- + +INSERT IGNORE INTO `nodes` (`id`, `parent_id`, `user_id`, `title`, `slug`, `body`, `excerpt`, `status`, `mime_type`, `comment_status`, `comment_count`, `promote`, `path`, `terms`, `sticky`, `lft`, `rght`, `visibility_roles`, `type`, `updated`, `created`) VALUES +(20, NULL, 1, 'About', 'about', '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', '', 1, '', 0, 0, 0, '/about', '', 0, 1, 2, '', 'page', '2009-12-28 21:54:31', '2009-12-25 22:00:00'), +(21, NULL, 1, 'Hello World', 'hello-world', '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', '', 1, '', 2, 1, 1, '/blog/hello-world', '{"1":"uncategorized"}', 0, 1, 2, '', 'blog', '2009-12-28 21:55:09', '2009-12-25 11:00:00'); + +-- +-- Dumping data for table `nodes_terms` +-- + +INSERT IGNORE INTO `nodes_terms` (`id`, `node_id`, `vocabulary_id`, `term_id`, `weight`) VALUES +(6407, 21, 0, 1, NULL); + +-- +-- Dumping data for table `regions` +-- + +INSERT IGNORE INTO `regions` (`id`, `title`, `alias`, `description`, `block_count`) VALUES +(3, 'none', '', '', 0), +(4, 'right', 'right', '', 6), +(6, 'left', 'left', '', 0), +(7, 'header', 'header', '', 0), +(8, 'footer', 'footer', '', 0), +(9, 'region1', 'region1', '', 0), +(10, 'region2', 'region2', '', 0), +(11, 'region3', 'region3', '', 0), +(12, 'region4', 'region4', '', 0), +(13, 'region5', 'region5', '', 0), +(14, 'region6', 'region6', '', 0), +(15, 'region7', 'region7', '', 0), +(16, 'region8', 'region8', '', 0), +(17, 'region9', 'region9', '', 0); + +-- +-- Dumping data for table `roles` +-- + +INSERT IGNORE INTO `roles` (`id`, `title`, `alias`, `created`, `updated`) VALUES +(1, 'Admin', 'admin', '2009-04-05 00:10:34', '2009-04-05 00:10:34'), +(2, 'Registered', 'registered', '2009-04-05 00:10:50', '2009-04-06 05:20:38'), +(3, 'Public', 'public', '2009-04-05 00:12:38', '2009-04-07 01:41:45'); + +-- +-- Dumping data for table `settings` +-- + +INSERT IGNORE INTO `settings` (`id`, `key`, `value`, `title`, `description`, `input_type`, `editable`, `weight`, `params`) VALUES +(6, 'Site.title', 'Croogo', '', '', '', 1, 1, ''), +(7, 'Site.tagline', 'A CakePHP powered Content Management System.', '', '', 'textarea', 1, 2, ''), +(8, 'Site.email', 'you@your-site.com', '', '', '', 1, 3, ''), +(9, 'Site.status', '1', '', '', 'checkbox', 1, 5, ''), +(12, 'Meta.robots', 'index, follow', '', '', '', 1, 6, ''), +(13, 'Meta.keywords', 'croogo, Croogo', '', '', 'textarea', 1, 7, ''), +(14, 'Meta.description', 'Croogo - A CakePHP powered Content Management System', '', '', 'textarea', 1, 8, ''), +(15, 'Meta.generator', 'Croogo - Content Management System', '', '', '', 0, 9, ''), +(16, 'Service.akismet_key', 'your-key', '', '', '', 1, 11, ''), +(17, 'Service.recaptcha_public_key', 'your-public-key', '', '', '', 1, 12, ''), +(18, 'Service.recaptcha_private_key', 'your-private-key', '', '', '', 1, 13, ''), +(19, 'Service.akismet_url', 'http://your-blog.com', '', '', '', 1, 10, ''), +(20, 'Site.theme', '', '', '', '', 0, 14, ''), +(21, 'Site.feed_url', '', '', '', '', 0, 15, ''), +(22, 'Reading.nodes_per_page', '5', '', '', '', 1, 16, ''), +(23, 'Writing.wysiwyg', '1', 'Enable WYSIWYG editor', '', 'checkbox', 1, 17, ''), +(24, 'Comment.level', '1', '', 'levels deep (threaded comments)', '', 1, 18, ''), +(25, 'Comment.feed_limit', '10', '', 'number of comments to show in feed', '', 1, 19, ''), +(26, 'Site.locale', 'eng', '', '', 'text', 0, 20, ''), +(27, 'Reading.date_time_format', 'D, M d Y H:i:s', '', '', '', 1, 21, ''), +(28, 'Comment.date_time_format', 'M d, Y', '', '', '', 1, 22, ''), +(29, 'Site.timezone', '0', '', 'zero (0) for GMT', '', 1, 4, ''), +(30, 'Hook.helpers', 'Tinymce.TinymceHook', '', '', '', 0, 23, ''), +(31, 'Hook.components', '', '', '', '', 0, 24, ''), +(32, 'Hook.bootstraps', '', '', '', '', 0, 25, ''), +(33, 'Hook.routes', '', '', '', '', 0, 26, ''); + +-- +-- Dumping data for table `terms` +-- + +INSERT IGNORE INTO `terms` (`id`, `parent_id`, `vocabulary_id`, `title`, `slug`, `description`, `lft`, `rght`, `status`, `updated`, `created`) VALUES +(1, NULL, 1, 'Uncategorized', 'uncategorized', '', 1, 2, 1, '2009-07-22 03:38:43', '2009-07-22 03:34:56'), +(2, NULL, 1, 'Announcements', 'announcements', '', 3, 8, 1, '2009-07-22 03:45:37', '2009-07-22 03:45:37'), +(6, NULL, 2, 'mytag', 'mytag', '', 9, 10, 1, '2009-08-26 14:42:43', '2009-08-26 14:42:43'), +(7, NULL, 3, 'test term', 'test-term-1', '', 11, 12, 1, '2009-09-02 19:27:26', '2009-09-02 19:27:26'); + +-- +-- Dumping data for table `types` +-- + +INSERT IGNORE INTO `types` (`id`, `title`, `alias`, `description`, `format_show_author`, `format_show_date`, `comment_status`, `comment_approve`, `comment_spam_protection`, `comment_captcha`, `params`, `plugin`, `updated`, `created`) VALUES +(1, 'Page', 'page', 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', 0, 0, 0, 1, 0, 0, '', '', '2009-09-09 00:23:24', '2009-09-02 18:06:27'), +(2, 'Blog', 'blog', 'A blog entry is a single post to an online journal, or blog.', 1, 1, 2, 1, 0, 0, '', '', '2009-09-15 12:15:43', '2009-09-02 18:20:44'), +(4, 'Node', 'node', 'Default content type.', 1, 1, 2, 1, 0, 0, '', '', '2009-10-06 21:53:15', '2009-09-05 23:51:56'); + +-- +-- Dumping data for table `types_vocabularies` +-- + +INSERT IGNORE INTO `types_vocabularies` (`id`, `type_id`, `vocabulary_id`, `weight`) VALUES +(23, 2, 2, NULL), +(22, 2, 1, NULL), +(25, 4, 2, NULL), +(24, 4, 1, NULL); + +-- +-- Dumping data for table `users` +-- + +INSERT IGNORE INTO `users` (`id`, `role_id`, `username`, `password`, `name`, `email`, `website`, `activation_key`, `image`, `bio`, `timezone`, `status`, `updated`, `created`) VALUES +(1, 1, 'admin', 'c054b152596745efa1d197b809fa7fc70ce586e5', 'Administrator', 'you@your-site.com', '/about', '', '', '', '0', 1, '2009-10-07 22:23:27', '2009-04-05 00:20:34'); + +-- +-- Dumping data for table `vocabularies` +-- + +INSERT IGNORE INTO `vocabularies` (`id`, `title`, `alias`, `description`, `required`, `multiple`, `tags`, `plugin`, `term_count`, `weight`, `updated`, `created`) VALUES +(1, 'Categories', 'categories', '', 0, 0, 0, '', 2, NULL, '2009-07-22 02:16:21', '2009-07-22 02:16:21'), +(2, 'Tags', 'tags', '', 0, 0, 0, '', 1, NULL, '2009-07-22 02:16:34', '2009-07-22 02:16:34'); diff --git a/app/config/sql/db_acl.php b/app/config/sql/db_acl.php new file mode 100644 index 0000000..5f24eab --- /dev/null +++ b/app/config/sql/db_acl.php @@ -0,0 +1,79 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'parent_id' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'model' => array('type'=>'string', 'null' => true), + 'foreign_key' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'alias' => array('type'=>'string', 'null' => true), + 'lft' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'rght' => array('type'=>'integer', 'null' => true, 'default' => NULL, 'length' => 10), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + + var $aros_acos = array( + 'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'aro_id' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'aco_id' => array('type'=>'integer', 'null' => false, 'length' => 10), + '_create' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_read' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_update' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + '_delete' => array('type'=>'string', 'null' => false, 'default' => '0', 'length' => 2), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'ARO_ACO_KEY' => array('column' => array('aro_id', 'aco_id'), 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/db_acl.sql b/app/config/sql/db_acl.sql new file mode 100644 index 0000000..080f06c --- /dev/null +++ b/app/config/sql/db_acl.sql @@ -0,0 +1,40 @@ +# $Id: db_acl.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE aros_acos ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + aro_id INTEGER(10) UNSIGNED NOT NULL, + aco_id INTEGER(10) UNSIGNED NOT NULL, + _create CHAR(2) NOT NULL DEFAULT 0, + _read CHAR(2) NOT NULL DEFAULT 0, + _update CHAR(2) NOT NULL DEFAULT 0, + _delete CHAR(2) NOT NULL DEFAULT 0, + PRIMARY KEY(id) +); + +CREATE TABLE aros ( + id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, + parent_id INTEGER(10) DEFAULT NULL, + model VARCHAR(255) DEFAULT '', + foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, + alias VARCHAR(255) DEFAULT '', + lft INTEGER(10) DEFAULT NULL, + rght INTEGER(10) DEFAULT NULL, + PRIMARY KEY (id) +); diff --git a/app/config/sql/i18n.php b/app/config/sql/i18n.php new file mode 100644 index 0000000..72233ff --- /dev/null +++ b/app/config/sql/i18n.php @@ -0,0 +1,56 @@ + array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'locale' => array('type'=>'string', 'null' => false, 'length' => 6, 'key' => 'index'), + 'model' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'foreign_key' => array('type'=>'integer', 'null' => false, 'length' => 10, 'key' => 'index'), + 'field' => array('type'=>'string', 'null' => false, 'key' => 'index'), + 'content' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'locale' => array('column' => 'locale', 'unique' => 0), 'model' => array('column' => 'model', 'unique' => 0), 'row_id' => array('column' => 'foreign_key', 'unique' => 0), 'field' => array('column' => 'field', 'unique' => 0)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/i18n.sql b/app/config/sql/i18n.sql new file mode 100644 index 0000000..4660a5a --- /dev/null +++ b/app/config/sql/i18n.sql @@ -0,0 +1,26 @@ +# $Id: i18n.sql 7945 2008-12-19 02:16:01Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE i18n ( + id int(10) NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content mediumtext, + PRIMARY KEY (id), +# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), +# INDEX I18N_LOCALE_ROW(locale, model, foreign_key), +# INDEX I18N_LOCALE_MODEL(locale, model), +# INDEX I18N_FIELD(model, foreign_key, field), +# INDEX I18N_ROW(model, foreign_key), + INDEX locale (locale), + INDEX model (model), + INDEX row_id (foreign_key), + INDEX field (field) +); diff --git a/app/config/sql/sessions.php b/app/config/sql/sessions.php new file mode 100644 index 0000000..7f00a26 --- /dev/null +++ b/app/config/sql/sessions.php @@ -0,0 +1,53 @@ + array('type'=>'string', 'null' => false, 'key' => 'primary'), + 'data' => array('type'=>'text', 'null' => true, 'default' => NULL), + 'expires' => array('type'=>'integer', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) + ); + +} +?> \ No newline at end of file diff --git a/app/config/sql/sessions.sql b/app/config/sql/sessions.sql new file mode 100644 index 0000000..23a1925 --- /dev/null +++ b/app/config/sql/sessions.sql @@ -0,0 +1,16 @@ +# $Id: sessions.sql 7118 2008-06-04 20:49:29Z gwoo $ +# +# Copyright 2005-2008, Cake Software Foundation, Inc. +# 1785 E. Sahara Avenue, Suite 490-204 +# Las Vegas, Nevada 89104 +# +# Licensed under The MIT License +# Redistributions of files must retain the above copyright notice. +# http://www.opensource.org/licenses/mit-license.php The MIT License + +CREATE TABLE cake_sessions ( + id varchar(255) NOT NULL default '', + data text, + expires int(11) default NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/app/controllers/attachments_controller.php b/app/controllers/attachments_controller.php new file mode 100644 index 0000000..d057b06 --- /dev/null +++ b/app/controllers/attachments_controller.php @@ -0,0 +1,216 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AttachmentsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Attachments'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Node'); +/** + * Helpers used by the Controller + * + * @var array + * @access public + */ + public $helpers = array('Filemanager', 'Text', 'Image'); +/** + * Node type + * + * If the Controller uses Node model, + * this is, most of the time, the singular of the Controller name in lowercase. + * + * @var string + * @access public + */ + public $type = 'attachment'; +/** + * Uploads directory + * + * relative to the webroot. + * + * @var string + * @access public + */ + public $uploadsDir = 'uploads'; + +/** + * Before executing controller actions + * + * @return void + * @access public + */ + public function beforeFilter() { + parent::beforeFilter(); + + // Comment, Category, Tag not needed + $this->Node->unbindModel(array('hasMany' => array('Comment'), 'hasAndBelongsToMany' => array('Category', 'Tag'))); + + $this->Node->type = $this->type; + $this->Node->Behaviors->attach('Tree', array('scope' => array('Node.type' => $this->type))); + $this->set('type', $this->type); + } + +/** + * Admin index + * + * @return void + * @access public + */ + public function admin_index() { + $this->set('title_for_layout', __('Attachments', true)); + + $this->Node->recursive = 0; + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->set('attachments', $this->paginate()); + } + +/** + * Admin add + * + * @return void + * @access public + */ + public function admin_add() { + $this->set('title_for_layout', __('Add Attachment', true)); + + if (isset($this->params['named']['editor'])) { + $this->layout = 'admin_full'; + } + + if (!empty($this->data)) { + $file = $this->data['Node']['file']; + unset($this->data['Node']['file']); + + // check if file with same path exists + $destination = WWW_ROOT . $this->uploadsDir . DS . $file['name']; + if (file_exists($destination)) { + $newFileName = String::uuid() . '-' . $file['name']; + $destination = WWW_ROOT . $this->uploadsDir . DS . $newFileName; + } else { + $newFileName = $file['name']; + } + + // remove the extension for title + if (explode('.', $file['name']) > 0) { + $fileTitleE = explode('.', $file['name']); + array_pop($fileTitleE); + $fileTitle = implode('.', $fileTitleE); + } else { + $fileTitle = $file['name']; + } + + $this->data['Node']['title'] = $fileTitle; + $this->data['Node']['slug'] = $newFileName; + $this->data['Node']['mime_type'] = $file['type']; + //$this->data['Node']['guid'] = Router::url('/' . $this->uploadsDir . '/' . $newFileName, true); + $this->data['Node']['path'] = '/' . $this->uploadsDir . '/' . $newFileName; + + $this->Node->create(); + if ($this->Node->save($this->data)) { + // move the file + move_uploaded_file($file['tmp_name'], $destination); + + $this->Session->setFlash(__('The Attachment has been saved', true), 'default', array('class' => 'success')); + + if (isset($this->params['named']['editor'])) { + $this->redirect(array('action' => 'browse')); + } else { + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(__('The Attachment could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + +/** + * Admin edit + * + * @param int $id + * @return void + * @access public + */ + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Attachment', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Attachment', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Node->save($this->data)) { + $this->Session->setFlash(__('The Attachment has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Attachment could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Node->read(null, $id); + } + } + +/** + * Admin delete + * + * @param int $id + * @return void + * @access public + */ + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Attachment', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $attachment = $this->Node->find('first', array( + 'conditions' => array( + 'Node.id' => $id, + 'Node.type' => $this->type, + ), + )); + if (isset($attachment['Node'])) { + if ($this->Node->delete($id)) { + unlink(WWW_ROOT . $this->uploadsDir . DS . $attachment['Node']['slug']); + $this->Session->setFlash(__('Attachment deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(__('Invalid id for Attachment', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_browse() { + $this->layout = 'admin_full'; + $this->admin_index(); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/avisos_controller.php b/app/controllers/avisos_controller.php new file mode 100644 index 0000000..2396968 --- /dev/null +++ b/app/controllers/avisos_controller.php @@ -0,0 +1,495 @@ +Aviso->recursive = 0; + $this->set('avisos', $this->paginate()); + */ + + $this->layout = 'webservice'; + + + /** + * Resgatando os últimos 500 registros + * para não sobrecarregar o site dos correios + * e o processador do servidor (nosso servidor) + * + * , "" + * AND + * Aviso.estatus NOT LIKE => "%entregue%" + */ + $arrObjs = $this->Aviso->find( 'all', array( + 'conditions' => array( "TIMEDIFF( NOW( ), Aviso.updated ) < '3:00:00'" ), + 'order' => array( 'Aviso.id' => 'DESC' ), + 'limit' => 5 + ) ); + + $this->set( 'avisos', $arrObjs ); + + } + + function view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Aviso.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('aviso', $this->Aviso->read(null, $id)); + } + + function add() { + if (!empty($this->data)) { + $this->Aviso->create(); + if ($this->Aviso->save($this->data)) { + $this->Session->setFlash(__('The Aviso has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Aviso could not be saved. Please, try again.', true)); + } + } + + + + $codigos = $this->Aviso->Codigo->find('list', array( 'fields' => array( 'Codigo.id', 'Codigo.codigo' ) ) ); + $users = $this->Aviso->User->find('list', array( 'fields' => array( 'User.id', 'User.name' ) ) ); + $this->set(compact('codigos', 'users')); + } + + function edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aviso', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Aviso->save($this->data)) { + $this->Session->setFlash(__('The Aviso has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Aviso could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Aviso->read(null, $id); + } + $codigos = $this->Aviso->Codigo->find('list', array( 'fields' => array( 'Codigo.id', 'Codigo.nome' ) ) ); + $users = $this->Aviso->User->find('list', array( 'fields' => array( 'User.id', 'User.name' ) ) ); + $this->set(compact('codigos','users')); + } + + function delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aviso', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Aviso->del($id)) { + $this->Session->setFlash(__('Aviso deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + + + + + + /** + * Verifica o status das encomendas e atualiza o registro + * envia um email ao usuário + * + */ + function atualiza() + { + + + $this->layout = "webservice"; + + + + + // tentando solucionar o problema de memoria + ini_set('memory_limit', '-1'); + + // tentando solucionar o problema de tempo + ini_set('max_execution_time', '-1'); + + // tentando solucionar o problema do post + ini_set('post_max_size', '-1'); + + + + + + + /** + * Definindo variaveis + */ + $arrConditions = + $strStatus = + $strData = + $strLocal = + $arrAviso = + $strTabela = null; + + + /** + * Resgatando os últimos 5 registros + * para não sobrecarregar o site dos correios + * e o processador do servidor (nosso servidor) + * + * , "" + * AND + */ + $arrObjs = $this->Aviso->find( 'all', array( + 'conditions' => array( + "OR" => array( + array( "Aviso.estatus" => "NULL" ), + array( "Aviso.estatus NOT LIKE" => "%entregue%" ) + ), + /** / + "TIMESTAMPDIFF( HOUR, Aviso.updated, NOW( ) ) > 3", + / **/ + ), + //'order' => array( 'Aviso.id' => 'ASC' ), + 'order' => array( 'Codigo.codigo' => 'ASC' ), + 'limit' => 15 + ) ); + + //print_r( $arrObjs ); + + + + if( count( $arrObjs ) != 0 ) + { + + /** + * Percorre os objetos verficando o status nos Correios + */ + foreach ( $arrObjs as $arrObj ) + { + + + + echo $arrObj['User']['email'] .'
'; + echo $arrObj['Codigo']['codigo'] .'
'; + echo $arrObj['Codigo']['id'] .'
'; + echo $arrObj['Aviso']['id'] .'
'; + echo '--------------
'; + + + /** + * Acessa os Correios + */ + $requisicao = $this->Rastreamento->inicia( $arrObj['Codigo']['codigo'], false ); + + + //print_r( $requisicao ); + + $arrSearch = array( '', '', 'td rowspan=', '', '', '' ); + $arrReplace = array( '', '', 'str', '', '', '' ); + + if( isset( $requisicao[3] ) ) + { + $strData = str_replace( $arrSearch, $arrReplace, $this->Rastreamento->replace( $requisicao[3] ) ); + } + + if( isset( $requisicao[4] ) ) + { + $strLocal = str_replace( $arrSearch, $arrReplace, $this->Rastreamento->replace( $requisicao[4] ) ); + } + + if( isset( $requisicao[5] ) ) + { + $strStatus = str_replace($arrSearch, $arrReplace, $this->Rastreamento->replace( $requisicao[5] ) ); + + /** + * Converte os Arrays da requisição em tabela visual + */ + $strTabela = "". $this->Rastreamento->processa( $requisicao ) ."
"; + //print_r( $strTabela ); + $arrConditions = array( 'Aviso.estatus' => $strTabela ); + } + + + + /** + * Não exibir o registro caso já exista o status no registro + */ + $this->Aviso->find( 'first', array( + 'conditions' => array( 'Aviso.codigos_id' => $arrObj['Codigo']['id'], $arrConditions ) + ) ); + if( $this->Aviso->getNumRows() == 0 ) + { + + + + + /** + * Atualiza o registro + */ + $this->Aviso->id = $arrObj['Aviso']['id']; + //$arrAviso['Aviso']['estatus'] = $strStatus; + $arrAviso['Aviso']['estatus'] = $strTabela; + $this->Aviso->save( $arrAviso ); + + + + $this->Email->lineLength = 1020; + $this->Email->sendAs = "html"; + $this->Email->xMailer = "Mídia Negócios - Ecommerce"; + + + //$this->Email->headers = 'MIME-Version: 1.0\r\n'; + //$this->Email->headers = 'Content-type: text/html; charset=utf-8' . "\r\n"; + + + /** + * Cópia para mim :D + */ + //$this->Email->bcc = 'john@midianegocios.com.br'; + + + //$arrObj['User']['email'] = "user@localhost"; + + + //$this->Email->to = $arrObj['User']['username'] ."<". $arrObj['User']['email'] .">"; + $this->Email->to = $arrObj['User']['email']; + $this->Email->from = "rastreamento@midianegocios.com.br"; + $this->return = "john@midianegocios.com.br"; + $this->Email->replyTo = "john@midianegocios.com.br"; + + + $this->Email->subject = "Rastreamento ". $arrObj['Codigo']['codigo']; + $strMensagem = "Olá ". $arrObj['User']['username'] .",
"; + $strMensagem .= "

O rastreamento de sua encomenda identificada por '". $arrObj['Codigo']['nome'] ."' (". $arrObj['Codigo']['codigo'] .") "; + $strMensagem .= "foi alterado. Isso lhe agradou? Esperamos que sim.

"; + + $strMensagem ."

Veja o atual status de rastreamento de sua encomenda.

"; + + + + /** + * Adiciona a tabela do rastreamento + */ + $strMensagem .= str_replace( 'clique aqui.

"; + + + $strMensagem .= "

Se você ainda não tem seus dados de acesso ao sistema de rastreamento, clique aqui e informe este login (username) ". $arrObj['User']['username'] ." no campo a seguir.

"; + + + $strMensagem .= "

Caso você tenha alguma dúvida entre em contato conosco.

"; + + $strMensagem .= "

"; + $strMensagem .= "
Mídia Negócios - Soluções para comércio social.
"; + $this->Email->send( $strMensagem ); + + + $this->Email->reset(); + + + + //echo $strMensagem; + //echo nl2br( print_r( $arrObjs,true ) ); + //echo "Enviado ". $arrObj['Codigo']['codigo'] ."
"; + //echo "Data: ". $strData ." local: ". $strLocal ." Status: ". $strStatus ."

"; + }else{ + + + /** + * Atualiza o registro não atualizado + * Evita o bug com registros antigos + */ + $this->Aviso->id = $arrObj['Aviso']['id']; + //$arrAviso['Aviso']['estatus'] = $strStatus; + $arrAviso['Aviso']['estatus'] = $strTabela; + $this->Aviso->save( $arrAviso ); + + + //echo $arrObj['Codigo']['codigo'] ." sem modificação de estatus.
"; + //echo "Data: ". $strData ." local: ". $strLocal ." Status: ". $strStatus ."

"; + + } + + $strStatus = null; + $strLocal = null; + $strData = null; + } + } + + + print_r( $arrObjs ); + } + + + + + + + + + + + function admin_index() { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + //print_r( $userData ); + + /** + * Evitando erros com variavel nao definida + */ + $conditions = array(); + + + + /** + * Condição para filtrar itens + */ + if( isset( $this->params['named']['flag'] ) ) + { + + $conditions[] = array( 'Aviso.estatus LIKE "%'. $this->params['named']['flag'] .'%"' ); + }else{ + //$conditions[] = array( 'Aviso.estatus' => 1 ); + } + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Aviso.users_id' => $userData['id'] ); + } + + + + + + $this->Aviso->recursive = 0; + $this->paginate = array( 'conditions' => $conditions ); + $this->set('avisos', $this->paginate()); + } + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Aviso.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('aviso', $this->Aviso->read(null, $id)); + } + + + + + + + + function user_add() + { + //$this->set('title_for_layout', __('Register', true)); + if (!empty($this->data)) { + $this->User->create(); + $this->data['User']['role_id'] = 2; // Registered + $this->data['User']['activation_key'] = md5(uniqid()); + $this->data['User']['status'] = 0; + $this->data['User']['username'] = htmlspecialchars($this->data['User']['username']); + $this->data['User']['website'] = htmlspecialchars($this->data['User']['website']); + $this->data['User']['name'] = htmlspecialchars($this->data['User']['name']); + if ($this->User->save($this->data)) { + $this->data['User']['password'] = null; + $this->Email->from = Configure::read('Site.title') . ' ' + . ''; + $this->Email->to = $this->data['User']['email']; + $this->Email->subject = __('[' . Configure::read('Site.title') . '] Please activate your account', true); + $this->Email->template = 'register'; + $this->set('user', $this->data); + $this->Email->send(); + + $this->Session->setFlash(__('You have successfully registered an account. An email has been sent with further instructions.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'login')); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + + + + /** + * Adiciona o aviso para ADM + * + */ + function admin_add() { + if (!empty($this->data)) { + $this->Aviso->create(); + if ($this->Aviso->save($this->data)) { + $this->Session->setFlash(__('The Aviso has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Aviso could not be saved. Please, try again.', true)); + } + } + $codigos = $this->Aviso->Codigo->find('list', array( 'fields' => array( 'Codigo.id', 'Codigo.codigo' ) ) ); + $users = $this->Aviso->User->find('list', array( 'fields' => array( 'User.id', 'User.name' ) ) ); + $this->set(compact('codigos', 'users')); + } + + + + + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aviso', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Aviso->save($this->data)) { + $this->Session->setFlash(__('The Aviso has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Aviso could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Aviso->read(null, $id); + } + $codigos = $this->Aviso->Codigo->find('list', array( 'fields' => array( 'Codigo.id', 'Codigo.codigo' ) ) ); + $users = $this->Aviso->User->find('list', array( 'fields' => array( 'User.id', 'User.name' ) ) ); + $this->set(compact('codigos','users')); + } + + + + + function admin_delete($id = null) + { + + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aviso', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Aviso->del($id)) { + $this->Session->setFlash(__('Aviso deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/blocks_controller.php b/app/controllers/blocks_controller.php new file mode 100644 index 0000000..e48beaa --- /dev/null +++ b/app/controllers/blocks_controller.php @@ -0,0 +1,159 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class BlocksController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Blocks'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Block', 'Role'); + + public function admin_index() { + $this->set('title_for_layout', __('Blocks', true)); + + $this->Block->recursive = 0; + $this->paginate['Block']['order'] = array('Block.weight' => 'ASC'); + $this->set('blocks', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Block', true)); + + if (!empty($this->data)) { + $this->Block->create(); + $this->data['Block']['visibility_roles'] = $this->Block->encodeData($this->data['Role']['Role']); + $this->data['Block']['visibility_paths'] = $this->Block->encodeData(explode("\n", $this->data['Block']['visibility_paths'])); + if ($this->Block->save($this->data)) { + $this->Session->setFlash(__('The Block has been saved', true), 'default', array('class' => 'success')); + if (isset($this->params['form']['apply'])) { + $this->redirect(array('action'=>'edit', $this->Block->id)); + } else { + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(__('The Block could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + $regions = $this->Block->Region->find('list'); + $roles = $this->Role->find('list'); + $this->set(compact('regions', 'roles')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Block', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Block', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + $this->data['Block']['visibility_roles'] = $this->Block->encodeData($this->data['Role']['Role']); + $this->data['Block']['visibility_paths'] = $this->Block->encodeData(explode("\n", $this->data['Block']['visibility_paths'])); + if ($this->Block->save($this->data)) { + $this->Session->setFlash(__('The Block has been saved', true), 'default', array('class' => 'success')); + if (! isset($this->params['form']['apply'])) { + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(__('The Block could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $data = $this->Block->read(null, $id); + $data['Role']['Role'] = $this->Block->decodeData($data['Block']['visibility_roles']); + if ($data['Block']['visibility_paths'] != '') { + $data['Block']['visibility_paths'] = implode("\n", $this->Block->decodeData($data['Block']['visibility_paths'])); + } + $this->data = $data; + } + $regions = $this->Block->Region->find('list'); + $roles = $this->Role->find('list'); + $this->set(compact('regions', 'roles')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Block', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Block->delete($id)) { + $this->Session->setFlash(__('Block deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_moveup($id, $step = 1) { + if( $this->Block->moveup($id, $step) ) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_movedown($id, $step = 1) { + if( $this->Block->movedown($id, $step) ) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_process() { + $action = $this->data['Block']['action']; + $ids = array(); + foreach ($this->data['Block'] AS $id => $value) { + if ($id != 'action' && $value['id'] == 1) { + $ids[] = $id; + } + } + + if (count($ids) == 0 || $action == null) { + $this->Session->setFlash(__('No items selected.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if ($action == 'delete' && + $this->Block->deleteAll(array('Block.id' => $ids), true, true)) { + $this->Session->setFlash(__('Blocks deleted.', true), 'default', array('class' => 'success')); + } elseif ($action == 'publish' && + $this->Block->updateAll(array('Block.status' => 1), array('Block.id' => $ids))) { + $this->Session->setFlash(__('Blocks published', true), 'default', array('class' => 'success')); + } elseif ($action == 'unpublish' && + $this->Block->updateAll(array('Block.status' => 0), array('Block.id' => $ids))) { + $this->Session->setFlash(__('Blocks unpublished', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/clientes_controller.php b/app/controllers/clientes_controller.php new file mode 100644 index 0000000..a4bf05a --- /dev/null +++ b/app/controllers/clientes_controller.php @@ -0,0 +1,186 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ClientesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Clientes'; +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Email', + ); +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('User'); + + public function beforeFilter() { + parent::beforeFilter(); + + if (in_array($this->params['action'], array('admin_login', 'login'))) { + $field = $this->Auth->fields['username']; + if (!empty($this->data) && empty($this->data['User'][$field])) { + $this->redirect(array('action' => $this->params['action'])); + } + $cacheName = 'auth_failed_' . $this->data['User'][$field]; + if (Cache::read($cacheName, 'users_login') >= Configure::read('User.failed_login_limit')) { + $this->Session->setFlash(__('You have reached maximum limit for failed login attempts. Please try again after a few minutes.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => $this->params['action'])); + } + } + } + + public function beforeRender() { + parent::beforeRender(); + + if (in_array($this->params['action'], array('admin_login', 'login'))) { + if (!empty($this->data)) { + $field = $this->Auth->fields['username']; + $cacheName = 'auth_failed_' . $this->data['User'][$field]; + $cacheValue = Cache::read($cacheName, 'users_login'); + Cache::write($cacheName, (int)$cacheValue + 1, 'users_login'); + } + } + } + + public function admin_index() { + $this->set('title_for_layout', __('Users', true)); + + $this->User->recursive = 0; + $this->set('users', $this->paginate()); + } + + + + + public function admin_cliente() + { + + $this->theme = "rastreamento"; + + + if (!empty($this->data['Cliente'])) + { + + // POG para resolver pendência + $this->data['User'] = $this->data['Cliente']; + + $this->User->create(); + $this->data['User']['activation_key'] = md5(uniqid()); + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('The User has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array( 'controller' => 'codigos', 'action' => 'add', $this->User->getLastInsertID())); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + unset($this->data['Cliente']['password']); + } + } else { + $this->data['Cliente']['role_id'] = 2; // default Role: Registered + } + $roles = $this->User->Role->find('list'); + $this->set(compact('roles')); + } + + + + + + + + public function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('The User has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->User->read(null, $id); + } + $roles = $this->User->Role->find('list'); + $this->set(compact('roles')); + } + + public function admin_reset_password($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + $user = $this->User->findById($id); + if ($user['User']['password'] == Security::hash($this->data['User']['current_password'], null, true)) { + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('Password has been reset.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('Password could not be reset. Please, try again.', true), 'default', array('class' => 'error')); + } + } else { + $this->Session->setFlash(__('Current password did not match. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->User->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->User->delete($id)) { + $this->Session->setFlash(__('User deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + + public function admin_login() { + $this->set('title_for_layout', __('Admin Login', true)); + $this->layout = "admin_login"; + } + + public function admin_logout() { + $this->Session->setFlash(__('Log out successful.', true), 'default', array('class' => 'success')); + $this->redirect($this->Auth->logout()); + } + + public function index() { + $this->set('title_for_layout', __('Users', true)); + } + + +} +?> \ No newline at end of file diff --git a/app/controllers/codigos_controller.php b/app/controllers/codigos_controller.php new file mode 100644 index 0000000..8b2eefc --- /dev/null +++ b/app/controllers/codigos_controller.php @@ -0,0 +1,551 @@ +Session->read( 'Auth.User' ); + + $conditions = array(); + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Codigo.users_id' => $userData['id'] ); + } + + + $this->Codigo->recursive = 1; + $codigos = $this->Codigo->find( 'all', array( 'fields' => array( 'Codigo.id', 'Codigo.nome', 'Codigo.codigo', 'Codigo.created' ), 'conditions' => array( $conditions ) ) ); + + + $this->set(compact('codigos')); + } + + + + /** + * API Rest permite mostrar o registro do produto informado por ID + * + * @param Integer $id + */ + function view($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Codigo.users_id' => $userData['id'] ); + } + + + + + /** + * Localizando o produto do usuário e id informado + */ + $produto = $this->Codigo->find( 'first', array( 'fields' => array( 'Codigo.id', 'Codigo.nome', 'Codigo.codigo', 'Codigo.created' ), 'conditions' => array( 'Codigo.id' => $id, $conditions ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Codigo->getNumRows() != 0 ) + { + + /** + * Alterna a mensagem de erro para o objeto de produtos + */ + $message = $produto; + $this->set(compact('codigo')); + } + + $this->set(compact('codigo')); + + + $this->set(compact('message')); + } + + + + + function edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Codigo', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Codigo->save($this->data)) { + $this->Session->setFlash(__('The Codigo has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Codigo could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Codigo->read(null, $id); + } + $users = $this->Codigo->User->find('list'); + $this->set(compact('users')); + } + + + + + function delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Codigo', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Codigo->del($id, true )) + { + $this->Session->setFlash(__('Codigo deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + + + + + + + + + /** + * O rastreamento é realizado na action add + * + * @param String $strCodigo código de rastreamento dos Correios + */ + function rastrear( $strCodigo = null ) + { + + + $title_for_layout = "Rastreamento ". $strCodigo; + + + if( $strCodigo ) + { + $codigos = $this->Rastreamento->inicia( $strCodigo ); + }else{ + + $this->redirect( array( 'action' => 'add' ) ); + } + + $this->set( compact( 'title_for_layout', 'codigos' ) ); + } + + + + + + + + function add( $strCodigo = null ) + { + + //print_r( $this->data ); + + $this->set( 'title_for_layout', "rastreamento de pedido" ); + + + + + if( $strCodigo != null ) + { + $this->data['Codigo']['codigo'] = $strCodigo; + } + + + + if (!empty($this->data)) + { + + + /** + * Vai continuar salvando automaticamente + * posteriormente retirar o autolog + */ + $this->set( 'codigos', $this->Rastreamento->inicia( $this->data['Codigo']['codigo'] ) ); + + + + if( empty( $this->data['Codigo']['rastrear'] ) ) + { + + $this->data['Codigo']['users_id'] = 0; + }else{ + + $userData = $this->Session->read( 'Auth.User' ); + $this->data['Codigo']['users_id'] = $userData['id']; + } + + + $codigosr = $this->Codigo->find( 'all', array( + 'conditions' => array( + 'Codigo.codigo' => $this->data['Codigo']['codigo'], + 'Codigo.users_id' => $this->data['Codigo']['users_id'] + ) + ) ); + + + + + /** + * Verifica se o código já existe, se existir não adiciona + */ + if( $this->Codigo->getNumRows() == 0 ) + { + + + $this->Codigo->create(); + $this->data['Codigo']['codigo'] = strtoupper( $this->data['Codigo']['codigo'] ); + if ($this->Codigo->save($this->data)) { + $this->Session->setFlash(__('The Codigo has been saved', true)); + + + + + /** + * Adicionando o rastreamento + */ + if( isset( $this->data['Codigo']['rastrear'] ) && !empty( $this->data['Codigo']['rastrear'] ) ) + { + + + + /** + * Dados do usuário + */ + $userData = $this->Session->read( 'Auth.User' ); + + + + $this->Aviso->id = null; + $arrAviso['Aviso']['users_id'] = $userData['id']; + $arrAviso['Aviso']['codigos_id'] = $this->Codigo->getLastInsertID(); + $arrAviso['Aviso']['estatus'] = "Aguardando atualização"; + $this->Aviso->save( $arrAviso ); + + } + + + + + } else { + $this->Session->setFlash(__('The Codigo could not be saved. Please, try again.', true)); + } + + }// Se já existe não será salvo apenas exibe o rastreamento + + + $this->redirect( array( 'action' => 'rastrear', $this->data['Codigo']['codigo'] ) ); + + + }// nao precisa exibir mensagem quando entra na pagina + + + } + + + + function admin_index() + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Evitando erros com variavel nao definida + */ + $conditions = array(); + + if( $userData['role_id'] != 1 ) + { + + $conditions = array( 'Codigo.users_id' => $userData['id'] ); + } + + + + + + $this->Codigo->recursive = 0; + $this->paginate = array( 'conditions' => $conditions ); + $this->set('codigos', $this->paginate()); + } + + + + + + + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Codigo.', true)); + $this->redirect(array('action'=>'index')); + } + + + $arrCodigo = $this->Codigo->read(null, $id); + $this->set('codigo', $arrCodigo ); + $this->set('users', $this->Aviso->find( 'all', array( 'conditions' => array( 'Aviso.codigos_id' => $arrCodigo['Codigo']['id'] ) ) ) ); + } + + + + + + function admin_rastrear( $strCodigo = null ) + { + + + $title_for_layout = "Rastreamento ". $strCodigo; + + + if( $strCodigo ) + { + $codigos = $this->Rastreamento->inicia( $strCodigo ); + }else{ + + $this->redirect( array( 'action' => 'index' ) ); + } + + $this->set( compact( 'title_for_layout', 'codigos' ) ); + } + + + + + + + function _avisar_cliente( $codigo_id = null ) + { + + if( !empty($codigo_id) ) + { + + + /** + * Consulta o código existente + */ + $codigo_data = $this->Codigo->find( 'first', array( + 'conditions' => array( 'Codigo.codigo' => $codigo_id ), + )); + + + /** + * Verificando se foi informado um cliente para receber o aviso + */ + if( ( $this->Codigo->getNumRows()!= 0 ) && !empty( $this->data['Codigo']['cliente_nome'] ) && ( !empty( $this->data['Codigo']['cliente_email'] ) ) ) + { + + + $this->data['User']['role_id'] = 2; // Registered + $this->data['User']['activation_key'] = md5(uniqid()); + $this->data['User']['status'] = 0; + $this->data['User']['username'] = htmlspecialchars( strtolower( reset( explode( ' ', trim($this->data['Codigo']['cliente_nome']) ) ) .'_'. date( 'dmY' ) )); + $this->data['User']['username'] = date( 'dmY' ); + //$this->data['User']['website'] = htmlspecialchars($this->data['User']['website']); + $this->data['User']['name'] = htmlspecialchars($this->data['Codigo']['cliente_nome']); + $this->data['User']['email'] = $this->data['Codigo']['cliente_email']; + $this->data['User']['password'] = $this->data['Codigo']['codigo']; + + + + $this->User->create(); + if( $this->User->save( $this->data ) ) + { + $this->Session->setFlash( "Cliente adicionado corretamente"); + }else{ + $this->Session->setFlash( "Ocorreu um erro inesperado"); + } + + + $this->Aviso->id = null; + $arrAviso['Aviso']['users_id'] = $this->User->getLastInsertID(); + $arrAviso['Aviso']['codigos_id'] = $codigo_data['Codigo']['id']; + $arrAviso['Aviso']['estatus'] = "Aguardando atualização"; + $this->Aviso->save( $arrAviso ); + + } + } + + } + + + + + function admin_add( $strCodigo = null ) + { + + + + $this->set( 'title', 'Rastrear pedido - rastreamento' ); + $this->set( 'title_for_content', "rastreamento de pedido" ); + + + + + if( $strCodigo != null ) + { + $this->data['Codigo']['codigo'] = $strCodigo; + } + + + + + + if (!empty($this->data)) + { + + + + /** + * Verifica se os dados foram informados para avisar + * o cliente + */ + $this->_avisar_cliente( $this->data['Codigo']['codigo'] ); + //$this->user_add(); + + + + $this->Codigo->find( 'first', array( 'conditions' => array( 'Codigo.codigo' => $this->data['Codigo']['codigo'], 'Codigo.users_id' => $this->data['Codigo']['users_id'] ) ) ); + + + /** + * Verifica se o código já existe, se existir não adiciona + */ + if( $this->Codigo->getNumRows() == 0 ) + { + + + $this->Codigo->create(); + $this->data['Codigo']['codigo'] = up( $this->data['Codigo']['codigo'] ); + if ($this->Codigo->save($this->data)) { + $this->Session->setFlash(__('The Codigo has been saved', true)); + + + + /** + * Adicionando o rastreamento + */ + if( isset( $this->data['Codigo']['rastrear'] ) ) + { + + + /** + * Dados do usuário + */ + $userData = $this->Session->read( 'Auth.User' ); + + + + $this->Aviso->id = null; + $arrAviso['Aviso']['users_id'] = $userData['id']; + $arrAviso['Aviso']['codigos_id'] = $this->Codigo->getLastInsertID(); + $arrAviso['Aviso']['estatus'] = "Aguardando atualização"; + $this->Aviso->save( $arrAviso ); + + } + + + $this->redirect( array( 'action' => 'rastrear', $this->data['Codigo']['codigo'] ) ); + + } else { + $this->Session->setFlash(__('The Codigo could not be saved. Please, try again.', true)); + } + + }// Se já existe não será salvo apenas exibe o rastreamento + + + + + //$this->redirect( array( 'action' => 'rastrear', $this->data['Codigo']['codigo'] ) ); + + + }// nao precisa exibir mensagem quando entra na pagina + + + $users = $this->Codigo->User->find('list', array( 'fields' => array( 'User.id', 'User.name' ) )); + $this->set(compact('users')); + + //print_r( $this->Session->read( 'Auth.User' ) ); + } + + + + + + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Codigo', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Codigo->save($this->data)) { + $this->Session->setFlash(__('The Codigo has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Codigo could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Codigo->read(null, $id); + } + $users = $this->Codigo->User->find('list'); + $this->set(compact('users')); + } + + function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Codigo', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Codigo->delete($id)) { + $this->Session->setFlash(__('Codigo deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/comments_controller.php b/app/controllers/comments_controller.php new file mode 100644 index 0000000..4ba3102 --- /dev/null +++ b/app/controllers/comments_controller.php @@ -0,0 +1,302 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CommentsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Comments'; +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Akismet', + 'Email', + 'Recaptcha', + ); +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Comment'); + + public function beforeFilter() { + parent::beforeFilter(); + if ($this->action == 'admin_edit') { + $this->Security->disabledFields = array('ip'); + } + } + + public function admin_index() { + $this->set('title_for_layout', __('Comments', true)); + + $this->Comment->recursive = 0; + $this->paginate['Comment']['order'] = 'Comment.created DESC'; + $this->paginate['Comment']['conditions'] = array(); + $this->paginate['Comment']['conditions']['Comment.status'] = 1; + $this->paginate['Comment']['comment_type'] = 'comment'; + + if (isset($this->params['named']['filter'])) { + $filters = $this->Croogo->extractFilter(); + foreach ($filters AS $filterKey => $filterValue) { + if (strpos($filterKey, '.') === false) { + $filterKey = 'Comment.' . $filterKey; + } + $this->paginate['Comment']['conditions'][$filterKey] = $filterValue; + } + } + + if ($this->paginate['Comment']['conditions']['Comment.status'] == 1) { + $this->set('title_for_layout', __('Comments: Published', true)); + } else { + $this->set('title_for_layout', __('Comments: Approval', true)); + } + + $comments = $this->paginate(); + $this->set(compact('comments')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Comment', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Comment', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Comment->save($this->data)) { + $this->Session->setFlash(__('The Comment has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Comment could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Comment->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Comment', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Comment->delete($id)) { + $this->Session->setFlash(__('Comment deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_process() { + $action = $this->data['Comment']['action']; + $ids = array(); + foreach ($this->data['Comment'] AS $id => $value) { + if ($id != 'action' && $value['id'] == 1) { + $ids[] = $id; + } + } + + if (count($ids) == 0 || $action == null) { + $this->Session->setFlash(__('No items selected.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if ($action == 'delete' && + $this->Comment->deleteAll(array('Comment.id' => $ids), true, true)) { + $this->Session->setFlash(__('Comments deleted.', true), 'default', array('class' => 'success')); + } elseif ($action == 'publish' && + $this->Comment->updateAll(array('Comment.status' => 1), array('Comment.id' => $ids))) { + $this->Session->setFlash(__('Comments published', true), 'default', array('class' => 'success')); + } elseif ($action == 'unpublish' && + $this->Comment->updateAll(array('Comment.status' => 0), array('Comment.id' => $ids))) { + $this->Session->setFlash(__('Comments unpublished', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function index() { + $this->set('title_for_layout', __('Comments', true)); + + if (!isset($this->params['url']['ext']) || + $this->params['url']['ext'] != 'rss') { + $this->redirect('/'); + } + + $this->paginate['Comment']['order'] = 'Comment.created DESC'; + $this->paginate['Comment']['limit'] = Configure::read('Comment.feed_limit'); + $this->paginate['Comment']['conditions'] = array( + 'Comment.status' => 1, + ); + $comments = $this->paginate(); + $this->set(compact('comments')); + } + + public function add($nodeId = null, $parentId = null) { + if (!$nodeId) { + $this->Session->setFlash(__('Invalid Node', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + + $node = $this->Comment->Node->find('first', array( + 'conditions' => array( + 'Node.id' => $nodeId, + 'Node.status' => 1, + ), + )); + if (!isset($node['Node']['id'])) { + $this->Session->setFlash(__('Invalid Node', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + if ($parentId) { + $commentPath = $this->Comment->getpath($parentId, array('Comment.id')); + $commentLevel = count($commentPath); + if ($commentLevel > Configure::read('Comment.level')) { + $this->Session->setFlash(__('Maximum level reached. You cannot reply to that comment.', true), 'default', array('class' => 'error')); + $this->redirect($node['Node']['url']); + } + } + $type = $this->Comment->Node->Taxonomy->Vocabulary->Type->findByAlias($node['Node']['type']); + $continue = false; + if ($type['Type']['comment_status'] && $node['Node']['comment_status']) { + $continue = true; + } + + // spam protection and captcha + $continue = $this->__spam_protection($continue, $type, $node); + $continue = $this->__captcha($continue, $type, $node); + + $success = 0; + if (!empty($this->data) && $continue === true) { + $data = array(); + if ($parentId && + $this->Comment->hasAny(array( + 'Comment.id' => $parentId, + 'Comment.node_id' => $nodeId, + 'Comment.status' => 1, + ))) { + $data['parent_id'] = $parentId; + } + $data['node_id'] = $nodeId; + if ($this->Session->check('Auth.User.id')) { + $data['user_id'] = $this->Session->read('Auth.User.id'); + $data['name'] = $this->Session->read('Auth.User.name'); + $data['email'] = $this->Session->read('Auth.User.email'); + $data['website'] = $this->Session->read('Auth.User.website'); + } else { + $data['name'] = htmlspecialchars($this->data['Comment']['name']); + $data['email'] = $this->data['Comment']['email']; + $data['website'] = $this->data['Comment']['website']; + } + $data['body'] = htmlspecialchars($this->data['Comment']['body']); + $data['ip'] = $_SERVER['REMOTE_ADDR']; + $data['type'] = $node['Node']['type']; + if ($type['Type']['comment_approve']) { + $data['status'] = 1; + } else { + $data['status'] = 0; + } + + if ($this->Comment->save($data)) { + $success = 1; + if ($type['Type']['comment_approve']) { + $this->Session->setFlash(__('Your comment has been added successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Your comment will appear after moderation.', true), 'default', array('class' => 'success')); + } + + // Email notification + $this->Email->from = Configure::read('Site.title') . ' ' + . ''; + $this->Email->to = Configure::read('Site.email'); + $this->Email->subject = '[' . Configure::read('Site.title') . '] ' + . __('New comment posted under', true) . ' ' . $node['Node']['title']; + $this->set('node', $node); + $this->set('data', $data); + $this->set('commentId', $this->Comment->id); + $this->Email->template = 'comment'; + $this->Email->send(); + + $this->redirect(Router::url($node['Node']['url'], true) . '#comment-' . $this->Comment->id); + } + } + + $this->set(compact('success', 'node', 'type', 'nodeId', 'parentId')); + } + + private function __spam_protection($continue, $type, $node) { + if (!empty($this->data) && + $type['Type']['comment_spam_protection'] && + $continue === true) { + $this->Akismet->setCommentAuthor($this->data['Comment']['name']); + $this->Akismet->setCommentAuthorEmail($this->data['Comment']['email']); + $this->Akismet->setCommentAuthorURL($this->data['Comment']['website']); + $this->Akismet->setCommentContent($this->data['Comment']['body']); + //$this->Akismet->setPermalink(Router::url($node['Node']['url'], true)); + if ($this->Akismet->isCommentSpam()) { + $continue = false; + $this->Session->setFlash(__('Sorry, the comment appears to be spam.', true), 'default', array('class' => 'error')); + } + } + + return $continue; + } + + private function __captcha($continue, $type, $node) { + if (!empty($this->data) && + $type['Type']['comment_captcha'] && + $continue === true && + !$this->Recaptcha->valid($this->params['form'])) { + $continue = false; + $this->Session->setFlash(__('Invalid captcha entry', true), 'default', array('class' => 'error')); + } + + return $continue; + } + + public function delete($id) { + $success = 0; + if ($this->Session->check('Auth.User.id')) { + $userId = $this->Session->read('Auth.User.id'); + $comment = $this->Comment->find('first', array( + 'conditions' => array( + 'Comment.id' => $id, + 'Comment.user_id' => $userId, + ), + )); + + if (isset($comment['Comment']['id']) && + $this->Comment->delete($id)) { + $success = 1; + } + } + + $this->set(compact('success')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/components/akismet.php b/app/controllers/components/akismet.php new file mode 100644 index 0000000..0d09fcc --- /dev/null +++ b/app/controllers/components/akismet.php @@ -0,0 +1,391 @@ +Usage: + * + * $akismet = new Akismet('http://www.example.com/blog/', 'aoeu1aoue'); + * $akismet->setCommentAuthor($name); + * $akismet->setCommentAuthorEmail($email); + * $akismet->setCommentAuthorURL($url); + * $akismet->setCommentContent($comment); + * $akismet->setPermalink('http://www.example.com/blog/alex/someurl/'); + * if($akismet->isCommentSpam()) + * // store the comment but mark it as spam (in case of a mis-diagnosis) + * else + * // store the comment normally + * + * + * Optionally you may wish to check if your WordPress API key is valid as in the example below. + * + * + * $akismet = new Akismet('http://www.example.com/blog/', 'aoeu1aoue'); + * + * if($akismet->isKeyValid()) { + * // api key is okay + * } else { + * // api key is invalid + * } + * + * + * @package akismet + * @name Akismet + * @version 0.4 + * @author Alex Potsides + * @link http://www.achingbrain.net/ + */ +class AkismetComponent extends Object + { + private $version = '0.4'; + private $wordPressAPIKey; + private $blogURL; + private $comment; + private $apiPort; + private $akismetServer; + private $akismetVersion; + + // This prevents some potentially sensitive information from being sent accross the wire. + private $ignore = array('HTTP_COOKIE', + 'HTTP_X_FORWARDED_FOR', + 'HTTP_X_FORWARDED_HOST', + 'HTTP_MAX_FORWARDS', + 'HTTP_X_FORWARDED_SERVER', + 'REDIRECT_STATUS', + 'SERVER_PORT', + 'PATH', + 'DOCUMENT_ROOT', + 'SERVER_ADMIN', + 'QUERY_STRING', + 'PHP_SELF' ); + + /** + * @param string $blogURL The URL of your blog. + * @param string $wordPressAPIKey WordPress API key. + */ + public function startup() { + $this->blogURL = Configure::read('Service.akismet_url'); + $this->wordPressAPIKey = Configure::read('Service.akismet_key'); + + // Set some default values + $this->apiPort = 80; + $this->akismetServer = 'rest.akismet.com'; + $this->akismetVersion = '1.1'; + + // Start to populate the comment data + $this->comment['blog'] = $this->blogURL; + $this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; + + if(isset($_SERVER['HTTP_REFERER'])) { + $this->comment['referrer'] = $_SERVER['HTTP_REFERER']; + } + + /* + * This is necessary if the server PHP5 is running on has been set up to run PHP4 and + * PHP5 concurently and is actually running through a separate proxy al a these instructions: + * http://www.schlitt.info/applications/blog/archives/83_How_to_run_PHP4_and_PHP_5_parallel.html + * and http://wiki.coggeshall.org/37.html + * Otherwise the user_ip appears as the IP address of the PHP4 server passing the requests to the + * PHP5 one... + */ + $this->comment['user_ip'] = $_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR') ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR'); + } + + /** + * Makes a request to the Akismet service to see if the API key passed to the constructor is valid. + * + * Use this method if you suspect your API key is invalid. + * + * @return bool True is if the key is valid, false if not. + */ + public function isKeyValid() { + // Check to see if the key is valid + $response = $this->sendRequest('key=' . $this->wordPressAPIKey . '&blog=' . $this->blogURL, $this->akismetServer, '/' . $this->akismetVersion . '/verify-key'); + return $response[1] == 'valid'; + } + + // makes a request to the Akismet service + private function sendRequest($request, $host, $path) { + $http_request = "POST " . $path . " HTTP/1.0\r\n"; + $http_request .= "Host: " . $host . "\r\n"; + $http_request .= "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n"; + $http_request .= "Content-Length: " . strlen($request) . "\r\n"; + $http_request .= "User-Agent: Akismet PHP5 Class " . $this->version . " | Akismet/1.11\r\n"; + $http_request .= "\r\n"; + $http_request .= $request; + + $socketWriteRead = new SocketWriteRead($host, $this->apiPort, $http_request); + $socketWriteRead->send(); + + return explode("\r\n\r\n", $socketWriteRead->getResponse(), 2); + } + + // Formats the data for transmission + private function getQueryString() { + foreach($_SERVER as $key => $value) { + if(!in_array($key, $this->ignore)) { + if($key == 'REMOTE_ADDR') { + $this->comment[$key] = $this->comment['user_ip']; + } else { + $this->comment[$key] = $value; + } + } + } + + $query_string = ''; + + foreach($this->comment as $key => $data) { + if(!is_array($data)) { + $query_string .= $key . '=' . urlencode(stripslashes($data)) . '&'; + } + } + + return $query_string; + } + + /** + * Tests for spam. + * + * Uses the web service provided by {@link http://www.akismet.com Akismet} to see whether or not the submitted comment is spam. Returns a boolean value. + * + * @return bool True if the comment is spam, false if not + * @throws Will throw an exception if the API key passed to the constructor is invalid. + */ + public function isCommentSpam() { + $response = $this->sendRequest($this->getQueryString(), $this->wordPressAPIKey . '.rest.akismet.com', '/' . $this->akismetVersion . '/comment-check'); + + if($response[1] == 'invalid' && !$this->isKeyValid()) { + throw new exception('The Wordpress API key passed to the Akismet constructor is invalid. Please obtain a valid one from http://wordpress.com/api-keys/'); + } + + return ($response[1] == 'true'); + } + + /** + * Submit spam that is incorrectly tagged as ham. + * + * Using this function will make you a good citizen as it helps Akismet to learn from its mistakes. This will improve the service for everybody. + */ + public function submitSpam() { + $this->sendRequest($this->getQueryString(), $this->wordPressAPIKey . '.' . $this->akismetServer, '/' . $this->akismetVersion . '/submit-spam'); + } + + /** + * Submit ham that is incorrectly tagged as spam. + * + * Using this function will make you a good citizen as it helps Akismet to learn from its mistakes. This will improve the service for everybody. + */ + public function submitHam() { + $this->sendRequest($this->getQueryString(), $this->wordPressAPIKey . '.' . $this->akismetServer, '/' . $this->akismetVersion . '/submit-ham'); + } + + /** + * To override the user IP address when submitting spam/ham later on + * + * @param string $userip An IP address. Optional. + */ + public function setUserIP($userip) { + $this->comment['user_ip'] = $userip; + } + + /** + * To override the referring page when submitting spam/ham later on + * + * @param string $referrer The referring page. Optional. + */ + public function setReferrer($referrer) { + $this->comment['referrer'] = $referrer; + } + + /** + * A permanent URL referencing the blog post the comment was submitted to. + * + * @param string $permalink The URL. Optional. + */ + public function setPermalink($permalink) { + $this->comment['permalink'] = $permalink; + } + + /** + * The type of comment being submitted. + * + * May be blank, comment, trackback, pingback, or a made up value like "registration" or "wiki". + */ + public function setCommentType($commentType) { + $this->comment['comment_type'] = $commentType; + } + + /** + * The name that the author submitted with the comment. + */ + public function setCommentAuthor($commentAuthor) { + $this->comment['comment_author'] = $commentAuthor; + } + + /** + * The email address that the author submitted with the comment. + * + * The address is assumed to be valid. + */ + public function setCommentAuthorEmail($authorEmail) { + $this->comment['comment_author_email'] = $authorEmail; + } + + /** + * The URL that the author submitted with the comment. + */ + public function setCommentAuthorURL($authorURL) { + $this->comment['comment_author_url'] = $authorURL; + } + + /** + * The comment's body text. + */ + public function setCommentContent($commentBody) { + $this->comment['comment_content'] = $commentBody; + } + + /** + * Defaults to 80 + */ + public function setAPIPort($apiPort) { + $this->apiPort = $apiPort; + } + + /** + * Defaults to rest.akismet.com + */ + public function setAkismetServer($akismetServer) { + $this->akismetServer = $akismetServer; + } + + /** + * Defaults to '1.1' + */ + public function setAkismetVersion($akismetVersion) { + $this->akismetVersion = $akismetVersion; + } +} + +/** + * Utility class used by Akismet + * + * This class is used by Akismet to do the actual sending and receiving of data. It opens a connection to a remote host, sends some data and the reads the response and makes it available to the calling program. + * + * The code that makes up this class originates in the Akismet WordPress plugin, which is {@link http://akismet.com/download/ available on the Akismet website}. + * + * N.B. It is not necessary to call this class directly to use the Akismet class. This is included here mainly out of a sense of completeness. + * + * @package akismet + * @name SocketWriteRead + * @version 0.1 + * @author Alex Potsides + * @link http://www.achingbrain.net/ + */ +class SocketWriteRead { + private $host; + private $port; + private $request; + private $response; + private $responseLength; + private $errorNumber; + private $errorString; + + /** + * @param string $host The host to send/receive data. + * @param int $port The port on the remote host. + * @param string $request The data to send. + * @param int $responseLength The amount of data to read. Defaults to 1160 bytes. + */ + public function __construct($host, $port, $request, $responseLength = 1160) { + $this->host = $host; + $this->port = $port; + $this->request = $request; + $this->responseLength = $responseLength; + $this->errorNumber = 0; + $this->errorString = ''; + } + + /** + * Sends the data to the remote host. + * + * @throws An exception is thrown if a connection cannot be made to the remote host. + */ + public function send() { + $this->response = ''; + + $fs = fsockopen($this->host, $this->port, $this->errorNumber, $this->errorString, 3); + + if($this->errorNumber != 0) { + throw new Exception('Error connecting to host: ' . $this->host . ' Error number: ' . $this->errorNumber . ' Error message: ' . $this->errorString); + } + + if($fs !== false) { + @fwrite($fs, $this->request); + + while(!feof($fs)) { + $this->response .= fgets($fs, $this->responseLength); + } + + fclose($fs); + } + } + + /** + * Returns the server response text + * + * @return string + */ + public function getResponse() { + return $this->response; + } + + /** + * Returns the error number + * + * If there was no error, 0 will be returned. + * + * @return int + */ + public function getErrorNumner() { + return $this->errorNumber; + } + + /** + * Returns the error string + * + * If there was no error, an empty string will be returned. + * + * @return string + */ + public function getErrorString() { + return $this->errorString; + } +} + +?> \ No newline at end of file diff --git a/app/controllers/components/botao.php b/app/controllers/components/botao.php new file mode 100644 index 0000000..3618614 --- /dev/null +++ b/app/controllers/components/botao.php @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/app/controllers/components/calculadora.php b/app/controllers/components/calculadora.php new file mode 100644 index 0000000..17ab892 --- /dev/null +++ b/app/controllers/components/calculadora.php @@ -0,0 +1,473 @@ +tratamento(); + + $this->voltar(); + + $this->verifica(); + } + + + + function verifica() + { + + if( ( !empty( $arrCampos['cepOrigem'] ) ) && ( !empty( $arrCampos['cepDestino'] ) ) && ( !empty( $arrCampos['valor'] ) ) && ( !empty( $arrCampos['peso'] ) ) ) + { + + $this->ativar = true; + }else{ + + $this->ativar = false; + } + } + + + + + function sedex( $arrCampos ) + { + + /** + * SEDEX + + try { + + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_SEDEX; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = "
"; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + */ + + $this->Frete->nCdServico = 40010; + $this->Frete->sCepOrigem = $arrCampos['cep']; + $this->Frete->sCepDestino = $arrCampos['cepdestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } + + + + + function esedex( $arrCampos ) + { + + + echo $this->Frete->nCdEmpresa = Configure::read( "Ect.cCdEmpresa" ); + $this->Frete->sDsSenha = Configure::read( "Ect.sDsSenha" ); + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_ESEDEX; + $this->Frete->sCepOrigem = $arrCampos['cep']; + $this->Frete->sCepDestino = $arrCampos['cepdestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } + + + function sedex_hoje() + { + + /** + * SEDEX HOJE + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_SEDEXHOJE; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + + + + + + function sedex_10() + { + + /** + * SEDEX 10 + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_SEDEX10; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + function sedex_a_cobrar() + { + + /** + * SEDEX A COBRAR + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_SEDEXACOBRAR; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + function e_sedex() + { + + /** + * E SEDEX + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_ESEDEX; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + function malote() + { + + /** + * MALOTE + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_MALOTE; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + $this->Frete->nVlComprimento = $arrCampos['comprimento']; + $this->Frete->nVlAltura = $arrCampos['altura']; + $this->Frete->nVlLargura = $arrCampos['largura']; + $this->Frete->nCdFormato = $arrCampos['formato']; + $this->Frete->nVlValorDeclarado = $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + function pac() + { + + /** + * PAC + */ + try { + + $this->Frete->nCdServico = EncomendasCorreios::SERVICO_PAC; + $this->Frete->sCepOrigem = $arrCampos['cepOrigem']; + $this->Frete->sCepDestino = $arrCampos['cepDestino']; + $this->Frete->nVlPeso = $arrCampos['peso']; + + $this->Frete->nVlComprimento = 16; + $this->Frete->nVlAltura = 16; + $this->Frete->nVlLargura = 16; + + $this->Frete->nCdFormato = 1; + $this->Frete->nVlValorDeclarado= $arrCampos['valor']; + $this->Frete->obterResposta(); + + if ($this->Frete->Erro != '0') { + return "Erro: {$this->Frete->MsgErro}

"; + } else { + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + } + } catch (Exception $e) { + return "Erro: {$e->getMessage() }

"; + } + + + } + + + + + + + function moeda( $intValor ) + { + + return number_format( ( $intValor * $arrCampos['quantidade'] ), 2, ',', '.' ); + } + + + + + + + function voltar() + { + + /** + * Links para retorno com codigo de afiliado + * http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5715635&go=[Trocar pela URL de destino] + * + */ + if( ( isset( $_SERVER['HTTP_REFERER'] ) ) && ( !strstr( $_SERVER['HTTP_REFERER'], SITEURL ) ) ) + { + + return $_SERVER['HTTP_REFERER']; + }else{ + + return false; + } + } + + + + + function tratamento() + { + + + /** + * TRATANDO INFORMA��ES + */ + $get = $_REQUEST; + + $arrCampos = $get; + + if( isset( $get['user'] ) ){ $arrCampos['user'] = $get['user']; } + + + if( isset( $get['produto'] ) ){ $arrCampos['produto'] = $get['produto']; } + + + if( isset( $get['peso'] ) ){ $arrCampos['peso'] = $get['peso']; } + + + if( isset( $get['comprimento'] ) ){ $arrCampos['comprimento'] = $get['comprimento']; } + + + if( isset( $get['altura'] ) ){ $arrCampos['altura'] = $get['altura']; } + + + if( isset( $get['largura'] ) ){ $arrCampos['largura'] = $get['largura']; } + + + if( isset( $get['formato'] ) ){ $arrCampos['formato'] = $get['formato']; } + + + if( isset( $get['cepOrigem'] ) ){ $arrCampos['cepOrigem'] = $get['cepOrigem']; } + + + if( isset( $get['cepDestino'] ) ){ $arrCampos['cepDestino'] = $get['cepDestino']; } + + + if( isset( $get['valor'] ) ){ $arrCampos['valor'] = $get['valor']; } + + + if( ( isset( $get['quantidade'] ) ) && ( !empty( $get['quantidade'] ) ) ){ $arrCampos['quantidade'] = $get['quantidade']; }else{ $arrCampos['quantidade'] = 1; } + + } + + + + + +} +?> \ No newline at end of file diff --git a/app/controllers/components/croogo.php b/app/controllers/components/croogo.php new file mode 100644 index 0000000..6744d5c --- /dev/null +++ b/app/controllers/components/croogo.php @@ -0,0 +1,802 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CroogoComponent extends Object { +/** + * Other components used by this component + * + * @var array + * @access public + */ + public $components = array( + 'Session', + ); +/** + * Role ID of current user + * + * Default is 3 (public) + * + * @var integer + * @access public + */ + public $roleId = 3; +/** + * Menus for layout + * + * @var string + * @access public + */ + public $menus_for_layout = array(); + /** + * Blocks for layout + * + * @var string + * @access public + */ + public $blocks_for_layout = array(); + /** + * Vocabularies for layout + * + * @var string + * @access public + */ + public $vocabularies_for_layout = array(); + /** + * Types for layout + * + * @var string + * @access public + */ + public $types_for_layout = array(); + /** + * Nodes for layout + * + * @var string + * @access public + */ + public $nodes_for_layout = array(); +/** + * Blocks data: contains parsed value of bb-code like strings + * + * @var array + * @access public + */ + public $blocksData = array( + 'menus' => array(), + 'vocabularies' => array(), + 'nodes' => array(), + ); +/** + * Startup + * + * @param object $controller instance of controller + * @return void + */ + public function startup(&$controller) { + $this->controller =& $controller; + App::import('Core', 'File'); + + if ($this->Session->check('Auth.User.id')) { + $this->roleId = $this->Session->read('Auth.User.role_id'); + } + + if (!isset($this->controller->params['admin']) && !isset($this->controller->params['requested'])) { + $this->blocks(); + $this->menus(); + $this->vocabularies(); + $this->types(); + $this->nodes(); + } else { + $this->__adminData(); + } + } +/** + * Set variables for admin layout + * + * @return void + */ + private function __adminData() { + // menus + $menus = $this->controller->Link->Menu->find('all', array( + 'recursive' => '-1', + 'order' => 'Menu.id ASC', + )); + $this->controller->set('menus_for_admin_layout', $menus); + + // types + $types = $this->controller->Node->Taxonomy->Vocabulary->Type->find('all', array( + 'conditions' => array( + 'Type.plugin <>' => null, + ), + 'order' => 'Type.alias ASC', + )); + $this->controller->set('types_for_admin_layout', $types); + + // vocabularies + $vocabularies = $this->controller->Node->Taxonomy->Vocabulary->find('all', array( + 'recursive' => '-1', + 'conditions' => array( + 'Vocabulary.plugin <>' => null, + ), + 'order' => 'Vocabulary.alias ASC', + )); + $this->controller->set('vocabularies_for_admin_layout', $vocabularies); + } +/** + * Blocks + * + * Blocks will be available in this variable in views: $blocks_for_layout + * + * @return void + */ + public function blocks() { + $regions = $this->controller->Block->Region->find('list', array( + 'conditions' => array( + 'Region.block_count >' => '0', + ), + 'fields' => array( + 'Region.id', + 'Region.alias', + ), + 'cache' => array( + 'name' => 'croogo_regions', + 'config' => 'croogo_blocks', + ), + )); + foreach ($regions AS $regionId => $regionAlias) { + $this->blocks_for_layout[$regionAlias] = array(); + $findOptions = array( + 'conditions' => array( + 'Block.status' => 1, + 'Block.region_id' => $regionId, + 'AND' => array( + array( + 'OR' => array( + 'Block.visibility_roles' => '', + 'Block.visibility_roles LIKE' => '%"' . $this->roleId . '"%', + ), + ), + array( + 'OR' => array( + 'Block.visibility_paths' => '', + 'Block.visibility_paths LIKE' => '%"' . $this->controller->params['url']['url'] . '"%', + //'Block.visibility_paths LIKE' => '%"' . 'controller:' . $this->params['controller'] . '"%', + //'Block.visibility_paths LIKE' => '%"' . 'controller:' . $this->params['controller'] . '/' . 'action:' . $this->params['action'] . '"%', + ), + ), + ), + ), + 'order' => array( + 'Block.weight' => 'ASC' + ), + 'cache' => array( + 'prefix' => 'croogo_blocks_'.$regionAlias.'_'.$this->roleId.'_', + 'config' => 'croogo_blocks', + ), + 'recursive' => '-1', + ); + $blocks = $this->controller->Block->find('all', $findOptions); + $this->processBlocksData($blocks); + $this->blocks_for_layout[$regionAlias] = $blocks; + } + } +/** + * Process blocks for bb-code like strings + * + * @param array $blocks + * @return void + */ + public function processBlocksData($blocks) { + foreach ($blocks AS $block) { + $this->blocksData['menus'] = Set::merge($this->blocksData['menus'], $this->parseString('menu|m', $block['Block']['body'])); + $this->blocksData['vocabularies'] = Set::merge($this->blocksData['vocabularies'], $this->parseString('vocabulary|v', $block['Block']['body'])); + $this->blocksData['nodes'] = Set::merge($this->blocksData['nodes'], $this->parseString('node|n', $block['Block']['body'], array( + 'convertOptionsToArray' => true, + ))); + } + } +/** + * Menus + * + * Menus will be available in this variable in views: $menus_for_layout + * + * @return void + */ + public function menus() { + $menus = array(); + $themeData = $this->getThemeData(Configure::read('Site.theme')); + if (isset($themeData['menus']) && is_array($themeData['menus'])) { + $menus = Set::merge($menus, $themeData['menus']); + } + $menus = Set::merge($menus, array_keys($this->blocksData['menus'])); + + foreach ($menus AS $menuAlias) { + $menu = $this->controller->Link->Menu->find('first', array( + 'conditions' => array( + 'Menu.status' => 1, + 'Menu.alias' => $menuAlias, + 'Menu.link_count >' => 0, + ), + 'cache' => array( + 'name' => 'croogo_menu_'.$menuAlias, + 'config' => 'croogo_menus', + ), + 'recursive' => '-1', + )); + if (isset($menu['Menu']['id'])) { + $this->menus_for_layout[$menuAlias] = array(); + $this->menus_for_layout[$menuAlias]['Menu'] = $menu['Menu']; + $findOptions = array( + 'conditions' => array( + 'Link.menu_id' => $menu['Menu']['id'], + 'Link.status' => 1, + 'AND' => array( + array( + 'OR' => array( + 'Link.visibility_roles' => '', + 'Link.visibility_roles LIKE' => '%"' . $this->roleId . '"%', + ), + ), + ), + ), + 'order' => array( + 'Link.lft' => 'ASC', + ), + 'cache' => array( + 'name' => 'croogo_menu_'.$menu['Menu']['id'].'_links_'.$this->roleId, + 'config' => 'croogo_menus', + ), + 'recursive' => -1, + ); + $links = $this->controller->Link->find('threaded', $findOptions); + $this->menus_for_layout[$menuAlias]['threaded'] = $links; + } + } + } +/** + * Vocabularies + * + * Vocabularies will be available in this variable in views: $vocabularies_for_layout + * + * @return void + */ + public function vocabularies() { + $vocabularies = array(); + $themeData = $this->getThemeData(Configure::read('Site.theme')); + if (isset($themeData['vocabularies']) && is_array($themeData['vocabularies'])) { + $vocabularies = Set::merge($vocabularies, $themeData['vocabularies']); + } + $vocabularies = Set::merge($vocabularies, array_keys($this->blocksData['vocabularies'])); + $vocabularies = array_unique($vocabularies); + foreach ($vocabularies AS $vocabularyAlias) { + $vocabulary = $this->controller->Node->Taxonomy->Vocabulary->find('first', array( + 'conditions' => array( + 'Vocabulary.alias' => $vocabularyAlias, + ), + 'cache' => array( + 'name' => 'croogo_vocabulary_'.$vocabularyAlias, + 'config' => 'croogo_vocabularies', + ), + 'recursive' => '-1', + )); + if (isset($vocabulary['Vocabulary']['id'])) { + $threaded = $this->controller->Node->Taxonomy->find('threaded', array( + 'conditions' => array( + 'Taxonomy.vocabulary_id' => $vocabulary['Vocabulary']['id'], + ), + 'contain' => array( + 'Term', + ), + 'cache' => array( + 'name' => 'croogo_vocabulary_threaded_'.$vocabularyAlias, + 'config' => 'croogo_vocabularies', + ), + 'order' => 'Taxonomy.lft ASC', + )); + $this->vocabularies_for_layout[$vocabularyAlias] = array(); + $this->vocabularies_for_layout[$vocabularyAlias]['Vocabulary'] = $vocabulary['Vocabulary']; + $this->vocabularies_for_layout[$vocabularyAlias]['threaded'] = $threaded; + } + } + } +/** + * Types + * + * Types will be available in this variable in views: $types_for_layout + * + * @return void + */ + public function types() { + $types = $this->controller->Node->Taxonomy->Vocabulary->Type->find('all', array( + 'cache' => array( + 'name' => 'croogo_types', + 'config' => 'croogo_types', + ), + )); + foreach ($types AS $type) { + $alias = $type['Type']['alias']; + $this->types_for_layout[$alias] = $type; + } + } +/** + * Nodes + * + * Nodes will be available in this variable in views: $nodes_for_layout + * + * @return void + */ + public function nodes() { + $nodes = $this->blocksData['nodes']; + $_nodeOptions = array( + 'find' => 'all', + 'conditions' => array( + 'Node.status' => 1, + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->roleId . '"%', + ), + ), + 'order' => 'Node.created DESC', + 'limit' => 5, + ); + + foreach ($nodes AS $alias => $options) { + $options = Set::merge($_nodeOptions, $options); + $options['limit'] = str_replace('"', '', $options['limit']); + $node = $this->controller->Node->find($options['find'], array( + 'conditions' => $options['conditions'], + 'order' => $options['order'], + 'limit' => $options['limit'], + 'cache' => array( + 'prefix' => 'croogo_nodes_'.$alias.'_', + 'config' => 'croogo_nodes', + ), + )); + $this->nodes_for_layout[$alias] = $node; + } + } +/** + * Converts formatted string to array + * + * A string formatted like 'Node.type:blog;' will be converted to + * array('Node.type' => 'blog'); + * + * @param string $string in this format: Node.type:blog;Node.user_id:1; + * @return array + */ + public function stringToArray($string) { + $string = explode(';', $string); + $stringArr = array(); + foreach ($string AS $stringElement) { + if ($stringElement != null) { + $stringElementE = explode(':', $stringElement); + if (isset($stringElementE['1'])) { + $stringArr[$stringElementE['0']] = $stringElementE['1']; + } else { + $stringArr[] = $stringElement; + } + } + } + + return $stringArr; + } +/** + * beforeRender + * + * @param object $controller instance of controller + * @return void + */ + public function beforeRender(&$controller) { + $this->controller =& $controller; + $this->controller->set('blocks_for_layout', $this->blocks_for_layout); + $this->controller->set('menus_for_layout', $this->menus_for_layout); + $this->controller->set('vocabularies_for_layout', $this->vocabularies_for_layout); + $this->controller->set('types_for_layout', $this->types_for_layout); + $this->controller->set('nodes_for_layout', $this->nodes_for_layout); + + if ($controller->theme) { + //$helperPaths = Configure::read('helperPaths'); + //array_unshift($helperPaths, APP.'views'.DS.'themed'.DS.$controller->theme.DS.'helpers'.DS); + //Configure::write('helperPaths', $helperPaths); + + // Unless http://cakephp.lighthouseapp.com/projects/42648/tickets/84-enable-appbuild-to-retain-the-order-of-paths-given is integrated + // with the main core, the following "proper" way won't work. + //App::build(array('helpers' => array(APP . 'views' . DS . 'themed' . DS . $controller->theme . DS . 'helpers' . DS))); + + // Workaround + $appInstance =& App::getInstance(); + array_unshift($appInstance->helpers, APP.'views'.DS.'themed'.DS.$controller->theme.DS.'helpers'.DS); + } + } +/** + * Extracts parameters from 'filter' named parameter. + * + * @return array + */ + public function extractFilter() { + $filter = explode(';', $this->controller->params['named']['filter']); + $filterData = array(); + foreach ($filter AS $f) { + $fData = explode(':', $f); + $fKey = $fData['0']; + if ($fKey != null) { + $filterData[$fKey] = $fData['1']; + } + } + return $filterData; + } +/** + * Get URL relative to the app + * + * @param array $url + * @return array + */ + public function getRelativePath($url = '/') { + if (is_array($url)) { + $absoluteUrl = Router::url($url, true); + } else { + $absoluteUrl = Router::url('/' . $url, true); + } + $path = '/' . str_replace(Router::url('/', true), '', $absoluteUrl); + return $path; + } +/** + * ACL: add ACO + * + * Creates ACOs with permissions for roles. + * + * @param string $action possible values: ControllerName, ControllerName/method_name + * @param array $allowRoles Role aliases + * @return void + */ + public function addAco($action, $allowRoles = array()) { + // AROs + $aroIds = array(); + if (count($allowRoles) > 0) { + $roles = ClassRegistry::init('Role')->find('list', array( + 'conditions' => array( + 'Role.alias' => $allowRoles, + ), + 'fields' => array( + 'Role.id', + 'Role.alias', + ), + )); + $roleIds = array_keys($roles); + $aros = $this->controller->Acl->Aro->find('list', array( + 'conditions' => array( + 'Aro.model' => 'Role', + 'Aro.foreign_key' => $roleIds, + ), + 'fields' => array( + 'Aro.id', + 'Aro.alias', + ), + )); + $aroIds = array_keys($aros); + } + + // ACOs + $acoNode = $this->controller->Acl->Aco->node($this->controller->Auth->actionPath.$action); + if (!isset($acoNode['0']['Aco']['id'])) { + if (!strstr($action, '/')) { + $parentNode = $this->controller->Acl->Aco->node(str_replace('/', '', $this->controller->Auth->actionPath)); + $alias = $action; + } else { + $actionE = explode('/', $action); + $controllerName = $actionE['0']; + $method = $actionE['1']; + $alias = $method; + $parentNode = $this->controller->Acl->Aco->node($this->controller->Auth->actionPath.$controllerName); + } + $parentId = $parentNode['0']['Aco']['id']; + $acoData = array( + 'parent_id' => $parentId, + 'model' => null, + 'foreign_key' => null, + 'alias' => $alias, + ); + $this->controller->Acl->Aco->id = false; + $this->controller->Acl->Aco->save($acoData); + $acoId = $this->controller->Acl->Aco->id; + } else { + $acoId = $acoNode['0']['Aco']['id']; + } + + // Permissions (aros_acos) + foreach ($aroIds AS $aroId) { + $permission = $this->controller->Acl->Aro->Permission->find('first', array( + 'conditions' => array( + 'Permission.aro_id' => $aroId, + 'Permission.aco_id' => $acoId, + ), + )); + if (!isset($permission['Permission']['id'])) { + // create a new record + $permissionData = array( + 'aro_id' => $aroId, + 'aco_id' => $acoId, + '_create' => 1, + '_read' => 1, + '_update' => 1, + '_delete' => 1, + ); + $this->controller->Acl->Aco->Permission->id = false; + $this->controller->Acl->Aco->Permission->save($permissionData); + } else { + // check if not permitted + if ($permission['Permission']['_create'] == 0 || + $permission['Permission']['_read'] == 0 || + $permission['Permission']['_update'] == 0 || + $permission['Permission']['_delete'] == 0) { + $permissionData = array( + 'id' => $permission['Permission']['id'], + 'aro_id' => $aroId, + 'aco_id' => $acoId, + '_create' => 1, + '_read' => 1, + '_update' => 1, + '_delete' => 1, + ); + $this->controller->Acl->Aco->Permission->id = $permission['Permission']['id']; + $this->controller->Acl->Aco->Permission->save($permissionData); + } + } + } + } +/** + * ACL: remove ACO + * + * Removes ACOs and their Permissions + * + * @param string $action possible values: ControllerName, ControllerName/method_name + * @return void + */ + public function removeAco($action) { + $acoNode = $this->controller->Acl->Aco->node($this->controller->Auth->actionPath.$action); + if (isset($acoNode['0']['Aco']['id'])) { + $this->controller->Acl->Aco->delete($acoNode['0']['Aco']['id']); + } + } +/** + * Loads plugin's bootstrap.php file + * + * @param string $plugin Plugin name (underscored) + * @return void + */ + public function addPluginBootstrap($plugin) { + $hookBootstraps = Configure::read('Hook.bootstraps'); + if (!$hookBootstraps) { + $plugins = array(); + } else { + $plugins = explode(',', $hookBootstraps); + } + + if (array_search($plugin, $plugins) !== false) { + $plugins = $hookBootstraps; + } else { + $plugins[] = $plugin; + $plugins = implode(',', $plugins); + } + $this->controller->Setting->write('Hook.bootstraps', $plugins); + } +/** + * Plugin name will be removed from Hook.bootstraps + * + * @param string $plugin Plugin name (underscored) + * @return void + */ + public function removePluginBootstrap($plugin) { + $hookBootstraps = Configure::read('Hook.bootstraps'); + if (!$hookBootstraps) { + return; + } + + $plugins = explode(',', $hookBootstraps); + if (array_search($plugin, $plugins) !== false) { + $k = array_search($plugin, $plugins); + unset($plugins[$k]); + } + + if (count($plugins) == 0) { + $plugins = ''; + } else { + $plugins = implode(',', $plugins); + } + $this->controller->Setting->write('Hook.bootstraps', $plugins); + } +/** + * Parses bb-code like string. + * + * Example: string containing [menu:main option1="value"] will return an array like + * + * Array + * ( + * [main] => Array + * ( + * [option1] => value + * ) + * ) + * + * @param string $exp + * @param string $text + * @param array $options + * @return array + */ + public function parseString($exp, $text, $options = array()) { + $_options = array( + 'convertOptionsToArray' => false, + ); + $options = array_merge($_options, $options); + + $output = array(); + preg_match_all('/\[('.$exp.'):([A-Za-z0-9_\-]*)(.*?)\]/i', $text, $tagMatches); + for ($i=0; $i < count($tagMatches[1]); $i++) { + $regex = '/(\S+)=[\'"]?((?:.(?![\'"]?\s+(?:\S+)=|[>\'"]))+.)[\'"]?/i'; + preg_match_all($regex, $tagMatches[3][$i], $attributes); + $alias = $tagMatches[2][$i]; + $aliasOptions = array(); + for ($j=0; $j < count($attributes[0]); $j++) { + $aliasOptions[$attributes[1][$j]] = $attributes[2][$j]; + } + if ($options['convertOptionsToArray']) { + foreach ($aliasOptions AS $optionKey => $optionValue) { + if (!is_array($optionValue) && strpos($optionValue, ':') !== false) { + $aliasOptions[$optionKey] = $this->stringToArray($optionValue); + } + } + } + $output[$alias] = $aliasOptions; + } + return $output; + } +/** + * Get theme alises (folder names) + * + * @return array + */ + public function getThemes() { + $themes = array( + 'default' => 'default', + ); + $this->folder = new Folder; + $viewPaths = App::path('views'); + foreach ($viewPaths AS $viewPath) { + $this->folder->path = $viewPath . 'themed'; + $themeFolders = $this->folder->read(); + foreach ($themeFolders['0'] AS $themeFolder) { + $this->folder->path = $viewPath . 'themed' . DS . $themeFolder . DS . 'webroot'; + $themeFolderContent = $this->folder->read(); + if (in_array('theme.yml', $themeFolderContent['1'])) { + $themes[$themeFolder] = $themeFolder; + } + } + } + return $themes; + } +/** + * Get the content of theme.yml file + * + * @param string $alias theme folder name + * @return array + */ + public function getThemeData($alias = null) { + if ($alias == null || $alias == 'default') { + $ymlLocation = WWW_ROOT . 'theme.yml'; + } else { + $viewPaths = App::path('views'); + foreach ($viewPaths AS $viewPath) { + if (file_exists($viewPath . 'themed' . DS . $alias . DS . 'webroot' . DS . 'theme.yml')) { + $ymlLocation = $viewPath . 'themed' . DS . $alias . DS . 'webroot' . DS . 'theme.yml'; + continue; + } + } + if (!isset($ymlLocation)) { + $ymlLocation = WWW_ROOT . 'theme.yml'; + } + } + $themeData = Spyc::YAMLLoad(file_get_contents($ymlLocation)); + return $themeData; + } +/** + * Get plugin alises (folder names) + * + * @return array + */ + public function getPlugins() { + $plugins = array(); + $this->folder = new Folder; + $pluginPaths = App::path('plugins'); + foreach ($pluginPaths AS $pluginPath) { + $this->folder->path = $pluginPath; + $pluginFolders = $this->folder->read(); + foreach ($pluginFolders[0] AS $pluginFolder) { + if (substr($pluginFolder, 0, 1) != '.') { + $this->folder->path = $pluginPath . $pluginFolder . DS . 'config'; + $pluginFolderContent = $this->folder->read(); + if (in_array('plugin.yml', $pluginFolderContent[1])) { + $plugins[$pluginFolder] = $pluginFolder; + } + } + } + } + return $plugins; + } +/** + * Get the content of plugin.yml file + * + * @param string $alias plugin folder name + * @return array + */ + public function getPluginData($alias = null) { + $pluginPaths = App::path('plugins'); + foreach ($pluginPaths AS $pluginPath) { + $ymlLocation = $pluginPath . $alias . DS . 'config' . DS . 'plugin.yml'; + if (file_exists($ymlLocation)) { + $pluginData = Spyc::YAMLLoad(file_get_contents($ymlLocation)); + $pluginData['active'] = $this->pluginIsActive($alias); + return $pluginData; + } + } + return false; + } +/** + * Check if plugin is dependent on any other plugin. + * If yes, check if that plugin is available in plugins directory. + * + * @param string $plugin plugin alias (underscrored) + * @return boolean + */ + public function checkPluginDependency($plugin = null) { + $pluginData = $this->getPluginData($plugin); + $pluginPaths = App::path('plugins'); + if (isset($pluginData['dependencies']['plugins']) && is_array($pluginData['dependencies']['plugins'])) { + foreach ($pluginData['dependencies']['plugins'] AS $p) { + $check = false; + foreach ($pluginPaths AS $pluginPath) { + if (is_dir($pluginPath . $p)) { + $check = true; + } + } + if (!$check) { + return false; + } + } + } + return true; + } +/** + * Check if plugin is active + * + * @param string $plugin Plugin name (underscored) + * @return boolean + */ + public function pluginIsActive($plugin) { + $configureKeys = array( + 'Hook.bootstraps', + ); + + foreach ($configureKeys AS $configureKey) { + $hooks = explode(',', Configure::read($configureKey)); + foreach ($hooks AS $hook) { + if ($hook == $plugin) { + return true; + } + } + } + + return false; + } + +} +?> \ No newline at end of file diff --git a/app/controllers/components/empty b/app/controllers/components/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/controllers/components/frete.php b/app/controllers/components/frete.php new file mode 100644 index 0000000..509635b --- /dev/null +++ b/app/controllers/components/frete.php @@ -0,0 +1,224 @@ + + * @copyright Copyright (C) 2009-2010 Paulo Freitas + * @license http://creativecommons.org/licenses/by-sa/3.0 + */ + + + +class FreteComponent extends Object +{ + + + + + /* + * Servi�os + */ + const SERVICO_ESEDEX = 81019; + const SERVICO_MALOTE = 44105; + const SERVICO_PAC = 41106; + const SERVICO_SEDEX = 40010; + const SERVICO_SEDEX10 = 40215; + const SERVICO_SEDEXACOBRAR = 40045; + const SERVICO_SEDEXHOJE = 40290; + + var $Erro; + var $MsgErro; + + var $api_url = + 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx'; + + var $entrada = array( + 'nCdEmpresa' => '', + 'sDsSenha' => '', + 'nCdServico' => 40010, + 'sCepOrigem' => '', + 'sCepDestino' => '', + 'nVlPeso' => 0, + 'nCdFormato' => 1, + 'nVlComprimento' => 0, + 'nVlAltura' => 0, + 'nVlLargura' => 0, + 'nVlDiametro' => 0, + 'sCdMaoPropria' => 'N', + 'nVlValorDeclarado' => 0, + 'sCdAvisoRecebimento' => 'N' + ); + var $saida; + + + + function pre( ) + { + + $entrada = $this->entrada; + foreach ( $entrada as $chave => $value) + { + + $this->entrada[ $chave ] = r( '.', ',', $value ); + } + } + + + + function requisicao( $envio_maximo = null ) + { + + /** + * Trata possiveis erros como . ao invés de , + */ + $this->pre( ); + + + + App::import( "Xml" ); + + $this->entrada['StrRetorno'] = 'xml'; + $target = html_entity_decode( ( $this->api_url .'?'. http_build_query( $this->entrada ) ) ); + + $xml = new XML( $target ); + + //print_r( $this->api_url .'?'. http_build_query( $this->entrada ) ."
" ); + + + $arrFrete = Set::reverse( $xml ); + $arrFrete['Servicos']['CServico']['envio_maximo'] = $envio_maximo; + + + + + //debug( $arrFrete ); + return $this->processa( $arrFrete ); + + } + + + + + function processa( $arrObj ) + { + + /** + * Atalho para acessar os Arrays + */ + $frete = $arrObj['Servicos']['CServico']; + + /** + * Corrigindo valor + */ + $frete['Valor'] = str_replace( ',', '.', $frete['Valor'] ); + $frete['ValorAvisoRecebimento'] = str_replace( ',', '.', $frete['ValorAvisoRecebimento'] ); + $frete['ValorMaoPropria'] = str_replace( ',', '.', $frete['ValorMaoPropria'] ); + $frete['nVlValorDeclarado'] = str_replace( ',', '.', $this->entrada['nVlValorDeclarado'] ); + + // facilitando manipular dados + $frete['quantidade'] = $this->entrada['quantidade']; + + + /** + * Corrigindo valor declarado + */ + $frete['ValorValorDeclarado'] = r( ',', '.', $frete['ValorValorDeclarado'] ); + + /** + * Corrigindo o prazo de entrega + */ + $frete['PrazoEntrega'] = ( $frete['PrazoEntrega'] > 1 )? $frete['PrazoEntrega'] ." dias úteis": $frete['PrazoEntrega'] ." dia útil"; + + + + /** + * Adicionando recurso para calcular + * de acordo com a quantidade por encomenda + * + * qtn 6 + * max 3 + */ + if( ($frete['quantidade'] > 1 ) && ($frete['quantidade'] > $frete['envio_maximo']) ) + { + $frete['maximo'] = ceil($this->entrada['quantidade'] / $frete['envio_maximo']); + //$frete['quantidade'] = ceil($frete['quantidade'] / $frete['envio_maximo']); + + $frete['frete_correto'] = $frete['Valor'] * $frete['maximo']; + + }else{ + $frete['maximo'] = $frete['quantidade']; + + $frete['frete_correto'] = $frete['Valor']; + } + + + /** + * Adicionando total frete * quantidade + valor + */ + //$frete['total'] = ( $frete['Valor'] + $frete['nVlValorDeclarado'] ); + $frete['total'] = ( $frete['frete_correto'] + $frete['nVlValorDeclarado'] ) * $frete['quantidade']; + + + + /** + * Total do produto com seguro + */ + $frete['seguro'] = $frete['total'] + $frete['ValorValorDeclarado']; + + + /** + * Total frete com seguro + */ + $frete['freteSeguro'] = $frete['ValorValorDeclarado'] + $frete['Valor']; + + + $frete['valor'] = $this->entrada['nVlValorDeclarado']; + + + //debug( $frete ); + + return $frete; + + } + + + + + + + + function calcula( $arrCampos, $servico = 41106 ) + { + + $arrCampos['formato'] = ( empty( $arrCampos['formato'] ) )? 1: $arrCampos['formato']; + + + + + $this->nCdServico = $servico; + $this->sCepOrigem = $arrCampos['cep']; + $this->sCepDestino = $arrCampos['cepdestino']; + $this->nVlPeso = $arrCampos['peso']; + $this->nVlComprimento = $arrCampos['comprimento']; + $this->nVlAltura = $arrCampos['altura']; + $this->nVlLargura = $arrCampos['largura']; + $this->nCdFormato = $arrCampos['formato']; + $this->nVlValorDeclarado = r( '.', ',', $arrCampos['valor'] ); + + + $html = ""; + $html .= ""; + $html .= ""; + $html .= ""; + $html .= ""; + + return $html; + + } + +} + + + + +?> diff --git a/app/controllers/components/rastreamento.php b/app/controllers/components/rastreamento.php new file mode 100644 index 0000000..73bebc1 --- /dev/null +++ b/app/controllers/components/rastreamento.php @@ -0,0 +1,201 @@ +siteurl = $_SERVER['SERVER_NAME']; + } + + + + + /** + * Processa a requisicao ao site dos correios + * + * @param unknown_type $strCodigo + * @param Bool $processa informando false o retorno será um Array sem tratamento + * @return unknown + */ + function inicia( $strCodigo, $processa = true ) + { + + $this->strCodigo = $strCodigo; + + + //EE182898571CN + $strContent = file_get_contents( 'http://websro.correios.com.br/sro_bin/txect01$.Inexistente?P_LINGUA=001&P_TIPO=002&P_COD_LIS='. $strCodigo ); + + preg_match_all("|]+>(.*)]+>|U", $this->converte_utf8( $strContent ), $conteudo); + + + if( $processa ) + { + + if( count( $conteudo[0] ) >= 2 ) + { + return $this->processa( $conteudo[0] ); + }else{ + + return "

Código não encontrado

"; + } + }else{ + + return $conteudo[0]; + } + } + + + + + + + + + + + /** + * Percorre os indices em busca de novos valores + * + * @param Array $arrContent + * @return String + */ + function processa( $arrContent ) + { + + $htmls=null; + $html=null; + + + unset( $arrContent[0] ); + unset( $arrContent[1] ); + unset( $arrContent[2] ); + + foreach ( $arrContent as $strContent ) + { + + $html .= $this->replace( $strContent ); + } + + + +/** + $htmls .= "

Resultado do rastreamento do objeto ". $this->strCodigo ."

"; + $htmls .= '

Cadastre-se para utilizar a função Salvar Rastreamento

'; + $htmls .= "

SEDEX

"; + $html .= "O prazo de entrega é de ". $this->Frete->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Frete->Valor ) ."R$ ". $this->moeda( ( $this->Frete->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."

SEDEX

"; + $html .= "O prazo de entrega é de ". $this->Frete->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Frete->Valor ) ."R$ ". $this->moeda( ( $this->Frete->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."

E SEDEX

"; + $html .= "O prazo de entrega é de ". $this->Frete->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Frete->Valor ) ."R$ ". $this->moeda( ( $this->Frete->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."

SEDEX HOJE

"; + $html .= $this->Frete->PrazoEntrega ."
". $this->moeda( $this->Frete->Valor ) ."". $this->moeda( ( $this->Frete->Valor + $this->Frete->nVlValorDeclarado ) ) ."

SEDEX

"; + $html .= $this->Frete->PrazoEntrega ."
". $this->moeda( $this->Frete->Valor ) ."". $this->moeda( ( $this->Frete->Valor + $this->Frete->nVlValorDeclarado ), $arrCampos['quantidade'] ) ."

SEDEX A COBRAR

"; + $html .= "O prazo de entrega é de ". $this->Frete->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Frete->Valor ) ."R$ ". $this->moeda( ( $this->Frete->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."

E SEDEX

"; + $html .= $this->Frete->Valor ."
". $this->Frete->PrazoEntrega ."

MALOTE

"; + $html .= $this->Frete->Valor ."
". $this->Frete->PrazoEntrega ."

PAC

"; + $html .= "O prazo de entrega é de ". $this->Frete->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Frete->Valor ) ."R$ ". $this->moeda( ( $this->Frete->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."

SEDEX

"; + $html .= "O prazo de entrega é de ". $this->PrazoEntrega ." dias úteis
R$ ". $this->moeda( $this->Valor ) ."R$ ". $this->moeda( ( $this->Valor + $arrCampos['valor'] ), $arrCampos['quantidade'] ) ."
"; + $htmls .= " "; + $htmls .= " "; + $htmls .= " "; + $htmls .= " "; + $htmls .= " "; + $htmls .= $html; + $htmls .= " "; + $htmls .= "
DataLocalSituação
"; + $htmls .= "
"; +*/ + + return $html; + } + + + + + + + /** + * Renmove HTML inutil ou com problemas + * + * @return String formatada com HTML removido + */ + function replace( $strContent = null ) + { + + + + $strSiteUrl = 'http://'. $this->siteurl; + + + $arrProcura = array( + "", + '', + '', + '', + 'Entregue', + ' Entregue ', + 'Saiu para entrega', + ' Aguardando retirada ', + 'Conferido', + ' Encaminhado ', + 'Postado', + ' Destinatário ausente ', + 'FISCALIZACAO/CUSTOMS', + 'FISCALIZAÇÃO/CUSTOMS', + 'Liberado pela alfândega', + 'CTCI SAO PAULO (GEARA)', + 'CTCI SAO PAULO (GEEXP)', + 'OBJ RETIDO - VER AUTENTICIDADE MARCA', + 'Recebido/Brasil', + 'TRIBUTADO', + 'Por favor, entre em contato conosco clicando aqui.', + ); + $arrTroca = array( + ' ', + ' ', + ' ', + ' ', + 'Entregue', + 'Entregue', + 'Saiu para entrega', + 'Saiu para entrega', + 'Conferido', + 'Encaminhado', + 'Postado', + 'Destinatário ausente', + 'FISCALIZACAO/CUSTOMS', + 'FISCALIZACAO/CUSTOMS', + 'Liberado pela alfândega', + 'CTCI SAO PAULO (GEARA)', + 'CTCI SAO PAULO (GEEXP)', + 'OBJ RETIDO - VER AUTENTICIDADE MARCA', + 'Recebido/Brasil', + 'TRIBUTADO', + 'Por favor, entre em contato conosco clicando aqui.', + ); + + return r( $arrProcura, $arrTroca, preg_replace( '/\s{2,}/', '', $strContent ) ); + } + + + + + + + /** + * Converte caracteres escritos em ISO-8859 em UTF-8 + * + * @author John-Henrique F. Silva + * @since 20100315 + * @version 0.1 + * @license http://creativecommons.org/licenses/by-nc-sa/2.0/br Commons Creative + * @param String $strContent que precisa ser convertida + * @return String convertida em UTF-8 + */ + function converte_utf8( $strContent ) + { + + return mb_convert_encoding( $strContent, 'UTF-8', mb_detect_encoding( $strContent, 'UTF-8, ISO-8859-1', true ) ); + } + + + + + + +} + +?> \ No newline at end of file diff --git a/app/controllers/components/recaptcha.php b/app/controllers/components/recaptcha.php new file mode 100644 index 0000000..46473b5 --- /dev/null +++ b/app/controllers/components/recaptcha.php @@ -0,0 +1,140 @@ +publickey = Configure::read('Service.recaptcha_public_key'); + $this->privatekey = Configure::read('Service.recaptcha_private_key'); + + Configure::write("Recaptcha.apiServer","http://api.recaptcha.net"); + Configure::write("Recaptcha.apiSecureServer","https://api-secure.recaptcha.net"); + Configure::write("Recaptcha.verifyServer","api-verify.recaptcha.net"); + Configure::write("Recaptcha.pubKey", $this->publickey); + Configure::write("Recaptcha.privateKey", $this->privatekey); + + $this->controller =& $controller; + $this->controller->helpers[] = "Recaptcha"; + } + + public function valid($form){ + if (isset($form['recaptcha_challenge_field']) && isset($form['recaptcha_response_field'])){ + if($this->recaptcha_check_answer( + $this->privatekey, + $_SERVER["REMOTE_ADDR"], + $form['recaptcha_challenge_field'], + $form['recaptcha_response_field'] + ) == 0) + return false; + + if ($this->is_valid) + return true; + } + return false; + } + + /** + * Calls an HTTP POST function to verify if the user's guess was correct + * @param string $privkey + * @param string $remoteip + * @param string $challenge + * @param string $response + * @param array $extra_params an array of extra variables to post to the server + * @return ReCaptchaResponse + */ + public function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()){ + if ($privkey == null || $privkey == ''){ + die ("To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey"); + } + + if ($remoteip == null || $remoteip == ''){ + die ("For security reasons, you must pass the remote ip to reCAPTCHA"); + } + + //discard spam submissions + if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { + $this->is_valid = false; + $this->error = 'incorrect-captcha-sol'; + return 0; + } + + $response = $this->_recaptcha_http_post(Configure::read('Recaptcha.verifyServer'), "/verify", + array ( + 'privatekey' => $privkey, + 'remoteip' => $remoteip, + 'challenge' => $challenge, + 'response' => $response + ) + $extra_params + ); + + $answers = explode ("\n", $response [1]); + + if (trim ($answers [0]) == 'true') { + $this->is_valid = true; + return 1; + }else{ + $this->is_valid = false; + $this->error = $answers [1]; + return 0; + } + } + + + /** + * Submits an HTTP POST to a reCAPTCHA server + * @param string $host + * @param string $path + * @param array $data + * @param int port + * @return array response + */ + protected function _recaptcha_http_post($host, $path, $data, $port = 80) { + + $req = $this->_recaptcha_qsencode ($data); + + $http_request = "POST $path HTTP/1.0\r\n"; + $http_request .= "Host: $host\r\n"; + $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; + $http_request .= "Content-Length: " . strlen($req) . "\r\n"; + $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; + $http_request .= "\r\n"; + $http_request .= $req; + + $response = ''; + if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { + die ('Could not open socket'); + } + + fwrite($fs, $http_request); + + while ( !feof($fs) ) + $response .= fgets($fs, 1160); // One TCP-IP packet + fclose($fs); + $response = explode("\r\n\r\n", $response, 2); + + return $response; + } + + + /** + * Encodes the given data into a query string format + * @param $data - array of string elements to be encoded + * @return string - encoded request + */ + protected function _recaptcha_qsencode ($data) { + $req = ""; + foreach ( $data as $key => $value ) + $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; + + // Cut the last '&' + $req=substr($req,0,strlen($req)-1); + return $req; + } +} +?> \ No newline at end of file diff --git a/app/controllers/contacts_controller.php b/app/controllers/contacts_controller.php new file mode 100644 index 0000000..a4ca842 --- /dev/null +++ b/app/controllers/contacts_controller.php @@ -0,0 +1,206 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ContactsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Contacts'; +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Akismet', + 'Email', + 'Recaptcha', + ); +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Contact'); + + public function admin_index() { + $this->set('title_for_layout', __('Contacts', true)); + + $this->Contact->recursive = 0; + $this->paginate['Contact']['order'] = 'Contact.title ASC'; + $this->set('contacts', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Contact', true)); + + if (!empty($this->data)) { + $this->Contact->create(); + if ($this->Contact->save($this->data)) { + $this->Session->setFlash(__('The Contact has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Contact could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Contact', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Contact', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Contact->save($this->data)) { + $this->Session->setFlash(__('The Contact has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Contact could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Contact->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Contact', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Contact->delete($id)) { + $this->Session->setFlash(__('Contact deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function view($alias = null) { + if (!$alias) { + $this->redirect('/'); + } + + $contact = $this->Contact->find('first', array( + 'conditions' => array( + 'Contact.alias' => $alias, + 'Contact.status' => 1, + ), + 'cache' => array( + 'name' => 'contact_'.$alias, + 'config' => 'contacts_view', + ), + )); + if (!isset($contact['Contact']['id'])) { + $this->redirect('/'); + } + $this->set('contact', $contact); + + $continue = true; + if (!$contact['Contact']['message_status']) { + $continue = false; + } + if (!empty($this->data) && $continue === true) { + $this->data['Message']['contact_id'] = $contact['Contact']['id']; + $this->data['Message']['title'] = htmlspecialchars($this->data['Message']['title']); + $this->data['Message']['name'] = htmlspecialchars($this->data['Message']['name']); + $this->data['Message']['body'] = htmlspecialchars($this->data['Message']['body']); + $continue = $this->__validation($continue, $contact); + $continue = $this->__spam_protection($continue, $contact); + $continue = $this->__captcha($continue, $contact); + $continue = $this->__send_email($continue, $contact); + + if ($continue === true) { + //$this->Session->setFlash(__('Your message has been received.', true)); + //unset($this->data['Message']); + + echo $this->flash(__('Your message has been received...', true), '/'); + } + } + + $this->set('title_for_layout', $contact['Contact']['title']); + $this->set(compact('continue')); + } + + private function __validation($continue, $contact) { + if ($this->Contact->Message->set($this->data) && + $this->Contact->Message->validates() && + $continue === true) { + if ($contact['Contact']['message_archive'] && + !$this->Contact->Message->save($this->data['Message'])) { + $continue = false; + } + } else { + $continue = false; + } + + return $continue; + } + + private function __spam_protection($continue, $contact) { + if (!empty($this->data) && + $contact['Contact']['message_spam_protection'] && + $continue === true) { + $this->Akismet->setCommentAuthor($this->data['Message']['name']); + $this->Akismet->setCommentAuthorEmail($this->data['Message']['email']); + $this->Akismet->setCommentContent($this->data['Message']['body']); + if ($this->Akismet->isCommentSpam()) { + $continue = false; + $this->Session->setFlash(__('Sorry, the message appears to be spam.', true), 'default', array('class' => 'error')); + } + } + + return $continue; + } + + private function __captcha($continue, $contact) { + if (!empty($this->data) && + $contact['Contact']['message_captcha'] && + $continue === true && + !$this->Recaptcha->valid($this->params['form'])) { + $continue = false; + $this->Session->setFlash(__('Invalid captcha entry', true), 'default', array('class' => 'error')); + } + + return $continue; + } + + private function __send_email($continue, $contact) { + if ($contact['Contact']['message_notify'] && + $continue === true) { + $this->Email->from = Configure::read('Site.title') . ' ' + . ''; + $this->Email->to = $contact['Contact']['email']; + $this->Email->from = $this->data['Message']['name'] . ' <' . $this->data['Message']['email'] . '>'; + $this->Email->subject = '[' . Configure::read('Site.title') . '] ' . $contact['Contact']['title']; + $this->Email->template = 'contact'; + + $this->set('contact', $contact); + $this->set('message', $this->data); + $this->Email->send(); + } + + return $continue; + } + +} +?> \ No newline at end of file diff --git a/app/controllers/filemanager_controller.php b/app/controllers/filemanager_controller.php new file mode 100644 index 0000000..1596f78 --- /dev/null +++ b/app/controllers/filemanager_controller.php @@ -0,0 +1,259 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class FilemanagerController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Filemanager'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting', 'User'); +/** + * Helpers used by the Controller + * + * @var array + * @access public + */ + public $helpers = array('Html', 'Form', 'Filemanager'); + + public $deletablePaths = array(); + + public function beforeFilter() { + parent::beforeFilter(); + + $this->deletablePaths = array( + APP.'views'.DS.'themed'.DS, + WWW_ROOT, + ); + $this->set('deletablePaths', $this->deletablePaths); + + //App::import('Core', 'Folder'); + App::import('Core', 'File'); + } + + public function admin_index() { + $this->redirect(array('action' => 'browse')); + die(); + } + + public function admin_browse() { + $this->folder = new Folder; + + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $path = APP; + } + + $this->set('title_for_layout', __('File Manager', true)); + + $regex = '/^' . preg_quote(APP, '/') . '/'; + if (preg_match($regex, $path) == false) { + $this->Session->setFlash(__(sprintf('Path %s is restricted', $path), true)); + $path = APP; + } + + $blacklist = array('.git', '.svn', '.CVS'); + $regex = '/(' . implode('|', $blacklist) . ')/'; + if (in_array(basename($path), $blacklist) || preg_match($regex, $path) + ) { + $this->Session->setFlash(__(sprintf('Path %s is restricted', $path), true)); + $path = dirname($path); + } + + $this->folder->path = $path; + + $content = $this->folder->read(); + $this->set(compact('content')); + $this->set('path', $path); + } + + public function admin_editfile() { + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + $absolutefilepath = $path; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + $this->set('title_for_layout', sprintf(__('Edit file: %s', true), $path)); + + $path_e = explode(DS, $path); + $n = count($path_e) - 1; + $filename = $path_e[$n]; + unset($path_e[$n]); + $path = implode(DS, $path_e); + $this->file = new File($absolutefilepath, true); + + if (!empty($this->data) ) { + if( $this->file->write($this->data['Filemanager']['content']) ) { + $this->Session->setFlash(__('File saved successfully', true), 'default', array('class' => 'success')); + } + } + + $content = $this->file->read(); + + $this->set(compact('content', 'path', 'absolutefilepath')); + } + + public function admin_upload() { + $this->set('title_for_layout', __('Upload', true)); + + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $path = APP; + } + $this->set(compact('path')); + + if (isset($this->data['Filemanager']['file']['tmp_name']) && + is_uploaded_file($this->data['Filemanager']['file']['tmp_name'])) { + $destination = $path.$this->data['Filemanager']['file']['name']; + move_uploaded_file($this->data['Filemanager']['file']['tmp_name'], $destination); + $this->Session->setFlash(__('File uploaded successfully.', true), 'default', array('class' => 'success')); + $redirectUrl = Router::url(array('controller' => 'filemanager', 'action' => 'browse'), true) . '?path=' . urlencode($path); + + $this->redirect($redirectUrl); + } + } + + public function admin_delete_file() { + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if (file_exists($path) && unlink($path)) { + $this->Session->setFlash(__('File deleted', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occured', true), 'default', array('class' => 'error')); + } + + if (isset($_SERVER['HTTP_REFERER'])) { + $this->redirect($_SERVER['HTTP_REFERER']); + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'index')); + } + + exit(); + } + + public function admin_delete_directory() { + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if (is_dir($path) && rmdir($path)) { + $this->Session->setFlash(__('Directory deleted', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occured', true), 'default', array('class' => 'error')); + } + + if (isset($_SERVER['HTTP_REFERER'])) { + $this->redirect($_SERVER['HTTP_REFERER']); + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'index')); + } + + exit(); + } + + public function admin_rename() { + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + + if (isset($this->params['url']['newpath'])) { + // rename here + } + + if (isset($_SERVER['HTTP_REFERER'])) { + $this->redirect($_SERVER['HTTP_REFERER']); + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'index')); + } + } + + public function admin_create_directory() { + $this->set('title_for_layout', __('New Directory', true)); + + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + + if (!empty($this->data)) { + $this->folder = new Folder; + if ($this->folder->create($path . $this->data['Filemanager']['name'])) { + $this->Session->setFlash(__('Directory created successfully.', true), 'default', array('class' => 'success')); + $redirectUrl = Router::url(array('controller' => 'filemanager', 'action' => 'browse'), true) . '?path=' . urlencode($path); + $this->redirect($redirectUrl); + } else { + $this->Session->setFlash(__('An error occured', true), 'default', array('class' => 'error')); + } + } + + $this->set(compact('path')); + } + + public function admin_create_file() { + $this->set('title_for_layout', __('New File', true)); + + if (isset($this->params['url']['path'])) { + $path = $this->params['url']['path']; + } else { + $this->redirect(array('controller' => 'filemanager', 'action' => 'browse')); + } + + if (!empty($this->data)) { + if (touch($path . $this->data['Filemanager']['name'])) { + $this->Session->setFlash(__('File created successfully.', true), 'default', array('class' => 'success')); + $redirectUrl = Router::url(array('controller' => 'filemanager', 'action' => 'browse'), true) . '?path=' . urlencode($path); + $this->redirect($redirectUrl); + } else { + $this->Session->setFlash(__('An error occured', true), 'default', array('class' => 'error')); + } + } + + $this->set(compact('path')); + } + + public function admin_chmod() { + + } + +} +?> \ No newline at end of file diff --git a/app/controllers/languages_controller.php b/app/controllers/languages_controller.php new file mode 100644 index 0000000..17f57b6 --- /dev/null +++ b/app/controllers/languages_controller.php @@ -0,0 +1,124 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class LanguagesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Languages'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Language'); + + public function admin_index() { + $this->set('title_for_layout', __('Languages', true)); + + $this->Language->recursive = 0; + $this->paginate['Language']['order'] = 'Language.weight ASC'; + $this->set('languages', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __("Add Language", true)); + + if (!empty($this->data)) { + $this->Language->create(); + if ($this->Language->save($this->data)) { + $this->Session->setFlash(__('The Language has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Language could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __("Edit Language", true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Language', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Language->save($this->data)) { + $this->Session->setFlash(__('The Language has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Language could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Language->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Language', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Language->delete($id)) { + $this->Session->setFlash(__('Language deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_moveup($id, $step = 1) { + if ($this->Language->moveup($id, $step)) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_movedown($id, $step = 1) { + if ($this->Language->movedown($id, $step)) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_select($id = null, $modelAlias = null) { + if ($id == null || + $modelAlias == null) { + $this->redirect(array('action' => 'index')); + } + + $this->set('title_for_layout', __('Select a language', true)); + $languages = $this->Language->find('all', array( + 'conditions' => array( + 'Language.status' => 1, + ), + 'order' => 'Language.weight ASC', + )); + $this->set(compact('id', 'modelAlias', 'languages')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/links_controller.php b/app/controllers/links_controller.php new file mode 100644 index 0000000..22b2f4b --- /dev/null +++ b/app/controllers/links_controller.php @@ -0,0 +1,271 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class LinksController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Links'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Link', + 'Role', + ); +/** + * Menu ID + * + * holds the current menu ID (if any) + * + * @var string + * @access public + */ + public $menuId = ''; + + public function admin_index($menuId = null) { + if (!$menuId) { + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $menu = $this->Link->Menu->findById($menuId); + if (!isset($menu['Menu']['id'])) { + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $this->set('title_for_layout', sprintf(__('Links: %s', true), $menu['Menu']['title'])); + + $this->Link->recursive = 0; + $linksTree = $this->Link->generatetreelist(array( + 'Link.menu_id' => $menuId, + )); + $linksStatus = $this->Link->find('list', array( + 'conditions' => array( + 'Link.menu_id' => $menuId, + ), + 'fields' => array( + 'Link.id', + 'Link.status', + ), + )); + $this->set(compact('linksTree', 'linksStatus', 'menu')); + } + + public function admin_add($menuId = null) { + $this->set('title_for_layout', __('Add Link', true)); + + if (!empty($this->data)) { + $this->Link->create(); + $this->data['Link']['visibility_roles'] = $this->Link->encodeData($this->data['Role']['Role']); + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $this->data['Link']['menu_id'], + ), + )); + if ($this->Link->save($this->data)) { + $this->Session->setFlash(__('The Link has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index', $this->data['Link']['menu_id'])); + } else { + $this->Session->setFlash(__('The Link could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + $menus = $this->Link->Menu->find('list'); + $roles = $this->Role->find('list'); + $parentLinks = $this->Link->generatetreelist(array( + 'Link.menu_id' => $menuId, + )); + $this->set(compact('menus', 'roles', 'parentLinks', 'menuId')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Link', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Link', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'menus', + 'action'=>'index', + )); + } + if (!empty($this->data)) { + $this->data['Link']['visibility_roles'] = $this->Link->encodeData($this->data['Role']['Role']); + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $this->data['Link']['menu_id'], + ), + )); + if ($this->Link->save($this->data)) { + $this->Session->setFlash(__('The Link has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index', $this->data['Link']['menu_id'])); + } else { + $this->Session->setFlash(__('The Link could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $data = $this->Link->read(null, $id); + $data['Role']['Role'] = $this->Link->decodeData($data['Link']['visibility_roles']); + $this->data = $data; + } + $menus = $this->Link->Menu->find('list'); + $roles = $this->Role->find('list'); + $menu = $this->Link->Menu->findById($this->data['Link']['menu_id']); + $parentLinks = $this->Link->generatetreelist(array( + 'Link.menu_id' => $menu['Menu']['id'], + )); + $menuId = $menu['Menu']['id']; + $this->set(compact('menus', 'roles', 'parentLinks', 'menuId')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Link', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $link = $this->Link->findById($id); + if (!isset($link['Link']['id'])) { + $this->Session->setFlash(__('Invalid id for Link', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if ($this->Link->delete($id)) { + $this->Session->setFlash(__('Link deleted', true), 'default', array('class' => 'success')); + $this->redirect(array( + 'action'=>'index', + $link['Link']['menu_id'], + )); + } + } + + public function admin_moveup($id, $step = 1) { + $link = $this->Link->findById($id); + if (!isset($link['Link']['id'])) { + $this->Session->setFlash(__('Invalid id for Link', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if( $this->Link->moveup($id, $step) ) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + $this->redirect(array( + 'action' => 'index', + $link['Link']['menu_id'], + )); + } + + public function admin_movedown($id, $step = 1) { + $link = $this->Link->findById($id); + if (!isset($link['Link']['id'])) { + $this->Session->setFlash(__('Invalid id for Link', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if( $this->Link->movedown($id, $step) ) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + $this->redirect(array( + 'action' => 'index', + $link['Link']['menu_id'], + )); + } + + public function admin_process($menuId = null) { + $action = $this->data['Link']['action']; + $ids = array(); + foreach ($this->data['Link'] AS $id => $value) { + if ($id != 'action' && $value['id'] == 1) { + $ids[] = $id; + } + } + if (count($ids) == 0 || $action == null) { + $this->Session->setFlash(__('No items selected.', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'action' => 'index', + $menuId, + )); + } + $menu = $this->Link->Menu->findById($menuId); + if (!isset($menu['Menu']['id'])) { + $this->redirect(array( + 'controller' => 'menus', + 'action' => 'index', + )); + } + $this->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $menuId, + ), + )); + + if ($action == 'delete' && + $this->Link->deleteAll(array('Link.id' => $ids), true, true)) { + $this->Session->setFlash(__('Links deleted.', true), 'default', array('class' => 'success')); + } elseif ($action == 'publish' && + $this->Link->updateAll(array('Link.status' => 1), array('Link.id' => $ids))) { + $this->Session->setFlash(__('Links published', true), 'default', array('class' => 'success')); + } elseif ($action == 'unpublish' && + $this->Link->updateAll(array('Link.status' => 0), array('Link.id' => $ids))) { + $this->Session->setFlash(__('Links unpublished', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array( + 'action' => 'index', + $menuId, + )); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/menus_controller.php b/app/controllers/menus_controller.php new file mode 100644 index 0000000..ba019e3 --- /dev/null +++ b/app/controllers/menus_controller.php @@ -0,0 +1,88 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class MenusController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Menus'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Menu'); + + public function admin_index() { + $this->set('title_for_layout', __('Menus', true)); + + $this->Menu->recursive = 0; + $this->paginate['Menu']['order'] = 'Menu.id ASC'; + $this->set('menus', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Menu', true)); + + if (!empty($this->data)) { + $this->Menu->create(); + if ($this->Menu->save($this->data)) { + $this->Session->setFlash(__('The Menu has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Menu could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Menu', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Menu', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Menu->save($this->data)) { + $this->Session->setFlash(__('The Menu has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Menu could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Menu->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Menu', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Menu->delete($id)) { + $this->Session->setFlash(__('Menu deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/messages_controller.php b/app/controllers/messages_controller.php new file mode 100644 index 0000000..75be52d --- /dev/null +++ b/app/controllers/messages_controller.php @@ -0,0 +1,125 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class MessagesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Messages'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Message'); + + public function admin_index() { + $this->set('title_for_layout', __('Messages', true)); + + $this->Message->recursive = 0; + $this->paginate['Message']['conditions'] = array('Message.status' => 0); + if (isset($this->params['named']['contact'])) { + $this->paginate['Message']['conditions'] = $this->params['named']['contact']; + } + + if (isset($this->params['named']['filter'])) { + $filters = $this->Croogo->extractFilter(); + foreach ($filters AS $filterKey => $filterValue) { + if (strpos($filterKey, '.') === false) { + $filterKey = 'Message.' . $filterKey; + } + $this->paginate['Message']['conditions'][$filterKey] = $filterValue; + } + } + + if ($this->paginate['Message']['conditions']['Message.status'] == 1) { + $this->set('title_for_layout', __('Messages: Read', true)); + } else { + $this->set('title_for_layout', __('Messages: Unread', true)); + } + + $this->paginate['Message']['order'] = 'Message.title ASC'; + $this->set('messages', $this->paginate()); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Message', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Message', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Message->save($this->data)) { + $this->Session->setFlash(__('The Message has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Message could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Message->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Message', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Message->delete($id)) { + $this->Session->setFlash(__('Message deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_process() { + $action = $this->data['Message']['action']; + $ids = array(); + foreach ($this->data['Message'] AS $id => $value) { + if ($id != 'action' && $value['id'] == 1) { + $ids[] = $id; + } + } + + if (count($ids) == 0 || $action == null) { + $this->Session->setFlash(__('No items selected.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if ($action == 'delete' && + $this->Message->deleteAll(array('Message.id' => $ids), true, true)) { + $this->Session->setFlash(__('Messages deleted.', true), 'default', array('class' => 'success')); + } elseif ($action == 'read' && + $this->Message->updateAll(array('Message.status' => 1), array('Message.id' => $ids))) { + $this->Session->setFlash(__('Messages marked as read', true), 'default', array('class' => 'success')); + } elseif ($action == 'unread' && + $this->Message->updateAll(array('Message.status' => 0), array('Message.id' => $ids))) { + $this->Session->setFlash(__('Messages marked as unread', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/nodes_controller.php b/app/controllers/nodes_controller.php new file mode 100644 index 0000000..42cdd25 --- /dev/null +++ b/app/controllers/nodes_controller.php @@ -0,0 +1,748 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class NodesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Nodes'; +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Recaptcha', + ); +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Node', + ); + + public function beforeFilter() { + parent::beforeFilter(); + + if (isset($this->params['slug'])) { + $this->params['named']['slug'] = $this->params['slug']; + } + if (isset($this->params['type'])) { + $this->params['named']['type'] = $this->params['type']; + } + + // CSRF Protection + if (in_array($this->params['action'], array('admin_add', 'admin_edit'))) { + $this->Security->validatePost = false; + } + } + + public function admin_index() { + $this->set('title_for_layout', __('Content', true)); + + $this->Node->recursive = 0; + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->paginate['Node']['conditions'] = array(); + + $types = $this->Node->Taxonomy->Vocabulary->Type->find('all'); + $typeAliases = Set::extract('/Type/alias', $types); + $this->paginate['Node']['conditions']['Node.type'] = $typeAliases; + + if (isset($this->params['named']['filter'])) { + $filters = $this->Croogo->extractFilter(); + foreach ($filters AS $filterKey => $filterValue) { + if (strpos($filterKey, '.') === false) { + $filterKey = 'Node.' . $filterKey; + } + $this->paginate['Node']['conditions'][$filterKey] = $filterValue; + } + $this->set('filters', $filters); + } + + if (isset($this->params['named']['q'])) { + App::import('Core', 'Sanitize'); + $q=Sanitize::clean($this->params['named']['q']); + $this->paginate['Node']['conditions']['OR'] = array( + 'Node.title LIKE' => '%' . $q . '%', + 'Node.excerpt LIKE' => '%' . $q . '%', + 'Node.body LIKE' => '%' . $q . '%', + 'Node.terms LIKE' => '%"' . $q . '"%', + ); + } + + $nodes = $this->paginate('Node'); + $this->set(compact('nodes', 'types', 'typeAliases')); + + if (isset($this->params['named']['links'])) { + $this->layout = 'ajax'; + $this->render('admin_links'); + } + } + + public function admin_create() { + $this->set('title_for_layout', __('Create content', true)); + + $types = $this->Node->Taxonomy->Vocabulary->Type->find('all', array( + 'order' => array( + 'Type.alias' => 'ASC', + ), + )); + $this->set(compact('types')); + } + + public function admin_add($typeAlias = 'node') { + $type = $this->Node->Taxonomy->Vocabulary->Type->findByAlias($typeAlias); + if (!isset($type['Type']['alias'])) { + $this->Session->setFlash(__('Content type does not exist.', true)); + $this->redirect(array('action' => 'create')); + } + + $this->set('title_for_layout', sprintf(__('Create content: %s', true), $type['Type']['title'])); + $this->Node->type = $type['Type']['alias']; + $this->Node->Behaviors->attach('Tree', array( + 'scope' => array( + 'Node.type' => $this->Node->type, + ), + )); + + if (!empty($this->data)) { + // CSRF Protection + if ($this->params['_Token']['key'] != $this->data['Node']['token_key']) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if (isset($this->data['TaxonomyData'])) { + $this->data['Taxonomy'] = array( + 'Taxonomy' => array(), + ); + foreach ($this->data['TaxonomyData'] AS $vocabularyId => $taxonomyIds) { + if (is_array($taxonomyIds)) { + $this->data['Taxonomy']['Taxonomy'] = array_merge($this->data['Taxonomy']['Taxonomy'], $taxonomyIds); + } + } + } + $this->Node->create(); + $this->data['Node']['path'] = $this->Croogo->getRelativePath(array( + 'admin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'type' => $this->Node->type, + 'slug' => $this->data['Node']['slug'], + )); + $this->data['Node']['visibility_roles'] = $this->Node->encodeData($this->data['Role']['Role']); + if ($this->Node->saveWithMeta($this->data)) { + $this->Session->setFlash(sprintf(__('%s has been saved', true), $type['Type']['title']), 'default', array('class' => 'success')); + if (isset($this->params['form']['apply'])) { + $this->redirect(array('action'=>'edit', $this->Node->id)); + } else { + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(sprintf(__('%s could not be saved. Please, try again.', true), $type['Type']['title']), 'default', array('class' => 'error')); + } + } else { + $this->data['Node']['user_id'] = $this->Session->read('Auth.User.id'); + } + + $nodes = $this->Node->generatetreelist(); + $roles = $this->Node->User->Role->find('list'); + $users = $this->Node->User->find('list'); + $vocabularies = Set::combine($type['Vocabulary'], '{n}.id', '{n}'); + $taxonomy = array(); + foreach ($type['Vocabulary'] AS $vocabulary) { + $vocabularyId = $vocabulary['id']; + $taxonomy[$vocabularyId] = $this->Node->Taxonomy->getTree($vocabulary['alias'], array('taxonomyId' => true)); + } + $this->set(compact('typeAlias', 'type', 'nodes', 'roles', 'vocabularies', 'taxonomy', 'users')); + } + + public function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid content', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + + $this->Node->id = $id; + $typeAlias = $this->Node->field('type'); + + $type = $this->Node->Taxonomy->Vocabulary->Type->findByAlias($typeAlias); + if (!isset($type['Type']['alias'])) { + $this->Session->setFlash(__('Content type does not exist.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'create')); + } + + $this->set('title_for_layout', sprintf(__('Edit content: %s', true), $type['Type']['title'])); + $this->Node->type = $type['Type']['alias']; + $this->Node->Behaviors->attach('Tree', array('scope' => array('Node.type' => $this->Node->type))); + + if (!empty($this->data)) { + // CSRF Protection + if ($this->params['_Token']['key'] != $this->data['Node']['token_key']) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if (isset($this->data['TaxonomyData'])) { + $this->data['Taxonomy'] = array( + 'Taxonomy' => array(), + ); + foreach ($this->data['TaxonomyData'] AS $vocabularyId => $taxonomyIds) { + if (is_array($taxonomyIds)) { + $this->data['Taxonomy']['Taxonomy'] = array_merge($this->data['Taxonomy']['Taxonomy'], $taxonomyIds); + } + } + } + $this->data['Node']['path'] = $this->Croogo->getRelativePath(array( + 'admin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'type' => $this->Node->type, + 'slug' => $this->data['Node']['slug'], + )); + $this->data['Node']['visibility_roles'] = $this->Node->encodeData($this->data['Role']['Role']); + if ($this->Node->saveWithMeta($this->data)) { + $this->Session->setFlash(sprintf(__('%s has been saved', true), $type['Type']['title']), 'default', array('class' => 'success')); + if (! isset($this->params['form']['apply'])) { + $this->redirect(array('action'=>'index')); + } + } else { + $this->Session->setFlash(sprintf(__('%s could not be saved. Please, try again.', true), $type['Type']['title']), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $data = $this->Node->read(null, $id); + $data['Role']['Role'] = $this->Node->decodeData($data['Node']['visibility_roles']); + $this->data = $data; + } + + $nodes = $this->Node->generatetreelist(); + $roles = $this->Node->User->Role->find('list'); + $users = $this->Node->User->find('list'); + $vocabularies = Set::combine($type['Vocabulary'], '{n}.id', '{n}'); + $taxonomy = array(); + foreach ($type['Vocabulary'] AS $vocabulary) { + $vocabularyId = $vocabulary['id']; + $taxonomy[$vocabularyId] = $this->Node->Taxonomy->getTree($vocabulary['alias'], array('taxonomyId' => true)); + } + $this->set(compact('typeAlias', 'type', 'nodes', 'roles', 'vocabularies', 'taxonomy', 'users')); + } + + public function admin_update_paths() { + $types = $this->Node->Taxonomy->Vocabulary->Type->find('list', array( + 'fields' => array( + 'Type.id', + 'Type.alias', + ), + )); + $typesAlias = array_values($types); + + $nodes = $this->Node->find('all', array( + 'conditions' => array( + 'Node.type' => $typesAlias, + ), + 'fields' => array( + 'Node.id', + 'Node.slug', + 'Node.type', + 'Node.path', + ), + 'recursive' => '-1', + )); + foreach ($nodes AS $node) { + $node['Node']['path'] = $this->Croogo->getRelativePath(array( + 'admin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'type' => $node['Node']['type'], + 'slug' => $node['Node']['slug'], + )); + $this->Node->id = false; + $this->Node->save($node); + } + + $this->Session->setFlash(__('Paths updated.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Node', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Node->delete($id)) { + $this->Session->setFlash(__('Node deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_delete_meta($id = null) { + $success = false; + if ($id != null && $this->Node->Meta->delete($id)) { + $success = true; + } + + $this->set(compact('success')); + } + + public function admin_add_meta() { + $this->layout = 'ajax'; + } + + public function admin_process() { + $action = $this->data['Node']['action']; + $ids = array(); + foreach ($this->data['Node'] AS $id => $value) { + if ($id != 'action' && $value['id'] == 1) { + $ids[] = $id; + } + } + + if (count($ids) == 0 || $action == null) { + $this->Session->setFlash(__('No items selected.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if ($action == 'delete' && + $this->Node->deleteAll(array('Node.id' => $ids), true, true)) { + $this->Session->setFlash(__('Nodes deleted.', true), 'default', array('class' => 'success')); + } elseif ($action == 'publish' && + $this->Node->updateAll(array('Node.status' => 1), array('Node.id' => $ids))) { + $this->Session->setFlash(__('Nodes published', true), 'default', array('class' => 'success')); + } elseif ($action == 'unpublish' && + $this->Node->updateAll(array('Node.status' => 0), array('Node.id' => $ids))) { + $this->Session->setFlash(__('Nodes unpublished', true), 'default', array('class' => 'success')); + } elseif ($action == 'promote' && + $this->Node->updateAll(array('Node.promote' => 1), array('Node.id' => $ids))) { + $this->Session->setFlash(__('Nodes promoted', true), 'default', array('class' => 'success')); + } elseif ($action == 'unpromote' && + $this->Node->updateAll(array('Node.promote' => 0), array('Node.id' => $ids))) { + $this->Session->setFlash(__('Nodes unpromoted', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function index() { + if (!isset($this->params['named']['type'])) { + $this->params['named']['type'] = 'node'; + } + + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->paginate['Node']['limit'] = Configure::read('Reading.nodes_per_page'); + $this->paginate['Node']['conditions'] = array( + 'Node.status' => 1, + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ); + $this->paginate['Node']['contain'] = array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ); + if (isset($this->params['named']['type'])) { + $type = $this->Node->Taxonomy->Vocabulary->Type->find('first', array( + 'conditions' => array( + 'Type.alias' => $this->params['named']['type'], + ), + 'cache' => array( + 'name' => 'type_'.$this->params['named']['type'], + 'config' => 'nodes_index', + ), + )); + if (!isset($type['Type']['id'])) { + $this->Session->setFlash(__('Invalid content type.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + if (isset($type['Params']['nodes_per_page'])) { + $this->paginate['Node']['limit'] = $type['Params']['nodes_per_page']; + } + $this->paginate['Node']['conditions']['Node.type'] = $type['Type']['alias']; + $this->set('title_for_layout', $type['Type']['title']); + } + + if ($this->usePaginationCache) { + $cacheNamePrefix = 'nodes_index_'.$this->Croogo->roleId.'_'.Configure::read('Config.language'); + if (isset($type)) { + $cacheNamePrefix .= '_'.$type['Type']['alias']; + } + $this->paginate['page'] = isset($this->params['named']['page']) ? $this->params['named']['page'] : 1; + $cacheName = $cacheNamePrefix.'_'.$this->params['named']['type'].'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit']; + $cacheNamePaging = $cacheNamePrefix.'_'.$this->params['named']['type'].'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit'].'_paging'; + $cacheConfig = 'nodes_index'; + $nodes = Cache::read($cacheName, $cacheConfig); + if (!$nodes) { + $nodes = $this->paginate('Node'); + Cache::write($cacheName, $nodes, $cacheConfig); + Cache::write($cacheNamePaging, $this->params['paging'], $cacheConfig); + } else { + $paging = Cache::read($cacheNamePaging, $cacheConfig); + $this->params['paging'] = $paging; + $this->helpers[] = 'Paginator'; + } + } else { + $nodes = $this->paginate('Node'); + } + + $this->set(compact('type', 'nodes')); + $this->__viewFallback(array( + 'index_' . $type['Type']['alias'], + )); + } + + public function term() { + $term = $this->Node->Taxonomy->Term->find('first', array( + 'conditions' => array( + 'Term.slug' => $this->params['named']['slug'], + ), + 'cache' => array( + 'name' => 'term_'.$this->params['named']['slug'], + 'config' => 'nodes_term', + ), + )); + if (!isset($term['Term']['id'])) { + $this->Session->setFlash(__('Invalid Term.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + + if (!isset($this->params['named']['type'])) { + $this->params['named']['type'] = 'node'; + } + + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->paginate['Node']['limit'] = Configure::read('Reading.nodes_per_page'); + $this->paginate['Node']['conditions'] = array( + 'Node.status' => 1, + 'Node.terms LIKE' => '%"' . $this->params['named']['slug'] . '"%', + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ); + $this->paginate['Node']['contain'] = array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ); + if (isset($this->params['named']['type'])) { + $type = $this->Node->Taxonomy->Vocabulary->Type->find('first', array( + 'conditions' => array( + 'Type.alias' => $this->params['named']['type'], + ), + 'cache' => array( + 'name' => 'type_'.$this->params['named']['type'], + 'config' => 'nodes_term', + ), + )); + if (!isset($type['Type']['id'])) { + $this->Session->setFlash(__('Invalid content type.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + if (isset($type['Params']['nodes_per_page'])) { + $this->paginate['Node']['limit'] = $type['Params']['nodes_per_page']; + } + $this->paginate['Node']['conditions']['Node.type'] = $type['Type']['alias']; + $this->set('title_for_layout', $term['Term']['title']); + } + + if ($this->usePaginationCache) { + $cacheNamePrefix = 'nodes_term_'.$this->Croogo->roleId.'_'.$this->params['named']['slug'].'_'.Configure::read('Config.language'); + if (isset($type)) { + $cacheNamePrefix .= '_'.$type['Type']['alias']; + } + $this->paginate['page'] = isset($this->params['named']['page']) ? $this->params['named']['page'] : 1; + $cacheName = $cacheNamePrefix.'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit']; + $cacheNamePaging = $cacheNamePrefix.'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit'].'_paging'; + $cacheConfig = 'nodes_term'; + $nodes = Cache::read($cacheName, $cacheConfig); + if (!$nodes) { + $nodes = $this->paginate('Node'); + Cache::write($cacheName, $nodes, $cacheConfig); + Cache::write($cacheNamePaging, $this->params['paging'], $cacheConfig); + } else { + $paging = Cache::read($cacheNamePaging, $cacheConfig); + $this->params['paging'] = $paging; + $this->helpers[] = 'Paginator'; + } + } else { + $nodes = $this->paginate('Node'); + } + + $this->set(compact('term', 'type', 'nodes')); + $this->__viewFallback(array( + 'term_' . $term['Term']['id'], + 'term_' . $type['Type']['alias'], + )); + } + + public function promoted() { + $this->set('title_for_layout', __('Nodes', true)); + + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->paginate['Node']['limit'] = Configure::read('Reading.nodes_per_page'); + $this->paginate['Node']['conditions'] = array( + 'Node.status' => 1, + 'Node.promote' => 1, + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ); + $this->paginate['Node']['contain'] = array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ); + + if (isset($this->params['named']['type'])) { + $type = $this->Node->Taxonomy->Vocabulary->Type->findByAlias($this->params['named']['type']); + if (!isset($type['Type']['id'])) { + $this->Session->setFlash(__('Invalid content type.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + if (isset($type['Params']['nodes_per_page'])) { + $this->paginate['Node']['limit'] = $type['Params']['nodes_per_page']; + } + $this->paginate['Node']['conditions']['Node.type'] = $type['Type']['alias']; + $this->set('title_for_layout', $type['Type']['title']); + $this->set(compact('type')); + } + + if ($this->usePaginationCache) { + $cacheNamePrefix = 'nodes_promoted_'.$this->Croogo->roleId.'_'.Configure::read('Config.language'); + if (isset($type)) { + $cacheNamePrefix .= '_'.$type['Type']['alias']; + } + $this->paginate['page'] = isset($this->params['named']['page']) ? $this->params['named']['page'] : 1; + $cacheName = $cacheNamePrefix.'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit']; + $cacheNamePaging = $cacheNamePrefix.'_'.$this->paginate['page'].'_'.$this->paginate['Node']['limit'].'_paging'; + $cacheConfig = 'nodes_promoted'; + $nodes = Cache::read($cacheName, $cacheConfig); + if (!$nodes) { + $nodes = $this->paginate('Node'); + Cache::write($cacheName, $nodes, $cacheConfig); + Cache::write($cacheNamePaging, $this->params['paging'], $cacheConfig); + } else { + $paging = Cache::read($cacheNamePaging, $cacheConfig); + $this->params['paging'] = $paging; + $this->helpers[] = 'Paginator'; + } + } else { + $nodes = $this->paginate('Node'); + } + $this->set(compact('nodes')); + } + + public function search($typeAlias = null) { + if (!isset($this->params['named']['q'])) { + $this->redirect('/'); + } + + App::import('Core', 'Sanitize'); + $q = Sanitize::clean($this->params['named']['q']); + $this->paginate['Node']['order'] = 'Node.created DESC'; + $this->paginate['Node']['limit'] = Configure::read('Reading.nodes_per_page'); + $this->paginate['Node']['conditions'] = array( + 'Node.status' => 1, + 'AND' => array( + array( + 'OR' => array( + 'Node.title LIKE' => '%' . $q . '%', + 'Node.excerpt LIKE' => '%' . $q . '%', + 'Node.body LIKE' => '%' . $q . '%', + 'Node.terms LIKE' => '%"' . $q . '"%', + ), + ), + array( + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ), + ), + ); + $this->paginate['Node']['contain'] = array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ); + if ($typeAlias) { + $type = $this->Node->Taxonomy->Vocabulary->Type->findByAlias($typeAlias); + if (!isset($type['Type']['id'])) { + $this->Session->setFlash(__('Invalid content type.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + if (isset($type['Params']['nodes_per_page'])) { + $this->paginate['Node']['limit'] = $type['Params']['nodes_per_page']; + } + $this->paginate['Node']['conditions']['Node.type'] = $typeAlias; + } + + $nodes = $this->paginate('Node'); + $this->set('title_for_layout', sprintf(__('Search Results: %s', true), $q)); + $this->set(compact('q', 'nodes')); + if ($typeAlias) { + $this->__viewFallback(array( + 'search_' . $typeAlias, + )); + } + } + + public function view($id = null) { + if (isset($this->params['named']['slug']) && isset($this->params['named']['type'])) { + $this->Node->type = $this->params['named']['type']; + $type = $this->Node->Taxonomy->Vocabulary->Type->find('first', array( + 'conditions' => array( + 'Type.alias' => $this->Node->type, + ), + 'cache' => array( + 'name' => 'type_'.$this->Node->type, + 'config' => 'nodes_view', + ), + )); + $node = $this->Node->find('first', array( + 'conditions' => array( + 'Node.slug' => $this->params['named']['slug'], + 'Node.type' => $this->params['named']['type'], + 'Node.status' => 1, + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ), + 'contain' => array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ), + 'cache' => array( + 'name' => 'node_'.$this->Croogo->roleId.'_'.$this->params['named']['slug'], + 'config' => 'nodes_view', + ), + )); + } elseif ($id == null) { + $this->Session->setFlash(__('Invalid content', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } else { + $node = $this->Node->find('first', array( + 'conditions' => array( + 'Node.id' => $id, + 'Node.status' => 1, + 'OR' => array( + 'Node.visibility_roles' => '', + 'Node.visibility_roles LIKE' => '%"' . $this->Croogo->roleId . '"%', + ), + ), + 'contain' => array( + 'Meta', + 'Taxonomy' => array( + 'Term', + 'Vocabulary', + ), + 'User', + ), + 'cache' => array( + 'name' => 'node_'.$this->Croogo->roleId.'_'.$id, + 'config' => 'nodes_view', + ), + )); + $this->Node->type = $node['Node']['type']; + $type = $this->Node->Taxonomy->Vocabulary->Type->find('first', array( + 'conditions' => array( + 'Type.alias' => $this->Node->type, + ), + 'cache' => array( + 'name' => 'type_'.$this->Node->type, + 'config' => 'nodes_view', + ), + )); + } + + if (!isset($node['Node']['id'])) { + $this->Session->setFlash(__('Invalid content', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + + if ($node['Node']['comment_count'] > 0) { + $comments = $this->Node->Comment->find('threaded', array( + 'conditions' => array( + 'Comment.node_id' => $node['Node']['id'], + 'Comment.status' => 1, + ), + 'contain' => array( + 'User', + ), + 'cache' => array( + 'name' => 'comment_node_'.$node['Node']['id'], + 'config' => 'nodes_view', + ), + )); + } else { + $comments = array(); + } + + $this->set('title_for_layout', $node['Node']['title']); + $this->set(compact('node', 'type', 'comments')); + $this->__viewFallback(array( + 'view_' . $node['Node']['id'], + 'view_' . $type['Type']['alias'], + )); + } + + private function __viewFallback($views) { + if (is_string($views)) { + $views = array($views); + } + + if ($this->theme) { + foreach ($views AS $view) { + $viewPath = APP.'views'.DS.'themed'.DS.$this->theme.DS.Inflector::underscore($this->name).DS.$view.$this->ext; + if (file_exists($viewPath)) { + return $this->render($view); + } + } + } + } + +} +?> diff --git a/app/controllers/opcaos_controller.php b/app/controllers/opcaos_controller.php new file mode 100644 index 0000000..2583494 --- /dev/null +++ b/app/controllers/opcaos_controller.php @@ -0,0 +1,152 @@ +Opcao->recursive = 0; + $this->set('opcoes', $this->paginate()); + } + + function view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Opcao.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('opcao', $this->Opcao->read(null, $id)); + } + + function add( $id = null ) + { + + if (!empty($this->data)) { + $this->Opcao->create(); + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + + + + /** + * Se informar um ID adiciona-lo no produtos_id + */ + if( isset( $id ) ) + { + $this->data['Opcao']['produtos_id'] = $id; + } + + } + + function edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Opcao->read(null, $id); + } + } + + function delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Opcao->del($id)) { + $this->Session->setFlash(__('Opcao deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + + + function admin_index() { + $this->Opcao->recursive = 0; + $this->set('opcoes', $this->paginate()); + } + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Opcao.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('opcao', $this->Opcao->read(null, $id)); + } + + function admin_add( $id = null ) { + if (!empty($this->data)) { + $this->Opcao->create(); + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array( 'controller' => 'produtos', 'action'=>'index', $id )); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + + + + /** + * Se informar um ID adiciona-lo no produtos_id + */ + if( isset( $id ) ) + { + $this->data['Opcao']['produtos_id'] = $id; + } + } + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Opcao->read(null, $id); + } + + + + /** + * Se informar um ID adiciona-lo no produtos_id + */ + if( isset( $id ) ) + { + $this->data['Opcao']['produtos_id'] = $id; + } + + } + + function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Opcao->del($id)) { + $this->Session->setFlash(__('Opcao deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/opcoes_controller.php b/app/controllers/opcoes_controller.php new file mode 100644 index 0000000..95ce5cf --- /dev/null +++ b/app/controllers/opcoes_controller.php @@ -0,0 +1,147 @@ +Opcao->recursive = 0; + $this->set('opcoes', $this->paginate()); + } + + function view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Opcao.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('opcao', $this->Opcao->read(null, $id)); + } + + function add( $id = null ) + { + + if (!empty($this->data)) { + $this->Opcao->create(); + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + + + $this->redirect( array( 'controller' => 'produtos', 'action' => 'view', $this->data['Opcao']['produtos_id'] ) ); + } + } + + + + /** + * Se informar um ID adiciona-lo no produtos_id + */ + if( isset( $id ) ) + { + $this->data['Opcao']['produtos_id'] = $id; + } + + } + + function edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Opcao->read(null, $id); + } + } + + function delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Opcao->del($id)) { + $this->Session->setFlash(__('Opcao deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + + + function admin_index() { + $this->Opcao->recursive = 0; + $this->set('opcoes', $this->paginate()); + } + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Opcao.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('opcao', $this->Opcao->read(null, $id)); + } + + function admin_add( $id = null ) { + if (!empty($this->data)) { + $this->Opcao->create(); + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array( 'controller' => 'produtos', 'action'=>'index', $id )); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + + + + /** + * Se informar um ID adiciona-lo no produtos_id + */ + if( isset( $id ) ) + { + $this->data['Opcao']['produtos_id'] = $id; + } + } + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Opcao->save($this->data)) { + $this->Session->setFlash(__('The Opcao has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Opcao could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Opcao->find( 'first', array( + 'conditions' => array( 'Opcao.valor' => $id ) + )); + } + } + + function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Opcao', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Opcao->del($id)) { + $this->Session->setFlash(__('Opcao deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/produtos_controller(2).php b/app/controllers/produtos_controller(2).php new file mode 100644 index 0000000..dab2df2 --- /dev/null +++ b/app/controllers/produtos_controller(2).php @@ -0,0 +1,916 @@ +Session->read( 'Auth.User' ); + + $conditions = array(); + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( ( $userData['role_id'] != 1 ) && ( $userData['role_id'] != 1 ) ) + { + + $conditions[] = array( 'Produto.users_id' => 1 ); + } + + + $this->Produto->recursive = 1; + $produtos = $this->Produto->find( 'all', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.flag' => 1, $conditions ) ) ); + + + $this->set(compact('produtos')); + } + + + + + /** + * API Rest permite mostrar o registro do produto informado por ID + * + * @param Integer $id + */ + function view($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + /** + * Localizando o produto do usuário e id informado + */ + //$produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + $produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name'), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() != 0 ) + { + + /** + * Alterna a mensagem de erro para o objeto de produtos + */ + $message = $produto; + $this->set(compact('produto')); + } + + $this->set(compact('produto')); + + //'conditions' => array( 'Produto.flag' => 1, $conditions ) ), + //$produto = $this->Produto->read( array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), $id ); + + $this->set(compact('message')); + } + + + + + + /** + * API Rest permite editar o registro do produto informado por ID + * + * @param Integer $id + */ + function edit($id) + { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + $this->Produto->id = $id; + if ($this->Produto->save($this->data)) { + $message = 'Saved'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + /** + * API Rest permite apagar o registro do produto informado por ID + * + * @param Integer $id + */ + function delete($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + if($this->Produto->delete($id)) { + $message = 'Deleted'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + + + + function frete( $id = null, $strProdutoNome = null ) + { + + + $this->set( 'title_for_layout', "Calcular frete - Cálculo de frete - Cálculo de frete correios - Calculo sedex - Calculo pac" ); + $this->set( 'title_for_content', "Calcular frete" ); + + + + /** + * Corrigindo os URLs antigos da versão WordPress + */ + if( isset( $this->params['url']['id'] ) ) + { + + $id = $this->params['url']['id']; + } + + + + /** + * Corrigindo para fazer o cálculo exemplo + */ + if( $strProdutoNome != 'calculo-de-frete.html' ) + { + + $this->layout = "calculo_frete"; + } + + + + + + + /** + * Buscando o registro + */ + //$objOpcoes = $this->Opcao->find( 'all', array( 'conditions' => array( 'Opcao.produtos_id' => $id ), 'order' => array( 'Opcao.id' => 'ASC' ) ) ); + + + /** + * Verificando se foi encontrado algum registro + */ + //if( $this->Opcao->getNumRows() != 0 ) + if( !empty( $this->data['Produto']['cepdestino'] ) ) + { + + + //print_r( $this->data ); + + /** + * SEDEX + */ + $this->Frete->entrada['nCdServico'] = 40010; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedex', $this->Frete->requisicao() ); + $this->Frete->entrada = null; + + + + /** + * SEDEX A COBRAR + */ + $this->Frete->entrada['nCdServico'] = 40045; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedexacobrar', $this->Frete->requisicao() ); + $this->Frete->entrada = null; + + + + + /** + * PAC + */ + $this->Frete->entrada['nCdServico'] = 41106; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = ( !empty( $this->data['Produto']['peso'] ) )? $this->data['Produto']['peso']: 0; + $this->Frete->entrada['nVlComprimento'] = ( !empty( $this->data['Produto']['comprimento'] ) )? $this->data['Produto']['comprimento']: 0; + $this->Frete->entrada['nVlAltura'] = ( !empty( $this->data['Produto']['altura'] ) )? $this->data['Produto']['altura']: 0; + $this->Frete->entrada['nVlLargura'] = ( !empty( $this->data['Produto']['largura'] ) )? $this->data['Produto']['largura']: 0; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = ( !empty( $this->data['Produto']['largura'] ) )? r( '.', ',', $this->data['Produto']['preco'] ): 0; + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'pac', $this->Frete->requisicao() ); + $this->Frete->entrada = null; + + + }else{ + + + + /** + * Localizando itens do produto + */ + $arrProduto = $this->Opcao->find( 'all', array( 'conditions' => array( 'Opcao.produtos_id' => $id, 'Produto.flag' => 1 ), 'order' => array( 'Opcao.id' => 'ASC' ) ) ); + + + /** + * Conta a quantidade de registros encontrados + */ + $numRows = $this->Opcao->getNumRows(); + + + /** + * Permitindo o bloqueio no frete + */ + $this->set( 'freteAtivo', $numRows ); + + + if( $numRows != 0 ) + { + + $this->data['Produto'] = $arrProduto[0]['Produto']; + + /** + * Aparentemente existe um bug + * sempre que fica no cache nao realiza a consulta das + * opcoes do produto + */ + //print_r( $arrProduto ); + } + + + } + + + + + /** + * Informando valor para o campo quantidade + */ + if( !isset( $this->data['Produto']['quantidade'] ) ) + { + $this->data['Produto']['quantidade'] = 1; + } + + + + + + + + + /** + * Localizando itens do produto + */ + $arrProduto = $this->Opcao->find( 'all', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Opcao.produtos_id' => $id, 'Produto.flag' => 1 ), 'order' => array( 'Opcao.id' => 'ASC' ) ) ); + + + /** + * Conta a quantidade de registros encontrados + */ + $numRows = $this->Opcao->getNumRows(); + + + /** + * Permitindo o bloqueio no frete + */ + $this->set( 'freteAtivo', $numRows ); + //$this->data['Produto'] = $arrProduto[0]['Produto']; + + + + + // botão de retorno ao anuncio + $this->_botao_retorno(); + + } + + + + + /** + * Exibe o botão com link de retorno + * para o produto do anúncio + * + */ + function _botao_retorno() + { + + + /** + * verificando se este usuário veio do Mercado Livre + * se veio vamos adicionar o código de afiliado + */ + $site_alvo = 'produto.mercadolivre.com'; + + + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + if( isset( $_SERVER['HTTP_REFERER'] ) && ( stristr( $_SERVER['HTTP_REFERER'], $site_alvo ) != false ) && ( $sessao_retorno != $_SERVER['HTTP_REFERER'] ) ) + { + + $site_retorno = $_SERVER['HTTP_REFERER']; + /** + * Grava o endereço de retorno na sessão + * caso aconteça o cálculo de frete o usuário + * pode retornar normalmente + */ + $this->Session->write( 'site_retorno', $site_retorno ); + } + + + + /** + * Se o referer possuir um valor (não vazio) + */ + if( isset( $_SERVER['HTTP_REFERER'] ) && ( !empty( $_SERVER['HTTP_REFERER'] ) )) + { + + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + // soluçoes para comercio social + $str_afiliado = "http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5820923&go="; + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + }else{ + + /** + * Redireciona para a página principal do + * Mercado Livre, evitando a página de idiomas + * do ML. + * + * Direcionando para a página de mais vendidos + */ + // soluçoes para comercio social + $str_afiliado = "http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5820923&go=http://lista.mercadolivre.com.br/_DisplayType_G_FilterId_MAS*VND"; + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + } + } + + + + + + function admin_botoes( $intProdutoId = null, $strLink = null ) + { + + $this->set( 'title_for_content', 'Botões de cálculo' ); + + + /** + * Contornando erros com variáveis não declaradas + */ + $this->set( 'intProdutoId', $intProdutoId ); + //$intProdutoId = $intProdutoId; + $this->set( 'strLink', $strLink ); + + + + /** + * Adicionando parametros de cor + */ + $strCor = ( isset( $this->params['named']['cor'] ) )? $this->params['named']['cor']:''; + + + + /** + * Lista os botões existentes + */ + $this->set( 'botoes', $this->Botao->listar( $strCor ) ); + + } + + + + + + + + function admin_index() + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + //print_r( $userData ); + + /** + * Evitando erros com variavel nao definida + */ + $conditions = array(); + + + + /** + * Condição para filtrar itens + */ + if( isset( $this->params['named']['flag'] ) ) + { + + $conditions[] = array( 'Produto.flag' => $this->params['named']['flag'] ); + }else{ + $conditions[] = array( 'Produto.flag' => 1 ); + } + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + + $this->Produto->recursive = 0; + $this->paginate = array( 'conditions' => $conditions ); + $this->set('produtos', $this->paginate()); + } + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Produto.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('produto', $this->Produto->read(null, $id)); + + + $this->set( 'opcoes', $this->Opcao->find( 'all', array( 'conditions' => array( 'Opcao.produtos_id' => $id ) ) ) ); + } + + + + function admin_add() { + + + if (!empty($this->data)) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', $userData['id'] ); + + } + + + + $this->Produto->create(); + + $this->data['Produto']['flag'] = 1; + if ($this->Produto->save($this->data)) { + //$this->Session->setFlash(__('The Produto has been saved', true)); + + + /** + * Aviso + */ + $this->Session->setFlash(__('The Produto has been saved', 'aviso' ) ); + + + /** + * Adicionando opcoes do produto + */ + $opcao['Opcao']['produtos_id'] = $this->Produto->getLastInsertId(); + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'cep'; + $opcao['Opcao']['valor'] = $this->data['Produto']['cep']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'peso'; + $opcao['Opcao']['valor'] = $this->data['Produto']['peso']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'preco'; + $opcao['Opcao']['valor'] = $this->data['Produto']['preco']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'largura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['largura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'altura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['altura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'comprimento'; + $opcao['Opcao']['valor'] = $this->data['Produto']['comprimento']; + $this->Opcao->save( $opcao ); + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + + } else { + $this->Session->setFlash(__('The Produto could not be saved. Please, try again.', true)); + } + } + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', $userData['id'] ); + + } + + + $users = $this->Produto->User->find('list', array( 'fields' => array( 'User.id', 'User.username' ) ) ); + $this->set(compact('users')); + + } + + + + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Produto', true)); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', 'porra' ); + + } + + + + + if ($this->Produto->save($this->data)) { + $this->Session->setFlash(__('The Produto has been saved', true)); + + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->Opcao->deleteAll( array( 'Opcao.produtos_id' => $id ) ); + + $opcao['Opcao']['produtos_id'] = $id; + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'cep'; + $opcao['Opcao']['valor'] = $this->data['Produto']['cep']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'peso'; + $opcao['Opcao']['valor'] = $this->data['Produto']['peso']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'preco'; + $opcao['Opcao']['valor'] = $this->data['Produto']['preco']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'largura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['largura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'altura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['altura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'comprimento'; + $opcao['Opcao']['valor'] = $this->data['Produto']['comprimento']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_local'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_local']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_pac'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_pac']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedex'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedex']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedexacobrar'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedexacobrar']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_maximo'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_maximo']; + $this->Opcao->save( $opcao ); + + + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + + + } else { + $this->Session->setFlash(__('The Produto could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Produto->read(null, $id); + + //$this->data['Opcao'] = $this->Opcao-> + + } + + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', 'porra' ); + + } + + + + $produto_read = $this->Produto->read( null, $id ); + $produto_read['Produto']['peso'] = $produto_read['Opcao'][0]['valor']; + $produto_read['Produto']['preco'] = $produto_read['Opcao'][1]['preco']; + $produto_read['Produto']['cep'] = $produto_read['Opcao'][2]['cep']; + $this->set( 'produtos', $produto_read ); + + $users = $this->Produto->User->find('list', array( 'fields' => array( 'User.id', 'User.username' ) ) ); + + $opcoes = $this->Opcao->find( 'all', array( 'conditions' => array( 'Opcao.produtos_id' => $id ), 'order' => array( 'Opcao.id' => 'ASC' ) ) ); + $this->set(compact('users', 'opcoes')); + } + + function admin_delete($id = null) + { + + + + if (!$id) { + $this->Session->setFlash(__('Invalid id for Produto', true)); + $this->redirect(array('action'=>'index')); + }else{ + + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + + $this->Produto->id = $id; + $this->data['Produto']['flag'] = 0; + if ($this->Produto->save( $this->data ) ) + { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + } + + }else{ + + if ($this->Produto->del($id)) { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/produtos_controller.php b/app/controllers/produtos_controller.php new file mode 100644 index 0000000..e3faa2b --- /dev/null +++ b/app/controllers/produtos_controller.php @@ -0,0 +1,1018 @@ +Session->read( 'Auth.User' ); + + $conditions = array(); + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( ( $userData['role_id'] != 1 ) && ( $userData['role_id'] != 1 ) ) + { + + $conditions[] = array( 'Produto.users_id' => 1 ); + } + + + $this->Produto->recursive = 1; + $produtos = $this->Produto->find( 'all', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.flag' => 1, $conditions ) ) ); + + + $this->set(compact('produtos')); + } + + + + + /** + * API Rest permite mostrar o registro do produto informado por ID + * + * @param Integer $id + */ + function view($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + /** + * Localizando o produto do usuário e id informado + */ + //$produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + $produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name'), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() != 0 ) + { + + /** + * Alterna a mensagem de erro para o objeto de produtos + */ + $message = $produto; + $this->set(compact('produto')); + } + + $this->set(compact('produto')); + + //'conditions' => array( 'Produto.flag' => 1, $conditions ) ), + //$produto = $this->Produto->read( array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), $id ); + + $this->set(compact('message')); + } + + + + + + /** + * API Rest permite editar o registro do produto informado por ID + * + * @param Integer $id + */ + function edit($id) + { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + $this->Produto->id = $id; + if ($this->Produto->save($this->data)) { + $message = 'Saved'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + /** + * API Rest permite apagar o registro do produto informado por ID + * + * @param Integer $id + */ + function delete($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + if($this->Produto->delete($id)) { + $message = 'Deleted'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + + function admin_index() { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + //print_r( $userData ); + + /** + * Evitando erros com variavel nao definida + */ + $conditions = array(); + + + + /** + * Condição para filtrar itens + */ + if( isset( $this->params['named']['flag'] ) ) + { + + $conditions[] = array( 'Produto.flag' => $this->params['named']['flag'] ); + }else{ + $conditions[] = array( 'Produto.flag' => 1 ); + } + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + + $this->Produto->recursive = 0; + $this->paginate = array( 'conditions' => $conditions ); + $this->set('produtos', $this->paginate()); + } + + + + + function admin_view($id = null) + { + $conditions = array(); + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $conditions = array( 'Produto.users_id' => $userData['id'] ); + + } + + + + if (!$id) { + $this->Session->setFlash(__('Invalid produto', true)); + $this->redirect(array('action' => 'index')); + } + //$this->set('produto', $this->Produto->read(null, $id)); + $this->set('produto', $this->Produto->find( 'first', array( + 'conditions' => array( 'Produto.id' => $id, $conditions ) + ))); + } + + + + + + function frete( $id = null, $strProdutoNome = null ) + { + + + $this->set( 'title_for_layout', "Calcular frete - Cálculo de frete - Cálculo de frete correios - Calculo sedex - Calculo pac" ); + $this->set( 'title_for_content', "Calcular frete" ); + + + + // Declarando variaveis + $preco = + $cep = + $peso = + $altura = + $largura = + $comprimento = + $envio_local = + $envio_sedex = + $envio_esedex = + $envio_sedexacobrar = + $envio_pac = + $envio_maximo = + $url_retorno = + $produto_imagem = + null; + + + + + /** + * Corrigindo os URLs antigos da versão WordPress + */ + if( isset( $this->params['url']['id'] ) ) + { + + $id = $this->params['url']['id']; + } + + + + /** + * Corrigindo para fazer o cálculo exemplo + */ + if( $strProdutoNome != 'calculo-de-frete.html' ) + { + + $this->layout = "calculo_frete"; + } + + + + + + /** + * Buscando produto na versão mais recente sem POG + */ + $produto = $this->Produto->read( null, $id ); + + + + /** + * Corrige problemas com opções extras do produto + */ + if( isset( $produto['Opcao'] ) ) + { + + foreach ( $produto['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + /** + * Para usar e-sedex precisa ter contrato com os Correios. + * Só irá aparecer resultado se a o código da empresa e senha + * estiverem corretos e a rota (origem e destino) forem atendidos + * pelo serviço de e-sedex + */ + if( $opcao['chave'] == 'envio_esedex' && !empty( $opcao['valor'] ) ): $envio_esedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_esedex_cCdEmpresa' && !empty( $opcao['valor'] ) ): $envio_esedex_cCdEmpresa = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_esedex_sDsSenha' && !empty( $opcao['valor'] ) ): $envio_esedex_sDsSenha = $opcao['valor']; endif; + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && !empty( $opcao['valor'] ) ): + $produto_imagem_null = "imagem?"; + endif; + + + /** + * URL de retorno do produto + * É opcional e o cliente adiciona se quiser + */ + if( $opcao['chave'] == 'url_retorno' && !empty( $opcao['valor'] ) ): $url_retorno = $opcao['valor']; endif; + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + + + + + + if( isset( $this->data ) && !empty($this->data['Produto']['cepdestino'])) + { + + + + + /** + * Para evitar não mostrar as opções de frete + * quando o produto não foi adicionado com a versão + * nova. + */ + if( empty($envio_local) && empty($envio_sedex) && empty($envio_esedex) && empty($envio_sedexacobrar) && empty($envio_pac) ) + { + $envio_pac = + $envio_sedex = + $envio_esedex = + $envio_sedexacobrar = + 1; + } + + + + + + /** + * Verificando se SEDEX é aceito + */ + if( !empty( $envio_sedex ) ) + { + + + //print_r( $this->data ); + + /** + * SEDEX + */ + $this->Frete->entrada['nCdServico'] = 40010; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedex', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + + + /** + * Verificando se E-SEDEX é aceito + */ + if( !empty( $envio_esedex ) ) + { + + + //print_r( $this->data ); + + /** + * E-SEDEX + */ + $this->Frete->entrada['nCdServico'] = 81019; + $this->Frete->entrada['nCdEmpresa'] = Configure::read( "Ect.cCdEmpresa" ); + $this->Frete->entrada['sDsSenha'] = Configure::read( "Ect.sDsSenha" ); + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'esedex', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + + + /** + * Verificando se SEDEX A COBRAR é aceito + */ + if( !empty( $envio_sedexacobrar ) ) + { + + /** + * SEDEX A COBRAR + */ + $this->Frete->entrada['nCdServico'] = 40045; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedexacobrar', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + + /** + * Verificando se PAC é aceito + */ + if( !empty( $envio_pac ) ) + { + + /** + * PAC + */ + $this->Frete->entrada['nCdServico'] = 41106; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = ( !empty( $this->data['Produto']['peso'] ) )? $this->data['Produto']['peso']: 0; + $this->Frete->entrada['nVlComprimento'] = ( !empty( $this->data['Produto']['comprimento'] ) )? $this->data['Produto']['comprimento']: 0; + $this->Frete->entrada['nVlAltura'] = ( !empty( $this->data['Produto']['altura'] ) )? $this->data['Produto']['altura']: 0; + $this->Frete->entrada['nVlLargura'] = ( !empty( $this->data['Produto']['largura'] ) )? $this->data['Produto']['largura']: 0; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = ( !empty( $this->data['Produto']['largura'] ) )? r( '.', ',', $this->data['Produto']['preco'] ): 0; + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'pac', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + }else{// fim do if $this->data e empty( $this->data['Produto']['cepdestino'] + + + + + $this->data = $produto; + + } + + $this->set( 'produto_imagem', $produto_imagem ); + //$this->data = $produto; + + /** + * Informando valor para o campo quantidade + */ + if( !isset( $this->data['Produto']['quantidade'] ) ) + { + $this->data['Produto']['quantidade'] = 1; + } + + + $this->set( 'freteAtivo', true ); + + // botão de retorno ao anuncio + $this->_botao_retorno( $url_retorno ); + + } + + + /** + * Exibe o botão com link de retorno + * para o produto do anúncio + * + * @param String $url_retorno URL para onde deverá retornar o usuário quando clicar em 'voltar ao produto' + */ + function _botao_retorno( $url_retorno = null) + { + + + /** + * verificando se este usuário veio do Mercado Livre + * se veio vamos adicionar o código de afiliado + */ + $site_alvo = 'produto.mercadolivre.com'; + + + // soluçoes para comercio social + $str_afiliado = "http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5820923&go="; + + + + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + if( isset( $_SERVER['HTTP_REFERER'] ) && ( stristr( $_SERVER['HTTP_REFERER'], $site_alvo ) ) && ( !stristr( $sessao_retorno, $site_alvo ) ) ) + { + + $site_retorno = $this->referer(); + /** + * Grava o endereço de retorno na sessão + * caso aconteça o cálculo de frete o usuário + * pode retornar normalmente + */ + $this->Session->write( 'site_retorno', $site_retorno ); + } + + + + /** + * Se a sessao possuir um valor (não vazio) + * Lê novamente por causa da gravação acima + */ + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + if( isset( $sessao_retorno ) && ( !empty( $sessao_retorno ) ) ) + { + + + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + }else{ + + /** + * Redireciona para a página principal do + * Mercado Livre, evitando a página de idiomas + * do ML. + * + * Direcionando para a página de mais vendidos + */ + // soluçoes para comercio social + $sessao_retorno = "http://lista.mercadolivre.com.br/_DisplayType_G_FilterId_MAS*VND"; + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + } + + + + + + + + + + + + /** + * Pulando tudo para evitar problemas de + * interpretação com os códigos anteriores + */ + if( !empty( $url_retorno ) ) + { + + // Monta a URL de retorno com código de afiliado + $this->set( 'retornar_url', $str_afiliado . $url_retorno ); + } + } + + + + + function admin_botoes( $intProdutoId = null, $strLink = null ) + { + + $this->set( 'title_for_content', 'Botões de cálculo' ); + + + /** + * Contornando erros com variáveis não declaradas + */ + $this->set( 'intProdutoId', $intProdutoId ); + //$intProdutoId = $intProdutoId; + $this->set( 'strLink', $strLink ); + + + + /** + * Adicionando parametros de cor + */ + $strCor = ( isset( $this->params['named']['cor'] ) )? $this->params['named']['cor']:''; + + + + /** + * Lista os botões existentes + */ + $this->set( 'botoes', $this->Botao->listar( $strCor ) ); + + } + + + + + + + function admin_add() { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + + if (!empty($this->data)) { + + + $this->Produto->create(); + + $this->data['Produto']['flag'] = 1; + $this->data['Produto']['preco'] = str_replace( ',', '.', $this->data['Produto']['preco'] ); + if ($this->Produto->save($this->data)) { + //$this->Session->setFlash(__('The Produto has been saved', true)); + + + /** + * Aviso + */ + $this->Session->setFlash(__('The Produto has been saved', 'aviso' ) ); + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->_campos_opcoes( $this->Produto->getLastInsertId() ); + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + } else { + $this->Session->setFlash(__('The produto could not be saved. Please, try again.', true)); + } + } + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', $userData['id'] ); + + } + + + $users = $this->Produto->User->find('list'); + $this->set(compact('users', 'userData')); + } + + + + + + function admin_edit($id = null) + { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid produto', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) + { + + $this->data['Produto']['preco'] = str_replace( ',', '.', $this->data['Produto']['preco'] ); + if ($this->Produto->save($this->data)) { + $this->Session->setFlash(__('The produto has been saved', true)); + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->_campos_opcoes( $id ); + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + + } else { + $this->Session->setFlash(__('The produto could not be saved. Please, try again.', true)); + } + } + + + if (empty($this->data)) { + $this->data = $this->Produto->read(null, $id); + + } + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + //$this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', $userData['id'] ); + + } + + + $users = $this->Produto->User->find('list'); + $this->set(compact('users', 'userData')); + } + + + + + function admin_delete($id = null) { + + if (!$id) { + $this->Session->setFlash(__('Invalid id for Produto', true)); + $this->redirect(array('action'=>'index')); + }else{ + + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + + $this->Produto->id = $id; + $this->data['Produto']['flag'] = 0; + if ($this->Produto->saveField( 'flag', 0 ) ) + { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + }else{ + $this->Session->setFlash( __('Problema ao remover produto', true )); + $this->redirect(array('action'=>'index')); + } + + }else{ + + if ($this->Produto->delete($id)) { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + } + } + + + + + + + /** + * Altera as informações das opções + * + * @param Array $opcao do produto + * @param Integer $id do produto + */ + function _campos_opcoes( $id ) + { + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->Opcao->deleteAll( array( 'Opcao.produtos_id' => $id ) ); + + $opcao['Opcao']['produtos_id'] = $id; + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'cep'; + $opcao['Opcao']['valor'] = $this->data['Produto']['cep']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'peso'; + $opcao['Opcao']['valor'] = $this->data['Produto']['peso']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'preco'; + $opcao['Opcao']['valor'] = $this->data['Produto']['preco']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'largura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['largura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'altura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['altura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'comprimento'; + $opcao['Opcao']['valor'] = $this->data['Produto']['comprimento']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_local'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_local']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_pac'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_pac']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedex'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedex']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_esedex'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_esedex']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedexacobrar'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedexacobrar']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_maximo'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_maximo']; + $this->Opcao->save( $opcao ); + + /** + * URL de retorno ao produto + */ + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'url_retorno'; + $opcao['Opcao']['valor'] = $this->data['Produto']['url_retorno']; + $this->Opcao->save( $opcao ); + + } + + +} +?> \ No newline at end of file diff --git a/app/controllers/produtos_controller2.php b/app/controllers/produtos_controller2.php new file mode 100644 index 0000000..b7a68f8 --- /dev/null +++ b/app/controllers/produtos_controller2.php @@ -0,0 +1,917 @@ +Session->read( 'Auth.User' ); + + $conditions = array(); + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( ( $userData['role_id'] != 1 ) && ( $userData['role_id'] != 1 ) ) + { + + $conditions[] = array( 'Produto.users_id' => 1 ); + } + + + $this->Produto->recursive = 1; + $produtos = $this->Produto->find( 'all', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.flag' => 1, $conditions ) ) ); + + + $this->set(compact('produtos')); + } + + + + + /** + * API Rest permite mostrar o registro do produto informado por ID + * + * @param Integer $id + */ + function view($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + /** + * Localizando o produto do usuário e id informado + */ + //$produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + $produto = $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name'), 'conditions' => array( 'Produto.id' => $id, $conditions ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() != 0 ) + { + + /** + * Alterna a mensagem de erro para o objeto de produtos + */ + $message = $produto; + $this->set(compact('produto')); + } + + $this->set(compact('produto')); + + //'conditions' => array( 'Produto.flag' => 1, $conditions ) ), + //$produto = $this->Produto->read( array( 'Produto.id', 'Produto.nome', 'Produto.created', 'User.id', 'User.username', 'User.name' ), $id ); + + $this->set(compact('message')); + } + + + + + + /** + * API Rest permite editar o registro do produto informado por ID + * + * @param Integer $id + */ + function edit($id) + { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + $this->Produto->id = $id; + if ($this->Produto->save($this->data)) { + $message = 'Saved'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + /** + * API Rest permite apagar o registro do produto informado por ID + * + * @param Integer $id + */ + function delete($id) + { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + $conditions = array(); + $message = "Usuário não habilitado"; + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + /** + * Localizando o produto do usuário e id informado + */ + $this->Produto->find( 'first', array( 'fields' => array( 'Produto.id' ), 'conditions' => array( 'Produto.users_id' => $userData['id'], 'Produto.id' => $id ) ) ); + + + /** + * Se for encontrado registro + */ + if( $this->Produto->getNumRows() == 1 ) + { + + if($this->Produto->delete($id)) { + $message = 'Deleted'; + } else { + $message = 'Error'; + } + } + } + + + $this->set(compact("message")); + } + + + + + + + function admin_index() { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + //print_r( $userData ); + + /** + * Evitando erros com variavel nao definida + */ + $conditions = array(); + + + + /** + * Condição para filtrar itens + */ + if( isset( $this->params['named']['flag'] ) ) + { + + $conditions[] = array( 'Produto.flag' => $this->params['named']['flag'] ); + }else{ + $conditions[] = array( 'Produto.flag' => 1 ); + } + + + + /** + * Condição para permitir o admin visualizar todos os registros + */ + if( $userData['role_id'] != 1 ) + { + + $conditions[] = array( 'Produto.users_id' => $userData['id'] ); + } + + + + + + $this->Produto->recursive = 0; + $this->paginate = array( 'conditions' => $conditions ); + $this->set('produtos', $this->paginate()); + } + + + + + function admin_view($id = null) + { + $conditions = array(); + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $conditions = array( 'Produto.users_id' => $userData['id'] ); + + } + + + + if (!$id) { + $this->Session->setFlash(__('Invalid produto', true)); + $this->redirect(array('action' => 'index')); + } + //$this->set('produto', $this->Produto->read(null, $id)); + $this->set('produto', $this->Produto->find( 'first', array( + 'conditions' => array( 'Produto.id' => $id, $conditions ) + ))); + } + + + + + + function frete( $id = null, $strProdutoNome = null ) + { + + + $this->set( 'title_for_layout', "Calcular frete - Cálculo de frete - Cálculo de frete correios - Calculo sedex - Calculo pac" ); + $this->set( 'title_for_content', "Calcular frete" ); + + + + // Declarando variaveis + $preco = + $cep = + $peso = + $altura = + $largura = + $comprimento = + $envio_local = + $envio_sedex = + $envio_sedexacobrar = + $envio_pac = + $envio_maximo = + $produto_imagem = + null; + + + + + /** + * Corrigindo os URLs antigos da versão WordPress + */ + if( isset( $this->params['url']['id'] ) ) + { + + $id = $this->params['url']['id']; + } + + + + /** + * Corrigindo para fazer o cálculo exemplo + */ + if( $strProdutoNome != 'calculo-de-frete.html' ) + { + + $this->layout = "calculo_frete"; + } + + + + + + /** + * Buscando produto na versão mais recente sem POG + */ + $produto = $this->Produto->read( null, $id ); + + + + /** + * Corrige problemas com opções extras do produto + */ + if( isset( $produto['Opcao'] ) ) + { + + foreach ( $produto['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && empty( $opcao['valor'] ) ): $produto_imagem_null = "imagem?"; endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + + + + + + if( isset( $this->data ) && !empty($this->data['Produto']['cepdestino'])) + { + + + + + /** + * Para evitar não mostrar as opções de frete + * quando o produto não foi adicionado com a versão + * nova. + */ + if( empty($envio_local) && empty($envio_sedex) && empty($envio_sedexacobrar) && empty($envio_pac) ) + { + $envio_pac = + $envio_sedex = + $envio_sedexacobrar = + 1; + } + + + + + + /** + * Verificando se SEDEX é aceito + */ + if( !empty( $envio_sedex ) ) + { + + + //print_r( $this->data ); + + /** + * SEDEX + */ + $this->Frete->entrada['nCdServico'] = 40010; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedex', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + + + /** + * Verificando se SEDEX A COBRAR é aceito + */ + if( !empty( $envio_sedexacobrar ) ) + { + + /** + * SEDEX A COBRAR + */ + $this->Frete->entrada['nCdServico'] = 40045; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = $this->data['Produto']['peso']; + $this->Frete->entrada['nVlComprimento'] = $this->data['Produto']['comprimento']; + $this->Frete->entrada['nVlAltura'] = $this->data['Produto']['altura']; + $this->Frete->entrada['nVlLargura'] = $this->data['Produto']['largura']; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = r( '.', ',', $this->data['Produto']['preco'] ); + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'sedexacobrar', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + + /** + * Verificando se PAC é aceito + */ + if( !empty( $envio_pac ) ) + { + + /** + * PAC + */ + $this->Frete->entrada['nCdServico'] = 41106; + $this->Frete->entrada['sCepOrigem'] = $this->data['Produto']['cep']; + $this->Frete->entrada['sCepDestino'] = $this->data['Produto']['cepdestino']; + $this->Frete->entrada['nVlPeso'] = ( !empty( $this->data['Produto']['peso'] ) )? $this->data['Produto']['peso']: 0; + $this->Frete->entrada['nVlComprimento'] = ( !empty( $this->data['Produto']['comprimento'] ) )? $this->data['Produto']['comprimento']: 0; + $this->Frete->entrada['nVlAltura'] = ( !empty( $this->data['Produto']['altura'] ) )? $this->data['Produto']['altura']: 0; + $this->Frete->entrada['nVlLargura'] = ( !empty( $this->data['Produto']['largura'] ) )? $this->data['Produto']['largura']: 0; + $this->Frete->entrada['nCdFormato'] = 1; + $this->Frete->entrada['nVlValorDeclarado'] = ( !empty( $this->data['Produto']['largura'] ) )? r( '.', ',', $this->data['Produto']['preco'] ): 0; + $this->Frete->entrada['quantidade'] = $this->data['Produto']['quantidade']; + + + $this->set( 'pac', $this->Frete->requisicao( $envio_maximo ) ); + $this->Frete->entrada = null; + } + + + }else{// fim do if $this->data e empty( $this->data['Produto']['cepdestino'] + + + + + $this->data = $produto; + + } + + /** + * Informando valor para o campo quantidade + */ + if( !isset( $this->data['Produto']['quantidade'] ) ) + { + $this->data['Produto']['quantidade'] = 1; + } + + + $this->set( 'freteAtivo', true ); + + // botão de retorno ao anuncio + $this->_botao_retorno(); + + } + + + + /** + * Exibe o botão com link de retorno + * para o produto do anúncio + * + */ + function _botao_retorno() + { + + + /** + * verificando se este usuário veio do Mercado Livre + * se veio vamos adicionar o código de afiliado + */ + $site_alvo = 'produto.mercadolivre.com'; + + + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + if( isset( $_SERVER['HTTP_REFERER'] ) && ( stristr( $_SERVER['HTTP_REFERER'], $site_alvo ) ) && ( !stristr( $sessao_retorno, $site_alvo ) ) ) + { + + $site_retorno = $_SERVER['HTTP_REFERER']; + /** + * Grava o endereço de retorno na sessão + * caso aconteça o cálculo de frete o usuário + * pode retornar normalmente + */ + $this->Session->write( 'site_retorno', $site_retorno ); + } + + + + /** + * Se a sessao possuir um valor (não vazio) + * Lê novamente por causa da gravação acima + */ + $sessao_retorno = $this->Session->read( 'site_retorno' ); + + if( isset( $sessao_retorno ) && ( !empty( $$sessao_retorno ) ) ) + { + + + + // soluçoes para comercio social + $str_afiliado = "http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5820923&go="; + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + }else{ + + /** + * Redireciona para a página principal do + * Mercado Livre, evitando a página de idiomas + * do ML. + * + * Direcionando para a página de mais vendidos + */ + // soluçoes para comercio social + $str_afiliado = "http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=5820923&go=http://lista.mercadolivre.com.br/_DisplayType_G_FilterId_MAS*VND"; + $this->set( 'retornar_url', $str_afiliado . $sessao_retorno ); + } + } + + + + + + function admin_botoes( $intProdutoId = null, $strLink = null ) + { + + $this->set( 'title_for_content', 'Botões de cálculo' ); + + + /** + * Contornando erros com variáveis não declaradas + */ + $this->set( 'intProdutoId', $intProdutoId ); + //$intProdutoId = $intProdutoId; + $this->set( 'strLink', $strLink ); + + + + /** + * Adicionando parametros de cor + */ + $strCor = ( isset( $this->params['named']['cor'] ) )? $this->params['named']['cor']:''; + + + + /** + * Lista os botões existentes + */ + $this->set( 'botoes', $this->Botao->listar( $strCor ) ); + + } + + + + + + + function admin_add() { + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + + if (!empty($this->data)) { + + + + + $this->Produto->create(); + + $this->data['Produto']['flag'] = 1; + if ($this->Produto->save($this->data)) { + //$this->Session->setFlash(__('The Produto has been saved', true)); + + + /** + * Aviso + */ + $this->Session->setFlash(__('The Produto has been saved', 'aviso' ) ); + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->_campos_opcoes( $this->Produto->getLastInsertId() ); + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + } else { + $this->Session->setFlash(__('The produto could not be saved. Please, try again.', true)); + } + } + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', $userData['id'] ); + + } + + + $users = $this->Produto->User->find('list'); + $this->set(compact('users')); + } + + + + + + function admin_edit($id = null) + { + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + $this->data['Produto']['users_id'] = $userData['id']; + + /** + * Informa para a view o ID do usuário + */ + $this->set( 'badeco', 'porra' ); + + } + + + + + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid produto', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->Produto->save($this->data)) { + $this->Session->setFlash(__('The produto has been saved', true)); + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->_campos_opcoes( $id ); + + + + /** + * O flag 2 é virtual + * sempre que existente será exibida a mensagem para novos produtos + */ + $this->redirect(array('action'=>'index', 'flag:2' ) ); + + } else { + $this->Session->setFlash(__('The produto could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Produto->read(null, $id); + + } + $users = $this->Produto->User->find('list'); + $this->set(compact('users')); + } + + + + + function admin_delete($id = null) { + + if (!$id) { + $this->Session->setFlash(__('Invalid id for Produto', true)); + $this->redirect(array('action'=>'index')); + }else{ + + + + + /** + * Usuário com permissão de acesso restrito? + */ + $userData = $this->Session->read( 'Auth.User' ); + + + /** + * Quando não for administrador, informar o ID + */ + if( $userData['role_id'] != 1 ) + { + + $this->Produto->id = $id; + $this->data['Produto']['flag'] = 0; + if ($this->Produto->saveField( 'flag', 0 ) ) + { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + } + + }else{ + + if ($this->Produto->delete($id)) { + $this->Session->setFlash(__('Produto deleted', true)); + $this->redirect(array('action'=>'index')); + } + } + } + } + + + + + + + /** + * Altera as informações das opções + * + * @param Array $opcao do produto + * @param Integer $id do produto + */ + function _campos_opcoes( $id ) + { + + + /** + * Adicionando opcoes do produto + * Remove os antigos e adiciona os novos + */ + $this->Opcao->deleteAll( array( 'Opcao.produtos_id' => $id ) ); + + $opcao['Opcao']['produtos_id'] = $id; + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'cep'; + $opcao['Opcao']['valor'] = $this->data['Produto']['cep']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'peso'; + $opcao['Opcao']['valor'] = $this->data['Produto']['peso']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'preco'; + $opcao['Opcao']['valor'] = $this->data['Produto']['preco']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'largura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['largura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'altura'; + $opcao['Opcao']['valor'] = $this->data['Produto']['altura']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'comprimento'; + $opcao['Opcao']['valor'] = $this->data['Produto']['comprimento']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_local'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_local']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_pac'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_pac']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedex'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedex']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_sedexacobrar'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_sedexacobrar']; + $this->Opcao->save( $opcao ); + + + $this->Opcao->id = null; + $opcao['Opcao']['chave'] = 'envio_maximo'; + $opcao['Opcao']['valor'] = $this->data['Produto']['envio_maximo']; + $this->Opcao->save( $opcao ); + + } + + +} +?> \ No newline at end of file diff --git a/app/controllers/regions_controller.php b/app/controllers/regions_controller.php new file mode 100644 index 0000000..c35c926 --- /dev/null +++ b/app/controllers/regions_controller.php @@ -0,0 +1,88 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class RegionsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Regions'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Region'); + + public function admin_index() { + $this->set('title_for_layout', __('Region', true)); + + $this->Region->recursive = 0; + $this->paginate['Region']['order'] = 'Region.title ASC'; + $this->set('regions', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Region', true)); + + if (!empty($this->data)) { + $this->Region->create(); + if ($this->Region->save($this->data)) { + $this->Session->setFlash(__('The Region has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Region could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Region', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Region', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Region->save($this->data)) { + $this->Session->setFlash(__('The Region has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Region could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Region->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Region', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Region->delete($id)) { + $this->Session->setFlash(__('Region deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/roles_controller.php b/app/controllers/roles_controller.php new file mode 100644 index 0000000..9c7148d --- /dev/null +++ b/app/controllers/roles_controller.php @@ -0,0 +1,88 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class RolesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Roles'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Role'); + + public function admin_index() { + $this->set('title_for_layout', __('Roles', true)); + + $this->Role->recursive = 0; + $this->paginate['Role']['order'] = "Role.id ASC"; + $this->set('roles', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Role', true)); + + if (!empty($this->data)) { + $this->Role->create(); + if ($this->Role->save($this->data)) { + $this->Session->setFlash(__('The Role has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Role could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Role', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Role', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Role->save($this->data)) { + $this->Session->setFlash(__('The Role has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Role could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Role->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Role', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Role->delete($id)) { + $this->Session->setFlash(__('Role deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/controllers/settings_controller.php b/app/controllers/settings_controller.php new file mode 100644 index 0000000..9b3b27d --- /dev/null +++ b/app/controllers/settings_controller.php @@ -0,0 +1,154 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class SettingsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Settings'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting'); +/** + * Helpers used by the Controller + * + * @var array + * @access public + */ + public $helpers = array('Html', 'Form'); + + public function admin_dashboard() { + $this->set('title_for_layout', __('Dashboard', true)); + } + + public function admin_index() { + $this->set('title_for_layout', __('Settings', true)); + + $this->Setting->recursive = 0; + $this->paginate['Setting']['order'] = "Setting.weight ASC"; + if (isset($this->params['named']['p'])) { + $this->paginate['Setting']['conditions'] = "Setting.key LIKE '". $this->params['named']['p'] ."%'"; + } + $this->set('settings', $this->paginate()); + } + + public function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Setting.', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + $this->set('setting', $this->Setting->read(null, $id)); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Setting', true)); + + if (!empty($this->data)) { + $this->Setting->create(); + if ($this->Setting->save($this->data)) { + $this->Session->setFlash(__('The Setting has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Setting could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Setting', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Setting', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Setting->save($this->data)) { + $this->Session->setFlash(__('The Setting has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Setting could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Setting->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Setting', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Setting->delete($id)) { + $this->Session->setFlash(__('Setting deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_prefix($prefix = null) { + $this->set('title_for_layout', sprintf(__('Settings: %s', true), $prefix)); + + if(!empty($this->data) && $this->Setting->saveAll($this->data['Setting'])) { + $this->Session->setFlash(__("Settings updated successfully", true), 'default', array('class' => 'success')); + } + + $settings = $this->Setting->find('all', array( + 'order' => 'Setting.weight ASC', + 'conditions' => array( + 'Setting.key LIKE' => $prefix . '.%', + 'Setting.editable' => 1, + ), + )); + //'conditions' => "Setting.key LIKE '".$prefix."%'")); + $this->set(compact('settings')); + + if( count($settings) == 0 ) { + $this->Session->setFlash(__("Invalid Setting key", true), 'default', array('class' => 'error')); + } + + $this->set("prefix", $prefix); + } + + public function admin_moveup($id, $step = 1) { + if( $this->Setting->moveup($id, $step) ) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('admin' => true, 'controller' => 'settings', 'action' => 'index')); + } + + public function admin_movedown($id, $step = 1) { + if( $this->Setting->movedown($id, $step) ) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('admin' => true, 'controller' => 'settings', 'action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/terms_controller.php b/app/controllers/terms_controller.php new file mode 100644 index 0000000..27f6b2c --- /dev/null +++ b/app/controllers/terms_controller.php @@ -0,0 +1,328 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class TermsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Terms'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Term'); + + public function beforeFilter() { + parent::beforeFilter(); + $this->vocabularyId = null; + if (isset($this->params['named']['vocabulary'])) { + $this->vocabularyId = $this->params['named']['vocabulary']; + } + $this->set('vocabulary', $this->vocabularyId); + } + + public function admin_index($vocabularyId = null) { + if (!$vocabularyId) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $vocabulary = $this->Term->Vocabulary->findById($vocabularyId); + if (!isset($vocabulary['Vocabulary']['id'])) { + $this->Session->setFlash(__('Invalid Vocabulary ID.', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $this->set('title_for_layout', sprintf(__('Vocabulary: %s', true), $vocabulary['Vocabulary']['title'])); + + $termsTree = $this->Term->Taxonomy->getTree($vocabulary['Vocabulary']['alias'], array( + 'key' => 'id', + 'value' => 'title', + )); + $terms = $this->Term->find('all', array( + 'conditions' => array( + 'Term.id' => array_keys($termsTree), + ), + )); + $terms = Set::combine($terms, '{n}.Term.id', '{n}.Term'); + $this->set(compact('termsTree', 'vocabulary', 'terms')); + } + + public function admin_add($vocabularyId = null) { + if (!$vocabularyId) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $vocabulary = $this->Term->Vocabulary->find('first', array( + 'conditions' => array( + 'Vocabulary.id' => $vocabularyId, + ), + )); + if (!isset($vocabulary['Vocabulary']['id'])) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $this->set('title_for_layout', sprintf(__('%s: Add Term', true), $vocabulary['Vocabulary']['title'])); + + if (!empty($this->data)) { + $termId = $this->Term->saveAndGetId($this->data['Term']); + if ($termId) { + $termInVocabulary = $this->Term->Taxonomy->hasAny(array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + 'Taxonomy.term_id' => $termId, + )); + if ($termInVocabulary) { + $this->Session->setFlash(__('Term with same slug already exists in the vocabulary.', true), 'default', array('class' => 'error')); + } else { + $this->Term->Taxonomy->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + $taxonomy = array( + 'parent_id' => $this->data['Taxonomy']['parent_id'], + 'term_id' => $termId, + 'vocabulary_id' => $vocabularyId, + ); + if ($this->Term->Taxonomy->save($taxonomy)) { + $this->Session->setFlash(__('Term saved successfuly.', true), 'default', array('class' => 'success')); + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } else { + $this->Session->setFlash(__('Term could not be added to the vocabulary. Please try again.', true), 'default', array('class' => 'error')); + } + } + } else { + $this->Session->setFlash(__('Term could not be saved. Please try again.', true), 'default', array('class' => 'error')); + } + } + $parentTree = $this->Term->Taxonomy->getTree($vocabulary['Vocabulary']['alias'], array('taxonomyId' => true)); + $this->set(compact('vocabulary', 'parentTree', 'vocabularyId')); + } + + public function admin_edit($id = null, $vocabularyId = null) { + if (!$vocabularyId) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $vocabulary = $this->Term->Vocabulary->find('first', array( + 'conditions' => array( + 'Vocabulary.id' => $vocabularyId, + ), + )); + if (!isset($vocabulary['Vocabulary']['id'])) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $term = $this->Term->find('first', array( + 'conditions' => array( + 'Term.id' => $id, + ), + )); + if (!isset($term['Term']['id'])) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $taxonomy = $this->Term->Taxonomy->find('first', array( + 'conditions' => array( + 'Taxonomy.term_id' => $id, + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + if (!isset($taxonomy['Taxonomy']['id'])) { + $this->redirect(array( + 'controller' => 'vocabularies', + 'action' => 'index', + )); + } + $this->set('title_for_layout', sprintf(__('%s: Edit Term', true), $vocabulary['Vocabulary']['title'])); + + if (!empty($this->data)) { + if ($term['Term']['slug'] != $this->data['Term']['slug']) { + if ($this->Term->hasAny(array('Term.slug' => $this->data['Term']['slug']))) { + $termId = false; + } else { + $termId = $this->Term->saveAndGetId($this->data['Term']); + } + } else { + $this->Term->id = $term['Term']['id']; + if (!$this->Term->save($this->data['Term'])) { + $termId = false; + } else { + $termId = $term['Term']['id']; + } + } + + if ($termId) { + $termInVocabulary = $this->Term->Taxonomy->hasAny(array( + 'Taxonomy.id !=' => $taxonomy['Taxonomy']['id'], + 'Taxonomy.vocabulary_id' => $vocabularyId, + 'Taxonomy.term_id' => $termId, + )); + if ($termInVocabulary) { + $this->Session->setFlash(__('Term with same slug already exists in the vocabulary.', true), 'default', array('class' => 'error')); + } else { + $this->Term->Taxonomy->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + $taxonomy = array( + 'id' => $taxonomy['Taxonomy']['id'], + 'parent_id' => $this->data['Taxonomy']['parent_id'], + 'term_id' => $termId, + 'vocabulary_id' => $vocabularyId, + ); + if ($this->Term->Taxonomy->save($taxonomy)) { + $this->Session->setFlash(__('Term saved successfuly.', true), 'default', array('class' => 'success')); + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } else { + $this->Session->setFlash(__('Term could not be added to the vocabulary. Please try again.', true), 'default', array('class' => 'error')); + } + } + } else { + $this->Session->setFlash(__('Term could not be saved. Please try again.', true), 'default', array('class' => 'error')); + } + } else { + $this->data['Taxonomy'] = $taxonomy['Taxonomy']; + $this->data['Term'] = $term['Term']; + } + $parentTree = $this->Term->Taxonomy->getTree($vocabulary['Vocabulary']['alias'], array('taxonomyId' => true)); + $this->set(compact('vocabulary', 'parentTree', 'term', 'taxonomy', 'vocabularyId')); + } + + public function admin_delete($id = null, $vocabularyId = null) { + if (!$id || !$vocabularyId) { + $this->Session->setFlash(__('Invalid id for Term', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'action'=>'index', + $vocabularyId, + )); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + $taxonomyId = $this->Term->Taxonomy->termInVocabulary($id, $vocabularyId); + if (!$taxonomyId) { + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + $this->Term->Taxonomy->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + if ($this->Term->Taxonomy->delete($taxonomyId)) { + $this->Session->setFlash(__('Term deleted', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Term could not be deleted. Please, try again.', true), 'default', array('class' => 'error')); + } + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + + public function admin_moveup($id = null, $vocabularyId = null, $step = 1) { + if (!$id || !$vocabularyId) { + $this->Session->setFlash(__('Invalid id for Term', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'action'=>'index', + $vocabularyId, + )); + } + $taxonomyId = $this->Term->Taxonomy->termInVocabulary($id, $vocabularyId); + if (!$taxonomyId) { + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + $this->Term->Taxonomy->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + if( $this->Term->Taxonomy->moveup($taxonomyId, $step) ) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + + public function admin_movedown($id = null, $vocabularyId = null, $step = 1) { + if (!$id || !$vocabularyId) { + $this->Session->setFlash(__('Invalid id for Term', true), 'default', array('class' => 'error')); + $this->redirect(array( + 'action'=>'index', + $vocabularyId, + )); + } + $taxonomyId = $this->Term->Taxonomy->termInVocabulary($id, $vocabularyId); + if (!$taxonomyId) { + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + $this->Term->Taxonomy->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + + if( $this->Term->Taxonomy->movedown($taxonomyId, $step) ) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + + $this->redirect(array( + 'action' => 'index', + $vocabularyId, + )); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/types_controller.php b/app/controllers/types_controller.php new file mode 100644 index 0000000..7edbb6f --- /dev/null +++ b/app/controllers/types_controller.php @@ -0,0 +1,100 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class TypesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Types'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Type'); + + public function beforeFilter() { + parent::beforeFilter(); + if ($this->action == 'admin_edit') { + $this->Security->disabledFields = array('alias'); + } + } + + public function admin_index() { + $this->set('title_for_layout', __('Type', true)); + + $this->Type->recursive = 0; + $this->paginate['Type']['order'] = 'Type.title ASC'; + $this->set('types', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Type', true)); + + if (!empty($this->data)) { + $this->Type->create(); + if ($this->Type->save($this->data)) { + $this->Session->setFlash(__('The Type has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Type could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + + $vocabularies = $this->Type->Vocabulary->find('list'); + $this->set(compact('vocabularies')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Type', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Type', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Type->save($this->data)) { + $this->Session->setFlash(__('The Type has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Type could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Type->read(null, $id); + } + + $vocabularies = $this->Type->Vocabulary->find('list'); + $this->set(compact('vocabularies')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Type', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Type->delete($id)) { + $this->Session->setFlash(__('Type deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } +} +?> \ No newline at end of file diff --git a/app/controllers/urls_controller.php b/app/controllers/urls_controller.php new file mode 100644 index 0000000..c93f910 --- /dev/null +++ b/app/controllers/urls_controller.php @@ -0,0 +1,62 @@ +set( 'fretes', $this->Frete->read( array( + 'conditions' => array( + 'nVlPeso' => 1, + 'nCdServico' => 40010, + 'sCepOrigem' => 78300000, + 'sCepDestino' => 75860000, + + ) + ) ) ); + + + } + + + + function index() + { + + $this->set( 'fretes', $this->redirect( array( 'action' => 'url' ) ) ); + } + + + + + function url() + { + + $id = $this->params["url"]["id"]; + + + $this->redirect( array( 'controller' => 'produtos', 'action' => 'frete', $this->params["url"]["id"] ), 301, true); + } + + + + + /** + * redirecionar imagens de botoes da estrutura WordPress + * + */ + function botoes( $str = null ) + { + + $this->redirect( array( 'controller' => 'img', 'action' => 'botoes', $str ) ); + } + +} + +?> \ No newline at end of file diff --git a/app/controllers/users_controller.php b/app/controllers/users_controller.php new file mode 100644 index 0000000..d255577 --- /dev/null +++ b/app/controllers/users_controller.php @@ -0,0 +1,301 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class UsersController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Users'; +/** + * Components + * + * @var array + * @access public + */ + public $components = array( + 'Email', + ); +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('User'); + + public function beforeFilter() { + parent::beforeFilter(); + + if (in_array($this->params['action'], array('admin_login', 'login'))) { + $field = $this->Auth->fields['username']; + if (!empty($this->data) && empty($this->data['User'][$field])) { + $this->redirect(array('action' => $this->params['action'])); + } + $cacheName = 'auth_failed_' . $this->data['User'][$field]; + if (Cache::read($cacheName, 'users_login') >= Configure::read('User.failed_login_limit')) { + $this->Session->setFlash(__('You have reached maximum limit for failed login attempts. Please try again after a few minutes.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => $this->params['action'])); + } + } + } + + public function beforeRender() { + parent::beforeRender(); + + if (in_array($this->params['action'], array('admin_login', 'login'))) { + if (!empty($this->data)) { + $field = $this->Auth->fields['username']; + $cacheName = 'auth_failed_' . $this->data['User'][$field]; + $cacheValue = Cache::read($cacheName, 'users_login'); + Cache::write($cacheName, (int)$cacheValue + 1, 'users_login'); + } + } + } + + public function admin_index() { + $this->set('title_for_layout', __('Users', true)); + + $this->User->recursive = 0; + $this->set('users', $this->paginate()); + } + + public function admin_add() { + if (!empty($this->data)) { + $this->User->create(); + $this->data['User']['activation_key'] = md5(uniqid()); + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('The User has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + unset($this->data['User']['password']); + } + } else { + $this->data['User']['role_id'] = 2; // default Role: Registered + } + $roles = $this->User->Role->find('list'); + $this->set(compact('roles')); + } + + public function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('The User has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->User->read(null, $id); + } + $roles = $this->User->Role->find('list'); + $this->set(compact('roles')); + } + + public function admin_reset_password($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + $user = $this->User->findById($id); + if ($user['User']['password'] == Security::hash($this->data['User']['current_password'], null, true)) { + if ($this->User->save($this->data)) { + $this->Session->setFlash(__('Password has been reset.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('Password could not be reset. Please, try again.', true), 'default', array('class' => 'error')); + } + } else { + $this->Session->setFlash(__('Current password did not match. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->User->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for User', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->User->delete($id)) { + $this->Session->setFlash(__('User deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + + public function admin_login() { + $this->set('title_for_layout', __('Admin Login', true)); + $this->layout = "admin_login"; + } + + public function admin_logout() { + $this->Session->setFlash(__('Log out successful.', true), 'default', array('class' => 'success')); + $this->redirect($this->Auth->logout()); + } + + public function index() { + $this->set('title_for_layout', __('Users', true)); + } + + public function add() { + $this->set('title_for_layout', __('Register', true)); + if (!empty($this->data)) { + $this->User->create(); + $this->data['User']['role_id'] = 2; // Registered + $this->data['User']['activation_key'] = md5(uniqid()); + $this->data['User']['status'] = 0; + $this->data['User']['username'] = htmlspecialchars($this->data['User']['username']); + $this->data['User']['website'] = htmlspecialchars($this->data['User']['website']); + $this->data['User']['name'] = htmlspecialchars($this->data['User']['name']); + if ($this->User->save($this->data)) { + $this->data['User']['password'] = null; + $this->Email->from = Configure::read('Site.title') . ' ' + . ''; + $this->Email->to = $this->data['User']['email']; + $this->Email->subject = __('[' . Configure::read('Site.title') . '] Please activate your account', true); + $this->Email->template = 'register'; + $this->set('user', $this->data); + $this->Email->send(); + + $this->Session->setFlash(__('You have successfully registered an account. An email has been sent with further instructions.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'login')); + } else { + $this->Session->setFlash(__('The User could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function activate($username = null, $key = null) { + if ($username == null || $key == null) { + $this->redirect(array('action' => 'login')); + } + + if ($this->User->hasAny(array( + 'User.username' => $username, + 'User.activation_key' => $key, + 'User.status' => 0, + ))) { + $user = $this->User->findByUsername($username); + $this->User->id = $user['User']['id']; + $this->User->saveField('status', 1); + $this->User->saveField('activation_key', md5(uniqid())); + $this->Session->setFlash(__('Account activated successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'login')); + } + + public function edit() {} + + public function forgot() { + $this->set('title_for_layout', __('Forgot Password', true)); + + if (!empty($this->data) && isset($this->data['User']['username'])) { + $user = $this->User->findByUsername($this->data['User']['username']); + if (!isset($user['User']['id'])) { + $this->Session->setFlash(__('Invalid username.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'login')); + } + + $this->User->id = $user['User']['id']; + $activationKey = md5(uniqid()); + $this->User->saveField('activation_key', $activationKey); + $this->set(compact('user', 'activationKey')); + + $this->Email->from = Configure::read('Site.title') . ' ' + . ''; + $this->Email->to = $user['User']['email']; + $this->Email->subject = '[' . Configure::read('Site.title') . '] ' . __('Reset Password', true); + $this->Email->template = 'forgot_password'; + if ($this->Email->send()) { + $this->Session->setFlash(__('An email has been sent with instructions for resetting your password.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'login')); + } else { + $this->Session->setFlash(__('An error occurred. Please try again.', true), 'default', array('class' => 'error')); + } + } + } + + public function reset($username = null, $key = null) { + $this->set('title_for_layout', __('Reset Password', true)); + + if ($username == null || $key == null) { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'login')); + } + + $user = $this->User->find('first', array( + 'conditions' => array( + 'User.username' => $username, + 'User.activation_key' => $key, + ), + )); + if (!isset($user['User']['id'])) { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'login')); + } + + if (!empty($this->data) && isset($this->data['User']['password'])) { + $this->User->id = $user['User']['id']; + $user['User']['password'] = Security::hash($this->data['User']['password'], null, true); + $user['User']['activation_key'] = md5(uniqid()); + if ($this->User->save($user['User'])) { + $this->Session->setFlash(__('Your password has been reset successfully.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'login')); + } else { + $this->Session->setFlash(__('An error occurred. Please try again.', true), 'default', array('class' => 'error')); + } + } + + $this->set(compact('user', 'username', 'key')); + } + + public function login() { + $this->set('title_for_layout', __('Log in', true)); + } + + public function logout() { + $this->Session->setFlash(__('Log out successful.', true), 'default', array('class' => 'success')); + $this->redirect($this->Auth->logout()); + } + + public function view($username) { + $user = $this->User->findByUsername($username); + if (!isset($user['User']['id'])) { + $this->Session->setFlash(__('Invalid User.', true), 'default', array('class' => 'error')); + $this->redirect('/'); + } + + $this->set('title_for_layout', $user['User']['name']); + $this->set(compact('user')); + } + +} +?> \ No newline at end of file diff --git a/app/controllers/vocabularies_controller.php b/app/controllers/vocabularies_controller.php new file mode 100644 index 0000000..63c140d --- /dev/null +++ b/app/controllers/vocabularies_controller.php @@ -0,0 +1,114 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class VocabulariesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Vocabularies'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Vocabulary'); + + public function admin_index() { + $this->set('title_for_layout', __('Vocabularies', true)); + + $this->Vocabulary->recursive = 0; + $this->paginate['Vocabulary']['order'] = 'Vocabulary.weight ASC'; + $this->set('vocabularies', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Vocabulary', true)); + + if (!empty($this->data)) { + $this->Vocabulary->create(); + if ($this->Vocabulary->save($this->data)) { + $this->Session->setFlash(__('The Vocabulary has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Vocabulary could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + + $types = $this->Vocabulary->Type->find('list'); + $this->set(compact('types')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Vocabulary', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Vocabulary', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Vocabulary->save($this->data)) { + $this->Session->setFlash(__('The Vocabulary has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Vocabulary could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Vocabulary->read(null, $id); + } + + $types = $this->Vocabulary->Type->find('list'); + $this->set(compact('types')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Vocabulary', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Vocabulary->delete($id)) { + $this->Session->setFlash(__('Vocabulary deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_moveup($id, $step = 1) { + if( $this->Vocabulary->moveup($id, $step) ) { + $this->Session->setFlash(__('Moved up successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move up', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_movedown($id, $step = 1) { + if( $this->Vocabulary->movedown($id, $step) ) { + $this->Session->setFlash(__('Moved down successfully', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not move down', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/index.php b/app/index.php new file mode 100644 index 0000000..11438c3 --- /dev/null +++ b/app/index.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app/libs/croogo.php b/app/libs/croogo.php new file mode 100644 index 0000000..5ec057e --- /dev/null +++ b/app/libs/croogo.php @@ -0,0 +1,180 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Croogo { +/** + * Loads plugin's routes.php from app/config/routes.php. + * + * Plugin name is added to Hook.routes key of Configure object. + * + * @param string $pluginName plugin name + */ + public function hookRoutes($pluginName) { + $pluginName = Inflector::underscore($pluginName); + $hooks = Configure::read('Hook.routes'); + if (!$hooks || !is_array($hooks)) { + $hooks = array(); + } + $hooks[] = $pluginName; + Configure::write('Hook.routes', $hooks); + } +/** + * Loads as a normal component from controller. + * + * @param string $controllerName Controller Name + * @param string $componentName Component name + */ + public function hookComponent($controllerName, $componentName) { + self::hookControllerProperty($controllerName, 'components', array($componentName)); + } +/** + * Attaches Behavior to a Model whenever loaded. + * + * @param string $modelName + * @param string $behaviorName + * @param array $config + */ + public function hookBehavior($modelName, $behaviorName, $config = array()) { + self::hookModelProperty($modelName, 'actsAs', array($behaviorName => $config)); + } +/** + * Loads as a normal helper via controller. + * + * @param string $controllerName + * @param string $helperName + */ + public function hookHelper($controllerName, $helperName) { + self::hookControllerProperty($controllerName, 'helpers', array($helperName)); + } +/** + * Shows plugin's admin_menu element in admin navigation under Extensions. + * + * @param string $pluginName + */ + public function hookAdminMenu($pluginName) { + $pluginName = Inflector::underscore($pluginName); + Configure::write('Admin.menus.'.$pluginName, 1); + } +/** + * In admin panel for the provided action, the link will appear in table rows under 'Actions' column. + * + * @param string $action in the format ControllerName/action_name + * @param string $title Link title + * @param string $url + */ + public function hookAdminRowAction($action, $title, $url) { + $rowActions = Configure::read('Admin.rowActions'); + if (!is_array($rowActions)) { + $rowActions = array(); + } + if (!isset($rowActions[$action])) { + $rowActions[$action] = array(); + } + $rowActions[$action][$title] = $url; + Configure::write('Admin.rowActions', $rowActions); + } +/** + * Admin tab + * + * @param string $action in the format ControllerName/action_name + * @param string $title Tab title + * @param string $element element name, like plugin_name.element_name + * @param array $options array with options for the hook to take effect + */ + public function hookAdminTab($action, $title, $element, $options = array()) { + $tabs = Configure::read('Admin.tabs'); + if (!is_array($tabs)) { + $tabs = array(); + } + if (!isset($tabs[$action])) { + $tabs[$action] = array(); + } + $tabs[$action][$title]['element'] = $element; + $tabs[$action][$title]['options'] = $options; + Configure::write('Admin.tabs', $tabs); + } +/** + * Hook model property + * + * Useful when models need to be associated to another one, setting Behaviors, disabling cache, etc. + * + * @param string $modelName Model name (for e.g., Node) + * @param string $property for e.g., actsAs + * @param string $value array or string + */ + public function hookModelProperty($modelName, $property, $value) { + $configKeyPrefix = 'Hook.model_properties'; + self::__hookProperty($configKeyPrefix, $modelName, $property, $value); + } +/** + * Hook controller property + * + * @param string $controllerName Controller name (for e.g., Nodes) + * @param string $property for e.g., components + * @param string $value array or string + */ + public function hookControllerProperty($controllerName, $property, $value) { + $configKeyPrefix = 'Hook.controller_properties'; + self::__hookProperty($configKeyPrefix, $controllerName, $property, $value); + } +/** + * Hook property + * + * @param string $configKeyPrefix + * @param string $name + * @param string $property + * @param string $value + */ + private function __hookProperty($configKeyPrefix, $name, $property, $value) { + $propertyValue = Configure::read($configKeyPrefix . '.' . $name . '.' . $property); + if (!is_array($propertyValue)) { + $propertyValue = null; + } + if (is_array($value)) { + if (is_array($propertyValue)) { + $propertyValue = Set::merge($propertyValue, $value); + } else { + $propertyValue = $value; + } + } else { + $propertyValue = $value; + } + Configure::write($configKeyPrefix . '.' . $name . '.' . $property, $propertyValue); + } +/** + * Applies properties set from hooks to an object in __construct() + * + * @param string $configKey + */ + public function applyHookProperties($configKey) { + $hookProperties = Configure::read($configKey . '.' . $this->name); + if (is_array(Configure::read($configKey . '.*'))) { + $hookProperties = Set::merge(Configure::read($configKey . '.*'), $hookProperties); + } + if (is_array($hookProperties)) { + foreach ($hookProperties AS $property => $value) { + if (!isset($this->$property)) { + $this->$property = $value; + } else { + if (is_array($this->$property)) { + if (is_array($value)) { + $this->$property = Set::merge($this->$property, $value); + } else { + $this->$property = $value; + } + } else { + $this->$property = $value; + } + } + } + } + } +} +?> \ No newline at end of file diff --git a/app/libs/croogo_router.php b/app/libs/croogo_router.php new file mode 100644 index 0000000..b25c34d --- /dev/null +++ b/app/libs/croogo_router.php @@ -0,0 +1,67 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CroogoRouter { +/** + * If Translate plugin is active, + * an extra Route will be created for locale-based URLs + * + * For example, + * http://yoursite.com/blog/post-title, and + * http://yoursite.com/eng/blog/post-title + * + * Returns this object's routes array. Returns false if there are no routes available. + * + * @param string $route An empty string, or a route string "/" + * @param array $default NULL or an array describing the default route + * @param array $params An array matching the named elements in the route to regular expressions which that element should match. + * @return void + */ + public function connect($route, $default = array(), $params = array()) { + Router::connect($route, $default, $params); + if ($route == '/') { + $route = ''; + } + if (Configure::read('Translate')) { + Router::connect('/:locale' . $route, $default, array_merge(array('locale' => '[a-z]{3}'), $params)); + } + } +/** + * If you want your non-routed controler actions (like /users/add) to support locale based urls, + * this method must be called AFTER all the routes. + * + * @return void + */ + public function localize() { + if (Configure::read('Translate')) { + Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}')); + } + } +/** + * Load plugin routes + * + * @return void + */ + public function plugins() { + $pluginRoutes = Configure::read('Hook.routes'); + if (!$pluginRoutes || !is_array(Configure::read('Hook.routes'))) { + return; + } + + $plugins = Configure::read('Hook.routes'); + foreach ($plugins AS $plugin) { + App::import('Plugin', Inflector::camelize($plugin) . 'Routes'); + } + } +} +?> \ No newline at end of file diff --git a/app/libs/empty b/app/libs/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/locale/.DS_Store b/app/locale/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84a956ce7ef53b7766da82cd98ef8477cf12e919 GIT binary patch literal 6148 zcmeHK%Wl&^6g`uq)TTws1_^c}RxF|@7OyT?m?%YbfrRQxT~JhP97rUSi4sRyL@7r6 z5TC#Yutxk%IP+*l8dw$qnk(Ho*Y`2wIb+Ru0Eq4^kANnCfU2<;viXJRxYiA+InNeR zm_8DeP?(^9P;6v-$KS|+Ub_%&^pN0`da-`$O;)IkQT=H=rQTf`p#|(9M;~vIVupe> zZH&3@rl|@D_Gcn1C}21KKm^tzmq zJ6ks +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"POT-Creation-Date: 2010-09-04 10:51+0100\n" +"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" +"Last-Translator: NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: /app_controller.php:125;125 +msgid "Site down for maintenance" +msgstr "" + +#: /controllers/attachments_controller.php:82;82 +#: /views/elements/admin/navigation.ctp:82;82 +msgid "Attachments" +msgstr "" + +#: /controllers/attachments_controller.php:96;96 +msgid "Add Attachment" +msgstr "" + +#: /controllers/attachments_controller.php:135;164;135;164 +msgid "The Attachment has been saved" +msgstr "" + +#: /controllers/attachments_controller.php:143;167;143;167 +msgid "The Attachment could not be saved. Please, try again." +msgstr "" + +#: /controllers/attachments_controller.php:156;156 +msgid "Edit Attachment" +msgstr "" + +#: /controllers/attachments_controller.php:159;159 +msgid "Invalid Attachment" +msgstr "" + +#: /controllers/attachments_controller.php:184;205;184;205 +msgid "Invalid id for Attachment" +msgstr "" + +#: /controllers/attachments_controller.php:201;201 +msgid "Attachment deleted" +msgstr "" + +#: /controllers/blocks_controller.php:31;31 +#: /views/elements/admin/navigation.ctp:52;54;52;54 +msgid "Blocks" +msgstr "" + +#: /controllers/blocks_controller.php:39;39 +#: /views/blocks/admin_add.ctp:2;2 +msgid "Add Block" +msgstr "" + +#: /controllers/blocks_controller.php:46;68;46;68 +msgid "The Block has been saved" +msgstr "" + +#: /controllers/blocks_controller.php:49;71;49;71 +msgid "The Block could not be saved. Please, try again." +msgstr "" + +#: /controllers/blocks_controller.php:58;58 +#: /views/blocks/admin_edit.ctp:2;2 +msgid "Edit Block" +msgstr "" + +#: /controllers/blocks_controller.php:61;61 +msgid "Invalid Block" +msgstr "" + +#: /controllers/blocks_controller.php:89;89 +msgid "Invalid id for Block" +msgstr "" + +#: /controllers/blocks_controller.php:97;97 +msgid "Block deleted" +msgstr "" + +#: /controllers/blocks_controller.php:104;104 +#: /controllers/languages_controller.php:89;89 +#: /controllers/links_controller.php:188;188 +#: /controllers/settings_controller.php:135;135 +#: /controllers/terms_controller.php:283;283 +#: /controllers/vocabularies_controller.php:95;95 +msgid "Moved up successfully" +msgstr "" + +#: /controllers/blocks_controller.php:106;106 +#: /controllers/languages_controller.php:91;91 +#: /controllers/links_controller.php:190;190 +#: /controllers/settings_controller.php:137;137 +#: /controllers/terms_controller.php:285;285 +#: /controllers/vocabularies_controller.php:97;97 +msgid "Could not move up" +msgstr "" + +#: /controllers/blocks_controller.php:114;114 +#: /controllers/languages_controller.php:99;99 +#: /controllers/links_controller.php:213;213 +#: /controllers/settings_controller.php:145;145 +#: /controllers/terms_controller.php:316;316 +#: /controllers/vocabularies_controller.php:105;105 +msgid "Moved down successfully" +msgstr "" + +#: /controllers/blocks_controller.php:116;116 +#: /controllers/languages_controller.php:101;101 +#: /controllers/links_controller.php:215;215 +#: /controllers/settings_controller.php:147;147 +#: /controllers/terms_controller.php:318;318 +#: /controllers/vocabularies_controller.php:107;107 +msgid "Could not move down" +msgstr "" + +#: /controllers/blocks_controller.php:132;132 +#: /controllers/comments_controller.php:122;122 +#: /controllers/links_controller.php:232;232 +#: /controllers/messages_controller.php:104;104 +#: /controllers/nodes_controller.php:306;306 +msgid "No items selected." +msgstr "" + +#: /controllers/blocks_controller.php:138;138 +msgid "Blocks deleted." +msgstr "" + +#: /controllers/blocks_controller.php:141;141 +msgid "Blocks published" +msgstr "" + +#: /controllers/blocks_controller.php:144;144 +msgid "Blocks unpublished" +msgstr "" + +#: /controllers/blocks_controller.php:146;146 +#: /controllers/comments_controller.php:136;136 +#: /controllers/links_controller.php:261;261 +#: /controllers/messages_controller.php:118;118 +#: /controllers/nodes_controller.php:326;326 +#: /controllers/users_controller.php:209;250;261;209;250;261 +#: /plugins/extensions/controllers/extensions_themes_controller.php:186;186 +msgid "An error occurred." +msgstr "" + +#: /controllers/comments_controller.php:49;143;49;143 +#: /views/elements/comments.ctp:7;7 +#: /views/elements/node_more_info.ctp:32;32 +#: /views/elements/admin/navigation.ctp:31;31 +#: /views/nodes/admin_add.ctp:10;10 +#: /views/nodes/admin_edit.ctp:11;11 +#: /views/types/admin_add.ctp:10;10 +#: /views/types/admin_edit.ctp:11;11 +msgid "Comments" +msgstr "" + +#: /controllers/comments_controller.php:68;68 +msgid "Comments: Published" +msgstr "" + +#: /controllers/comments_controller.php:70;70 +msgid "Comments: Approval" +msgstr "" + +#: /controllers/comments_controller.php:78;78 +msgid "Edit Comment" +msgstr "" + +#: /controllers/comments_controller.php:81;81 +msgid "Invalid Comment" +msgstr "" + +#: /controllers/comments_controller.php:86;86 +msgid "The Comment has been saved" +msgstr "" + +#: /controllers/comments_controller.php:89;89 +msgid "The Comment could not be saved. Please, try again." +msgstr "" + +#: /controllers/comments_controller.php:99;99 +msgid "Invalid id for Comment" +msgstr "" + +#: /controllers/comments_controller.php:107;107 +msgid "Comment deleted" +msgstr "" + +#: /controllers/comments_controller.php:128;128 +msgid "Comments deleted." +msgstr "" + +#: /controllers/comments_controller.php:131;131 +msgid "Comments published" +msgstr "" + +#: /controllers/comments_controller.php:134;134 +msgid "Comments unpublished" +msgstr "" + +#: /controllers/comments_controller.php:161;172;161;172 +msgid "Invalid Node" +msgstr "" + +#: /controllers/comments_controller.php:179;179 +msgid "Maximum level reached. You cannot reply to that comment." +msgstr "" + +#: /controllers/comments_controller.php:227;227 +msgid "Your comment has been added successfully." +msgstr "" + +#: /controllers/comments_controller.php:229;229 +msgid "Your comment will appear after moderation." +msgstr "" + +#: /controllers/comments_controller.php:237;237 +msgid "New comment posted under" +msgstr "" + +#: /controllers/comments_controller.php:262;262 +msgid "Sorry, the comment appears to be spam." +msgstr "" + +#: /controllers/comments_controller.php:275;275 +#: /controllers/contacts_controller.php:181;181 +msgid "Invalid captcha entry" +msgstr "" + +#: /controllers/contacts_controller.php:42;42 +#: /views/elements/admin/navigation.ctp:88;90;88;90 +msgid "Contacts" +msgstr "" + +#: /controllers/contacts_controller.php:50;50 +msgid "Add Contact" +msgstr "" + +#: /controllers/contacts_controller.php:55;72;55;72 +msgid "The Contact has been saved" +msgstr "" + +#: /controllers/contacts_controller.php:58;75;58;75 +msgid "The Contact could not be saved. Please, try again." +msgstr "" + +#: /controllers/contacts_controller.php:64;64 +msgid "Edit Contact" +msgstr "" + +#: /controllers/contacts_controller.php:67;67 +msgid "Invalid Contact" +msgstr "" + +#: /controllers/contacts_controller.php:85;85 +msgid "Invalid id for Contact" +msgstr "" + +#: /controllers/contacts_controller.php:93;93 +msgid "Contact deleted" +msgstr "" + +#: /controllers/contacts_controller.php:136;136 +msgid "Your message has been received..." +msgstr "" + +#: /controllers/contacts_controller.php:168;168 +msgid "Sorry, the message appears to be spam." +msgstr "" + +#: /controllers/filemanager_controller.php:66;66 +#: /views/elements/admin/navigation.ctp:83;83 +msgid "File Manager" +msgstr "" + +#: /controllers/filemanager_controller.php:81;81 +msgid "Edit file: %s" +msgstr "" + +#: /controllers/filemanager_controller.php:92;92 +msgid "File saved successfully" +msgstr "" + +#: /controllers/filemanager_controller.php:102;102 +#: /plugins/extensions/views/extensions_locales/admin_add.ctp:15;15 +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:6;6 +#: /plugins/extensions/views/extensions_plugins/admin_add.ctp:15;15 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:6;6 +#: /plugins/extensions/views/extensions_themes/admin_add.ctp:15;15 +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:6;6 +#: /views/attachments/admin_add.ctp:12;12 +msgid "Upload" +msgstr "" + +#: /controllers/filemanager_controller.php:115;115 +msgid "File uploaded successfully." +msgstr "" + +#: /controllers/filemanager_controller.php:135;135 +msgid "File deleted" +msgstr "" + +#: /controllers/filemanager_controller.php:137;164;210;232;137;164;210;232 +msgid "An error occured" +msgstr "" + +#: /controllers/filemanager_controller.php:162;162 +msgid "Directory deleted" +msgstr "" + +#: /controllers/filemanager_controller.php:195;195 +msgid "New Directory" +msgstr "" + +#: /controllers/filemanager_controller.php:206;206 +msgid "Directory created successfully." +msgstr "" + +#: /controllers/filemanager_controller.php:218;218 +msgid "New File" +msgstr "" + +#: /controllers/filemanager_controller.php:228;228 +msgid "File created successfully." +msgstr "" + +#: /controllers/languages_controller.php:31;31 +#: /views/elements/admin/navigation.ctp:113;113 +msgid "Languages" +msgstr "" + +#: /controllers/languages_controller.php:39;39 +msgid "Add Language" +msgstr "" + +#: /controllers/languages_controller.php:44;61;44;61 +msgid "The Language has been saved" +msgstr "" + +#: /controllers/languages_controller.php:47;64;47;64 +msgid "The Language could not be saved. Please, try again." +msgstr "" + +#: /controllers/languages_controller.php:53;53 +msgid "Edit Language" +msgstr "" + +#: /controllers/languages_controller.php:56;56 +#: /plugins/translate/controllers/translate_controller.php:103;103 +msgid "Invalid Language" +msgstr "" + +#: /controllers/languages_controller.php:74;74 +msgid "Invalid id for Language" +msgstr "" + +#: /controllers/languages_controller.php:82;82 +msgid "Language deleted" +msgstr "" + +#: /controllers/languages_controller.php:113;113 +msgid "Select a language" +msgstr "" + +#: /controllers/links_controller.php:56;56 +msgid "Links: %s" +msgstr "" + +#: /controllers/links_controller.php:75;75 +msgid "Add Link" +msgstr "" + +#: /controllers/links_controller.php:86;118;86;118 +msgid "The Link has been saved" +msgstr "" + +#: /controllers/links_controller.php:89;121;89;121 +msgid "The Link could not be saved. Please, try again." +msgstr "" + +#: /controllers/links_controller.php:101;101 +msgid "Edit Link" +msgstr "" + +#: /controllers/links_controller.php:104;104 +msgid "Invalid Link" +msgstr "" + +#: /controllers/links_controller.php:141;149;176;201;141;149;176;201 +msgid "Invalid id for Link" +msgstr "" + +#: /controllers/links_controller.php:165;165 +msgid "Link deleted" +msgstr "" + +#: /controllers/links_controller.php:253;253 +msgid "Links deleted." +msgstr "" + +#: /controllers/links_controller.php:256;256 +msgid "Links published" +msgstr "" + +#: /controllers/links_controller.php:259;259 +msgid "Links unpublished" +msgstr "" + +#: /controllers/menus_controller.php:31;31 +#: /views/elements/admin/navigation.ctp:41;43;41;43 +msgid "Menus" +msgstr "" + +#: /controllers/menus_controller.php:39;39 +msgid "Add Menu" +msgstr "" + +#: /controllers/menus_controller.php:44;61;44;61 +msgid "The Menu has been saved" +msgstr "" + +#: /controllers/menus_controller.php:47;64;47;64 +msgid "The Menu could not be saved. Please, try again." +msgstr "" + +#: /controllers/menus_controller.php:53;53 +msgid "Edit Menu" +msgstr "" + +#: /controllers/menus_controller.php:56;56 +msgid "Invalid Menu" +msgstr "" + +#: /controllers/menus_controller.php:74;74 +msgid "Invalid id for Menu" +msgstr "" + +#: /controllers/menus_controller.php:82;82 +msgid "Menu deleted" +msgstr "" + +#: /controllers/messages_controller.php:31;31 +#: /views/elements/admin/navigation.ctp:91;91 +msgid "Messages" +msgstr "" + +#: /controllers/messages_controller.php:50;50 +msgid "Messages: Read" +msgstr "" + +#: /controllers/messages_controller.php:52;52 +msgid "Messages: Unread" +msgstr "" + +#: /controllers/messages_controller.php:60;60 +msgid "Edit Message" +msgstr "" + +#: /controllers/messages_controller.php:63;63 +msgid "Invalid Message" +msgstr "" + +#: /controllers/messages_controller.php:68;68 +msgid "The Message has been saved" +msgstr "" + +#: /controllers/messages_controller.php:71;71 +msgid "The Message could not be saved. Please, try again." +msgstr "" + +#: /controllers/messages_controller.php:81;81 +msgid "Invalid id for Message" +msgstr "" + +#: /controllers/messages_controller.php:89;89 +msgid "Message deleted" +msgstr "" + +#: /controllers/messages_controller.php:110;110 +msgid "Messages deleted." +msgstr "" + +#: /controllers/messages_controller.php:113;113 +msgid "Messages marked as read" +msgstr "" + +#: /controllers/messages_controller.php:116;116 +msgid "Messages marked as unread" +msgstr "" + +#: /controllers/nodes_controller.php:58;58 +#: /plugins/extensions/views/extensions_locales/admin_edit.ctp:16;16 +#: /views/elements/admin/navigation.ctp:8;8 +msgid "Content" +msgstr "" + +#: /controllers/nodes_controller.php:89;89 +#: /views/elements/admin/navigation.ctp:12;12 +#: /views/nodes/admin_index.ctp:9;9 +msgid "Create content" +msgstr "" + +#: /controllers/nodes_controller.php:102;173;102;173 +msgid "Content type does not exist." +msgstr "" + +#: /controllers/nodes_controller.php:106;106 +msgid "Create content: %s" +msgstr "" + +#: /controllers/nodes_controller.php:141;207;141;207 +msgid "%s has been saved" +msgstr "" + +#: /controllers/nodes_controller.php:144;210;144;210 +msgid "%s could not be saved. Please, try again." +msgstr "" + +#: /controllers/nodes_controller.php:164;647;685;164;647;685 +msgid "Invalid content" +msgstr "" + +#: /controllers/nodes_controller.php:177;177 +msgid "Edit content: %s" +msgstr "" + +#: /controllers/nodes_controller.php:264;264 +msgid "Paths updated." +msgstr "" + +#: /controllers/nodes_controller.php:270;270 +msgid "Invalid id for Node" +msgstr "" + +#: /controllers/nodes_controller.php:278;278 +msgid "Node deleted" +msgstr "" + +#: /controllers/nodes_controller.php:312;312 +msgid "Nodes deleted." +msgstr "" + +#: /controllers/nodes_controller.php:315;315 +msgid "Nodes published" +msgstr "" + +#: /controllers/nodes_controller.php:318;318 +msgid "Nodes unpublished" +msgstr "" + +#: /controllers/nodes_controller.php:321;321 +msgid "Nodes promoted" +msgstr "" + +#: /controllers/nodes_controller.php:324;324 +msgid "Nodes unpromoted" +msgstr "" + +#: /controllers/nodes_controller.php:365;452;517;592;365;452;517;592 +msgid "Invalid content type." +msgstr "" + +#: /controllers/nodes_controller.php:415;415 +msgid "Invalid Term." +msgstr "" + +#: /controllers/nodes_controller.php:493;493 +msgid "Nodes" +msgstr "" + +#: /controllers/nodes_controller.php:602;602 +msgid "Search Results: %s" +msgstr "" + +#: /controllers/regions_controller.php:31;31 +#: /views/regions/admin_add.ctp:7;7 +#: /views/regions/admin_edit.ctp:8;8 +msgid "Region" +msgstr "" + +#: /controllers/regions_controller.php:39;39 +msgid "Add Region" +msgstr "" + +#: /controllers/regions_controller.php:44;61;44;61 +msgid "The Region has been saved" +msgstr "" + +#: /controllers/regions_controller.php:47;64;47;64 +msgid "The Region could not be saved. Please, try again." +msgstr "" + +#: /controllers/regions_controller.php:53;53 +msgid "Edit Region" +msgstr "" + +#: /controllers/regions_controller.php:56;56 +msgid "Invalid Region" +msgstr "" + +#: /controllers/regions_controller.php:74;74 +msgid "Invalid id for Region" +msgstr "" + +#: /controllers/regions_controller.php:82;82 +msgid "Region deleted" +msgstr "" + +#: /controllers/roles_controller.php:31;31 +#: /views/elements/admin/navigation.ctp:99;99 +msgid "Roles" +msgstr "" + +#: /controllers/roles_controller.php:39;39 +msgid "Add Role" +msgstr "" + +#: /controllers/roles_controller.php:44;61;44;61 +msgid "The Role has been saved" +msgstr "" + +#: /controllers/roles_controller.php:47;64;47;64 +msgid "The Role could not be saved. Please, try again." +msgstr "" + +#: /controllers/roles_controller.php:53;53 +msgid "Edit Role" +msgstr "" + +#: /controllers/roles_controller.php:56;56 +msgid "Invalid Role" +msgstr "" + +#: /controllers/roles_controller.php:74;74 +msgid "Invalid id for Role" +msgstr "" + +#: /controllers/roles_controller.php:82;82 +msgid "Role deleted" +msgstr "" + +#: /controllers/settings_controller.php:38;38 +#: /views/elements/admin/navigation.ctp:4;4 +msgid "Dashboard" +msgstr "" + +#: /controllers/settings_controller.php:42;42 +#: /views/elements/admin/navigation.ctp:105;105 +#: /views/settings/admin_add.ctp:7;7 +#: /views/settings/admin_edit.ctp:7;7 +msgid "Settings" +msgstr "" + +#: /controllers/settings_controller.php:54;54 +msgid "Invalid Setting." +msgstr "" + +#: /controllers/settings_controller.php:61;61 +msgid "Add Setting" +msgstr "" + +#: /controllers/settings_controller.php:66;83;66;83 +msgid "The Setting has been saved" +msgstr "" + +#: /controllers/settings_controller.php:69;86;69;86 +msgid "The Setting could not be saved. Please, try again." +msgstr "" + +#: /controllers/settings_controller.php:75;75 +#: /views/settings/admin_view.ctp:43;43 +msgid "Edit Setting" +msgstr "" + +#: /controllers/settings_controller.php:78;78 +msgid "Invalid Setting" +msgstr "" + +#: /controllers/settings_controller.php:96;96 +msgid "Invalid id for Setting" +msgstr "" + +#: /controllers/settings_controller.php:104;104 +msgid "Setting deleted" +msgstr "" + +#: /controllers/settings_controller.php:110;110 +msgid "Settings: %s" +msgstr "" + +#: /controllers/settings_controller.php:113;113 +msgid "Settings updated successfully" +msgstr "" + +#: /controllers/settings_controller.php:127;127 +msgid "Invalid Setting key" +msgstr "" + +#: /controllers/terms_controller.php:48;48 +msgid "Invalid Vocabulary ID." +msgstr "" + +#: /controllers/terms_controller.php:54;54 +msgid "Vocabulary: %s" +msgstr "" + +#: /controllers/terms_controller.php:87;87 +msgid "%s: Add Term" +msgstr "" + +#: /controllers/terms_controller.php:97;193;97;193 +msgid "Term with same slug already exists in the vocabulary." +msgstr "" + +#: /controllers/terms_controller.php:110;207;110;207 +msgid "Term saved successfuly." +msgstr "" + +#: /controllers/terms_controller.php:116;213;116;213 +msgid "Term could not be added to the vocabulary. Please try again." +msgstr "" + +#: /controllers/terms_controller.php:120;217;120;217 +msgid "Term could not be saved. Please try again." +msgstr "" + +#: /controllers/terms_controller.php:168;168 +msgid "%s: Edit Term" +msgstr "" + +#: /controllers/terms_controller.php:229;264;296;229;264;296 +msgid "Invalid id for Term" +msgstr "" + +#: /controllers/terms_controller.php:252;252 +msgid "Term deleted" +msgstr "" + +#: /controllers/terms_controller.php:254;254 +msgid "Term could not be deleted. Please, try again." +msgstr "" + +#: /controllers/types_controller.php:38;38 +#: /views/types/admin_add.ctp:7;7 +#: /views/types/admin_edit.ctp:8;8 +msgid "Type" +msgstr "" + +#: /controllers/types_controller.php:46;46 +msgid "Add Type" +msgstr "" + +#: /controllers/types_controller.php:51;71;51;71 +msgid "The Type has been saved" +msgstr "" + +#: /controllers/types_controller.php:54;74;54;74 +msgid "The Type could not be saved. Please, try again." +msgstr "" + +#: /controllers/types_controller.php:63;63 +msgid "Edit Type" +msgstr "" + +#: /controllers/types_controller.php:66;66 +msgid "Invalid Type" +msgstr "" + +#: /controllers/types_controller.php:87;87 +msgid "Invalid id for Type" +msgstr "" + +#: /controllers/types_controller.php:95;95 +msgid "Type deleted" +msgstr "" + +#: /controllers/users_controller.php:49;49 +msgid "You have reached maximum limit for failed login attempts. Please try again after a few minutes." +msgstr "" + +#: /controllers/users_controller.php:69;162;69;162 +#: /views/elements/admin/navigation.ctp:96;98;96;98 +#: /views/users/admin_index.ctp:2;2 +msgid "Users" +msgstr "" + +#: /controllers/users_controller.php:80;100;80;100 +msgid "The User has been saved" +msgstr "" + +#: /controllers/users_controller.php:83;103;188;83;103;188 +msgid "The User could not be saved. Please, try again." +msgstr "" + +#: /controllers/users_controller.php:95;115;95;115 +msgid "Invalid User" +msgstr "" + +#: /controllers/users_controller.php:122;122 +msgid "Password has been reset." +msgstr "" + +#: /controllers/users_controller.php:125;125 +msgid "Password could not be reset. Please, try again." +msgstr "" + +#: /controllers/users_controller.php:128;128 +msgid "Current password did not match. Please, try again." +msgstr "" + +#: /controllers/users_controller.php:138;138 +msgid "Invalid id for User" +msgstr "" + +#: /controllers/users_controller.php:146;146 +msgid "User deleted" +msgstr "" + +#: /controllers/users_controller.php:152;152 +msgid "Admin Login" +msgstr "" + +#: /controllers/users_controller.php:157;285;157;285 +msgid "Log out successful." +msgstr "" + +#: /controllers/users_controller.php:166;166 +msgid "Register" +msgstr "" + +#: /controllers/users_controller.php:180;180 +msgid "[" +msgstr "" + +#: /controllers/users_controller.php:185;185 +msgid "You have successfully registered an account. An email has been sent with further instructions." +msgstr "" + +#: /controllers/users_controller.php:207;207 +msgid "Account activated successfully." +msgstr "" + +#: /controllers/users_controller.php:218;218 +msgid "Forgot Password" +msgstr "" + +#: /controllers/users_controller.php:223;223 +msgid "Invalid username." +msgstr "" + +#: /controllers/users_controller.php:235;247;235;247 +msgid "Reset Password" +msgstr "" + +#: /controllers/users_controller.php:238;238 +msgid "An email has been sent with instructions for resetting your password." +msgstr "" + +#: /controllers/users_controller.php:241;273;241;273 +msgid "An error occurred. Please try again." +msgstr "" + +#: /controllers/users_controller.php:270;270 +msgid "Your password has been reset successfully." +msgstr "" + +#: /controllers/users_controller.php:281;281 +msgid "Log in" +msgstr "" + +#: /controllers/users_controller.php:292;292 +msgid "Invalid User." +msgstr "" + +#: /controllers/vocabularies_controller.php:31;31 +msgid "Vocabularies" +msgstr "" + +#: /controllers/vocabularies_controller.php:39;39 +msgid "Add Vocabulary" +msgstr "" + +#: /controllers/vocabularies_controller.php:44;64;44;64 +msgid "The Vocabulary has been saved" +msgstr "" + +#: /controllers/vocabularies_controller.php:47;67;47;67 +msgid "The Vocabulary could not be saved. Please, try again." +msgstr "" + +#: /controllers/vocabularies_controller.php:56;56 +msgid "Edit Vocabulary" +msgstr "" + +#: /controllers/vocabularies_controller.php:59;59 +msgid "Invalid Vocabulary" +msgstr "" + +#: /controllers/vocabularies_controller.php:80;80 +msgid "Invalid id for Vocabulary" +msgstr "" + +#: /controllers/vocabularies_controller.php:88;88 +msgid "Vocabulary deleted" +msgstr "" + +#: /models/behaviors/croogo_translate.php:73;73 +msgid "Datasource %s for CroogoTranslateBehavior of model %s is not connected" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:19;19 +#: /plugins/acl/views/acl_acos/admin_index.ctp:2;2 +msgid "Acos" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:26;26 +#: /plugins/acl/views/acl_acos/admin_add.ctp:2;2 +#: /plugins/acl/views/acl_acos/admin_edit.ctp:2;2 +msgid "Add Aco" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:31;48;31;48 +msgid "The Aco has been saved" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:34;51;34;51 +msgid "The Aco could not be saved. Please, try again." +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:40;40 +msgid "Edit Aco" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:43;43 +msgid "Invalid Aco" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:61;61 +msgid "Invalid id for Aco" +msgstr "" + +#: /plugins/acl/controllers/acl_acos_controller.php:69;69 +msgid "Aco deleted" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:20;20 +#: /plugins/acl/views/acl_acos/admin_index.ctp:18;18 +#: /plugins/acl/views/acl_actions/admin_index.ctp:20;20 +#: /plugins/acl/views/acl_aros/admin_index.ctp:18;18 +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:16;16 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:18;18 +#: /plugins/translate/views/translate/admin_index.ctp:28;28 +#: /views/attachments/admin_browse.ctp:18;18 +#: /views/attachments/admin_index.ctp:17;17 +#: /views/blocks/admin_index.ctp:20;20 +#: /views/comments/admin_index.ctp:31;31 +#: /views/contacts/admin_index.ctp:17;17 +#: /views/filemanager/admin_browse.ctp:29;29 +#: /views/languages/admin_index.ctp:18;18 +#: /views/links/admin_index.ctp:31;31 +#: /views/menus/admin_index.ctp:17;17 +#: /views/messages/admin_index.ctp:30;30 +#: /views/nodes/admin_index.ctp:36;36 +#: /views/nodes/admin_translations.ctp:28;28 +#: /views/regions/admin_index.ctp:16;16 +#: /views/roles/admin_index.ctp:16;16 +#: /views/settings/admin_index.ctp:17;17 +#: /views/terms/admin_index.ctp:32;32 +#: /views/types/admin_index.ctp:17;17 +#: /views/users/admin_index.ctp:18;18 +#: /views/vocabularies/admin_index.ctp:16;16 +msgid "Actions" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:32;32 +msgid "Add Action" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:46;49;46;49 +msgid "The " +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:72;72 +msgid "Edit Action" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:75;75 +msgid "Invalid Action" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:80;80 +msgid "The Action has been saved" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:83;83 +msgid "The Action could not be saved. Please, try again." +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:110;125;110;125 +msgid "Invalid id for Action" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:118;118 +msgid "Action deleted" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:130;130 +msgid "Action moved up" +msgstr "" + +#: /plugins/acl/controllers/acl_actions_controller.php:135;135 +msgid "Action moved down" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:19;19 +#: /plugins/acl/views/acl_aros/admin_index.ctp:2;2 +msgid "Aros" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:26;26 +#: /plugins/acl/views/acl_aros/admin_add.ctp:2;2 +#: /plugins/acl/views/acl_aros/admin_edit.ctp:2;2 +msgid "Add Aro" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:31;48;31;48 +msgid "The Aro has been saved" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:34;51;34;51 +msgid "The Aro could not be saved. Please, try again." +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:40;40 +msgid "Edit Aro" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:43;43 +msgid "Invalid Aro" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:61;61 +msgid "Invalid id for Aro" +msgstr "" + +#: /plugins/acl/controllers/acl_aros_controller.php:69;69 +msgid "Aro deleted" +msgstr "" + +#: /plugins/acl/controllers/acl_permissions_controller.php:36;36 +#: /views/elements/admin/navigation.ctp:100;100 +msgid "Permissions" +msgstr "" + +#: /plugins/acl/views/acl_acos/admin_index.ctp:6;6 +msgid "New Aco" +msgstr "" + +#: /plugins/acl/views/acl_acos/admin_index.ctp:24;24 +#: /plugins/acl/views/acl_actions/admin_index.ctp:41;41 +#: /plugins/acl/views/acl_aros/admin_index.ctp:24;24 +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:28;28 +#: /plugins/translate/views/translate/admin_index.ctp:34;34 +#: /views/attachments/admin_browse.ctp:24;24 +#: /views/attachments/admin_index.ctp:23;23 +#: /views/blocks/admin_index.ctp:28;28 +#: /views/comments/admin_index.ctp:37;37 +#: /views/contacts/admin_index.ctp:25;25 +#: /views/filemanager/admin_browse.ctp:55;55 +#: /views/languages/admin_index.ctp:26;26 +#: /views/links/admin_index.ctp:39;39 +#: /views/menus/admin_index.ctp:24;24 +#: /views/messages/admin_index.ctp:36;36 +#: /views/nodes/admin_index.ctp:42;42 +#: /views/nodes/admin_translations.ctp:34;34 +#: /views/regions/admin_index.ctp:22;22 +#: /views/roles/admin_index.ctp:22;22 +#: /views/settings/admin_index.ctp:25;25 +#: /views/terms/admin_index.ctp:48;48 +#: /views/types/admin_index.ctp:23;23 +#: /views/users/admin_index.ctp:24;24 +#: /views/vocabularies/admin_index.ctp:23;23 +msgid "Edit" +msgstr "" + +#: /plugins/acl/views/acl_acos/admin_index.ctp:25;25 +#: /plugins/acl/views/acl_actions/admin_index.ctp:42;42 +#: /plugins/acl/views/acl_aros/admin_index.ctp:25;25 +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:29;29 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:43;43 +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:63;63 +#: /plugins/translate/views/translate/admin_index.ctp:40;40 +#: /views/attachments/admin_browse.ctp:29;29 +#: /views/attachments/admin_index.ctp:29;29 +#: /views/blocks/admin_index.ctp:30;59;30;59 +#: /views/comments/admin_index.ctp:39;75;39;75 +#: /views/contacts/admin_index.ctp:27;27 +#: /views/filemanager/admin_browse.ctp:38;57;38;57 +#: /views/languages/admin_index.ctp:28;28 +#: /views/links/admin_index.ctp:41;68;41;68 +#: /views/menus/admin_index.ctp:26;26 +#: /views/messages/admin_index.ctp:38;67;38;67 +#: /views/nodes/admin_index.ctp:44;44 +#: /views/nodes/admin_translations.ctp:35;35 +#: /views/regions/admin_index.ctp:24;24 +#: /views/roles/admin_index.ctp:24;24 +#: /views/settings/admin_index.ctp:27;27 +#: /views/terms/admin_index.ctp:54;54 +#: /views/types/admin_index.ctp:25;25 +#: /views/users/admin_index.ctp:26;26 +#: /views/vocabularies/admin_index.ctp:27;27 +msgid "Delete" +msgstr "" + +#: /plugins/acl/views/acl_acos/admin_index.ctp:29;29 +#: /plugins/acl/views/acl_actions/admin_index.ctp:46;46 +#: /plugins/acl/views/acl_aros/admin_index.ctp:29;29 +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:33;33 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:47;47 +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:67;67 +#: /plugins/translate/views/translate/admin_index.ctp:46;46 +#: /views/attachments/admin_browse.ctp:34;34 +#: /views/attachments/admin_index.ctp:34;34 +#: /views/blocks/admin_index.ctp:35;35 +#: /views/comments/admin_index.ctp:43;43 +#: /views/contacts/admin_index.ctp:31;31 +#: /views/languages/admin_index.ctp:32;32 +#: /views/links/admin_index.ctp:46;46 +#: /views/menus/admin_index.ctp:31;31 +#: /views/messages/admin_index.ctp:42;42 +#: /views/nodes/admin_index.ctp:48;48 +#: /views/nodes/admin_translations.ctp:35;35 +#: /views/regions/admin_index.ctp:29;29 +#: /views/roles/admin_index.ctp:29;29 +#: /views/settings/admin_index.ctp:32;32 +#: /views/terms/admin_index.ctp:59;59 +#: /views/types/admin_index.ctp:30;30 +#: /views/users/admin_index.ctp:31;31 +#: /views/vocabularies/admin_index.ctp:32;32 +msgid "Are you sure?" +msgstr "" + +#: /plugins/acl/views/acl_acos/admin_index.ctp:48;48 +#: /plugins/acl/views/acl_aros/admin_index.ctp:48;48 +#: /views/attachments/admin_browse.ctp:70;70 +#: /views/attachments/admin_index.ctp:60;60 +#: /views/blocks/admin_index.ctp:69;69 +#: /views/comments/admin_index.ctp:85;85 +#: /views/contacts/admin_index.ctp:54;54 +#: /views/languages/admin_index.ctp:51;51 +#: /views/menus/admin_index.ctp:49;49 +#: /views/messages/admin_index.ctp:77;77 +#: /views/nodes/admin_index.ctp:93;93 +#: /views/regions/admin_index.ctp:46;46 +#: /views/roles/admin_index.ctp:46;46 +#: /views/settings/admin_index.ctp:59;59 +#: /views/types/admin_index.ctp:48;48 +#: /views/users/admin_index.ctp:50;50 +#: /views/vocabularies/admin_index.ctp:49;49 +msgid "Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_add.ctp:9;9 +#: /plugins/acl/views/acl_actions/admin_edit.ctp:11;11 +msgid "Choose none if the Aco is a controller." +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:10;10 +msgid "New Action" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:11;11 +#: /plugins/acl/views/acl_permissions/admin_index.ctp:9;9 +msgid "Generate Actions" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:18;18 +#: /plugins/acl/views/acl_permissions/admin_index.ctp:20;20 +#: /views/links/admin_index.ctp:28;28 +#: /views/settings/admin_view.ctp:4;4 +#: /views/terms/admin_index.ctp:29;29 +msgid "Id" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:19;19 +#: /plugins/acl/views/acl_permissions/admin_index.ctp:21;21 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:14;14 +msgid "Alias" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:47;47 +#: /views/blocks/admin_index.ctp:26;26 +#: /views/languages/admin_index.ctp:24;24 +#: /views/links/admin_index.ctp:37;37 +#: /views/settings/admin_index.ctp:23;23 +#: /views/terms/admin_index.ctp:38;38 +#: /views/vocabularies/admin_index.ctp:24;24 +msgid "Move up" +msgstr "" + +#: /plugins/acl/views/acl_actions/admin_index.ctp:48;48 +#: /views/blocks/admin_index.ctp:27;27 +#: /views/languages/admin_index.ctp:25;25 +#: /views/links/admin_index.ctp:38;38 +#: /views/settings/admin_index.ctp:24;24 +#: /views/terms/admin_index.ctp:43;43 +#: /views/vocabularies/admin_index.ctp:25;25 +msgid "Move down" +msgstr "" + +#: /plugins/acl/views/acl_aros/admin_index.ctp:6;6 +msgid "New Aro" +msgstr "" + +#: /plugins/acl/views/acl_permissions/admin_index.ctp:10;10 +msgid "Edit Actions" +msgstr "" + +#: /plugins/acl/views/acl_permissions/admin_toggle.ctp:9;9 +msgid "error" +msgstr "" + +#: /plugins/example/controllers/example_controller.php:31;35;31;35 +#: /plugins/example/views/elements/admin_menu.ctp:1;1 +msgid "Example" +msgstr "" + +#: /plugins/example/views/elements/admin_menu.ctp:3;3 +msgid "Example 1" +msgstr "" + +#: /plugins/example/views/elements/admin_menu.ctp:4;4 +msgid "Example 2" +msgstr "" + +#: /plugins/example/views/example/admin_index.ctp:3;3 +#: /plugins/example/views/example/index.ctp:3;3 +msgid "content here" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:37;37 +#: /views/elements/admin/navigation.ctp:63;63 +msgid "Locales" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:53;53 +msgid "Locale does not exist." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:70;70 +msgid "Could not edit croogo_bootstrap.php file." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:76;76 +msgid "Upload a new locale" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:102;151;102;151 +msgid "Invalid locale." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:107;107 +msgid "Locale already exists." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:148;148 +msgid "Edit locale: %s" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:156;156 +msgid "The file default.po does not exist." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:166;166 +msgid "Locale updated successfully" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:176;176 +#: /plugins/translate/controllers/translate_controller.php:88;88 +msgid "Invalid locale" +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:186;186 +msgid "Locale deleted successfully." +msgstr "" + +#: /plugins/extensions/controllers/extensions_locales_controller.php:188;188 +msgid "Local could not be deleted." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:51;51 +#: /views/elements/admin/navigation.ctp:64;64 +msgid "Plugins" +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:63;63 +msgid "Upload a new plugin" +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:92;92 +msgid "Invalid plugin." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:102;102 +msgid "Plugin already exists." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:144;168;144;168 +msgid "Invalid plugin" +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:152;152 +msgid "You cannot delete a plugin that is currently active." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:158;158 +msgid "Plugin deleted successfully." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:160;160 +msgid "Plugin could not be deleted." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:187;187 +msgid "Plugin deactivated successfully." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:189;189 +msgid "Plugin could not be deactivated. Please, try again." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:198;198 +msgid "Plugin activated successfully." +msgstr "" + +#: /plugins/extensions/controllers/extensions_plugins_controller.php:200;200 +msgid "Plugin could not be activated. Please, try again." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:37;37 +#: /views/elements/admin/navigation.ctp:62;62 +msgid "Themes" +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:62;62 +msgid "Theme activated." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:68;68 +msgid "Upload a new theme" +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:93;93 +msgid "Invalid YML file" +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:99;99 +msgid "Invalid zip archive" +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:104;104 +msgid "Directory with theme alias already exists." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:138;138 +msgid "Theme uploaded successfully." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:145;145 +msgid "Theme Editor" +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:154;154 +msgid "Invalid Theme." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:163;163 +msgid "Default theme cannot be deleted." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:166;166 +msgid "You cannot delete a theme that is currently active." +msgstr "" + +#: /plugins/extensions/controllers/extensions_themes_controller.php:188;188 +msgid "Theme deleted successfully." +msgstr "" + +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:14;14 +#: /plugins/translate/views/translate/admin_index.ctp:27;27 +#: /views/nodes/admin_translations.ctp:27;27 +msgid "Locale" +msgstr "" + +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:15;15 +msgid "Default" +msgstr "" + +#: /plugins/extensions/views/extensions_locales/admin_index.ctp:23;23 +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:33;33 +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:58;58 +msgid "Activate" +msgstr "" + +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:15;15 +#: /views/elements/comments_form.ctp:23;39;23;39 +msgid "Name" +msgstr "" + +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:16;16 +#: /views/settings/admin_view.ctp:19;19 +msgid "Description" +msgstr "" + +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:17;17 +msgid "Active" +msgstr "" + +#: /plugins/extensions/views/extensions_plugins/admin_index.ctp:30;30 +msgid "Deactivate" +msgstr "" + +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:7;7 +msgid "Editor" +msgstr "" + +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:12;12 +msgid "Current Theme" +msgstr "" + +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:28;54;28;54 +#: /views/comments/rss/index.ctp:16;16 +#: /views/elements/node_info.ctp:9;9 +msgid "by" +msgstr "" + +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:32;56;32;56 +msgid "Regions supported: " +msgstr "" + +#: /plugins/extensions/views/extensions_themes/admin_index.ctp:37;37 +msgid "Available Themes" +msgstr "" + +#: /plugins/install/controllers/install_controller.php:93;93 +msgid "Installation: Welcome" +msgstr "" + +#: /plugins/install/controllers/install_controller.php:108;108 +msgid "Step 1: Database" +msgstr "" + +#: /plugins/install/controllers/install_controller.php:124;165;124;165 +msgid "Could not connect to database." +msgstr "" + +#: /plugins/install/controllers/install_controller.php:145;145 +msgid "Could not write database.php file." +msgstr "" + +#: /plugins/install/controllers/install_controller.php:157;157 +msgid "Step 2: Build database" +msgstr "" + +#: /plugins/install/controllers/install_controller.php:210;210 +msgid "Installation completed successfully" +msgstr "" + +#: /plugins/install/controllers/install_controller.php:215;215 +msgid "Installation files deleted successfully." +msgstr "" + +#: /plugins/install/controllers/install_controller.php:218;218 +msgid "Could not delete installation files." +msgstr "" + +#: /plugins/install/views/install/data.ctp:5;5 +msgid "Click here to build your database" +msgstr "" + +#: /plugins/install/views/install/finish.ctp:21;21 +msgid "Click here to delete installation files" +msgstr "" + +#: /plugins/install/views/install/index.ctp:8;8 +msgid "Your tmp directory is writable." +msgstr "" + +#: /plugins/install/views/install/index.ctp:11;11 +msgid "Your tmp directory is NOT writable." +msgstr "" + +#: /plugins/install/views/install/index.ctp:16;16 +msgid "Your config directory is writable." +msgstr "" + +#: /plugins/install/views/install/index.ctp:19;19 +msgid "Your config directory is NOT writable." +msgstr "" + +#: /plugins/install/views/install/index.ctp:24;24 +msgid "PHP version %s > 5" +msgstr "" + +#: /plugins/install/views/install/index.ctp:27;27 +msgid "PHP version %s < 5" +msgstr "" + +#: /plugins/install/views/install/index.ctp:33;33 +msgid "Installation cannot continue as minimum requirements are not met." +msgstr "" + +#: /plugins/install/views/layouts/install.ctp:5;5 +#: /views/layouts/admin.ctp:5;5 +#: /views/layouts/admin_full.ctp:5;5 +#: /views/layouts/admin_login.ctp:5;5 +msgid "Croogo" +msgstr "" + +#: /plugins/install/views/layouts/install.ctp:21;21 +msgid "Install Croogo" +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:35;79;35;79 +msgid "Invalid ID." +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:44;159;44;159 +msgid "Invalid model." +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:55;114;170;55;114;170 +msgid "Invalid record." +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:62;62 +msgid "Translations: %s" +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:121;121 +msgid "Translate content: %s (%s)" +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:128;128 +msgid "Record has been translated" +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:135;135 +msgid "Record could not be translated. Please, try again." +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:146;146 +msgid "Invalid Locale or ID" +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:185;185 +msgid "Translation for the locale deleted successfully." +msgstr "" + +#: /plugins/translate/controllers/translate_controller.php:187;187 +msgid "Translation for the locale could not be deleted." +msgstr "" + +#: /plugins/translate/views/translate/admin_edit.ctp:15;15 +msgid "Record" +msgstr "" + +#: /plugins/translate/views/translate/admin_index.ctp:8;8 +#: /views/nodes/admin_translations.ctp:8;8 +msgid "Translate in a new language" +msgstr "" + +#: /plugins/translate/views/translate/admin_index.ctp:26;26 +#: /views/links/admin_index.ctp:29;29 +#: /views/nodes/admin_translations.ctp:26;26 +#: /views/terms/admin_index.ctp:30;30 +msgid "Title" +msgstr "" + +#: /plugins/translate/views/translate/admin_index.ctp:63;63 +#: /views/nodes/admin_translations.ctp:52;52 +msgid "No translations available." +msgstr "" + +#: /tests/cases/controllers/languages_controller.test.php:185;216;185;216 +msgid "Could not add a new language." +msgstr "" + +#: /views/attachments/admin_browse.ctp:6;6 +#: /views/attachments/admin_index.ctp:6;6 +msgid "New Attachment" +msgstr "" + +#: /views/attachments/admin_browse.ctp:17;17 +#: /views/attachments/admin_index.ctp:16;16 +msgid "URL" +msgstr "" + +#: /views/attachments/admin_browse.ctp:51;51 +msgid "Insert" +msgstr "" + +#: /views/attachments/admin_edit.ctp:9;9 +msgid "Attachment" +msgstr "" + +#: /views/attachments/admin_edit.ctp:10;10 +msgid "Info" +msgstr "" + +#: /views/attachments/admin_edit.ctp:29;29 +msgid "Caption" +msgstr "" + +#: /views/attachments/admin_edit.ctp:36;36 +msgid "File URL" +msgstr "" + +#: /views/attachments/admin_edit.ctp:37;37 +msgid "Mime Type" +msgstr "" + +#: /views/blocks/admin_add.ctp:7;7 +#: /views/blocks/admin_edit.ctp:7;7 +msgid "Block" +msgstr "" + +#: /views/blocks/admin_add.ctp:8;8 +#: /views/blocks/admin_edit.ctp:8;8 +#: /views/links/admin_add.ctp:8;8 +#: /views/links/admin_edit.ctp:8;8 +#: /views/nodes/admin_add.ctp:12;12 +#: /views/nodes/admin_edit.ctp:13;13 +msgid "Access" +msgstr "" + +#: /views/blocks/admin_add.ctp:9;9 +#: /views/blocks/admin_edit.ctp:9;9 +msgid "Visibilities" +msgstr "" + +#: /views/blocks/admin_add.ctp:17;17 +#: /views/blocks/admin_edit.ctp:18;18 +msgid "unique name for your block" +msgstr "" + +#: /views/blocks/admin_add.ctp:18;18 +#: /views/blocks/admin_edit.ctp:19;19 +msgid "if you are not sure, choose 'none'" +msgstr "" + +#: /views/blocks/admin_add.ctp:36;36 +#: /views/blocks/admin_edit.ctp:37;37 +msgid "Enter one URL per line. Leave blank if you want this Block to appear in all pages." +msgstr "" + +#: /views/blocks/admin_index.ctp:6;6 +msgid "New Block" +msgstr "" + +#: /views/blocks/admin_index.ctp:57;57 +#: /views/comments/admin_index.ctp:73;73 +#: /views/links/admin_index.ctp:66;66 +#: /views/nodes/admin_index.ctp:79;79 +msgid "Publish" +msgstr "" + +#: /views/blocks/admin_index.ctp:58;58 +#: /views/comments/admin_index.ctp:74;74 +#: /views/links/admin_index.ctp:67;67 +#: /views/nodes/admin_index.ctp:80;80 +msgid "Unpublish" +msgstr "" + +#: /views/blocks/admin_index.ctp:63;63 +#: /views/comments/admin_index.ctp:79;79 +#: /views/links/admin_index.ctp:72;72 +#: /views/messages/admin_index.ctp:71;71 +#: /views/nodes/admin_index.ctp:87;87 +msgid "Submit" +msgstr "" + +#: /views/comments/admin_edit.ctp:8;8 +#: /views/elements/comments.ctp:5;5 +#: /views/elements/node_more_info.ctp:30;30 +#: /views/elements/admin/navigation.ctp:111;111 +msgid "Comment" +msgstr "" + +#: /views/comments/admin_edit.ctp:9;9 +msgid "Contact Info" +msgstr "" + +#: /views/comments/admin_edit.ctp:18;18 +#: /views/comments/admin_index.ctp:14;14 +#: /views/elements/admin/navigation.ctp:33;33 +#: /views/elements/admin/nodes_filter.ctp:24;24 +#: /views/nodes/admin_add.ctp:85;85 +#: /views/nodes/admin_edit.ctp:86;86 +msgid "Published" +msgstr "" + +#: /views/comments/admin_index.ctp:15;15 +#: /views/elements/admin/navigation.ctp:34;34 +msgid "Approval" +msgstr "" + +#: /views/comments/rss/index.ctp:16;16 +msgid "Comment on" +msgstr "" + +#: /views/contacts/admin_add.ctp:7;7 +#: /views/contacts/admin_edit.ctp:7;7 +msgid "Contact" +msgstr "" + +#: /views/contacts/admin_add.ctp:8;8 +#: /views/contacts/admin_edit.ctp:8;8 +msgid "Details" +msgstr "" + +#: /views/contacts/admin_add.ctp:9;9 +#: /views/contacts/admin_edit.ctp:9;9 +#: /views/contacts/view.ctp:20;20 +msgid "Message" +msgstr "" + +#: /views/contacts/admin_add.ctp:40;40 +#: /views/contacts/admin_edit.ctp:41;41 +msgid "Let users leave a message" +msgstr "" + +#: /views/contacts/admin_add.ctp:43;43 +#: /views/contacts/admin_edit.ctp:44;44 +msgid "Save messages in database" +msgstr "" + +#: /views/contacts/admin_add.ctp:46;46 +#: /views/contacts/admin_edit.ctp:47;47 +msgid "Notify by email instantly" +msgstr "" + +#: /views/contacts/admin_add.ctp:49;49 +#: /views/contacts/admin_edit.ctp:50;50 +#: /views/types/admin_add.ctp:57;57 +msgid "Spam protection (requires Akismet API key)" +msgstr "" + +#: /views/contacts/admin_add.ctp:52;52 +#: /views/contacts/admin_edit.ctp:53;53 +#: /views/types/admin_add.ctp:60;60 +msgid "Use captcha? (requires Recaptcha API key)" +msgstr "" + +#: /views/contacts/admin_add.ctp:57;57 +#: /views/contacts/admin_edit.ctp:58;58 +#: /views/types/admin_add.ctp:66;66 +#: /views/types/admin_edit.ctp:67;67 +msgid "You can manage your API keys here." +msgstr "" + +#: /views/contacts/admin_index.ctp:6;6 +msgid "New Contact" +msgstr "" + +#: /views/contacts/view.ctp:17;17 +msgid "Your name" +msgstr "" + +#: /views/contacts/view.ctp:18;18 +msgid "Your email" +msgstr "" + +#: /views/contacts/view.ctp:19;19 +msgid "Subject" +msgstr "" + +#: /views/contacts/view.ctp:24;24 +msgid "Send" +msgstr "" + +#: /views/elements/comment.ctp:13;13 +msgid "said on %s" +msgstr "" + +#: /views/elements/comment.ctp:19;19 +msgid "Reply" +msgstr "" + +#: /views/elements/comments_form.ctp:2;2 +msgid "Add new comment" +msgstr "" + +#: /views/elements/comments_form.ctp:7;7 +msgid "Go back to original post" +msgstr "" + +#: /views/elements/comments_form.ctp:28;40;28;40 +msgid "Email" +msgstr "" + +#: /views/elements/comments_form.ctp:33;41;33;41 +msgid "Website" +msgstr "" + +#: /views/elements/comments_form.ctp:48;48 +msgid "Post comment" +msgstr "" + +#: /views/elements/node_info.ctp:6;6 +msgid "Posted" +msgstr "" + +#: /views/elements/node_info.ctp:20;20 +msgid "on" +msgstr "" + +#: /views/elements/node_more_info.ctp:17;17 +msgid "Posted in" +msgstr "" + +#: /views/elements/node_more_info.ctp:28;28 +msgid "Leave a comment" +msgstr "" + +#: /views/elements/search.ctp:24;24 +msgid "Search" +msgstr "" + +#: /views/elements/admin/logo.ctp:2;2 +msgid "Admin Panel" +msgstr "" + +#: /views/elements/admin/logo.ctp:4;4 +msgid "Visit website" +msgstr "" + +#: /views/elements/admin/navigation.ctp:10;23;10;23 +msgid "List" +msgstr "" + +#: /views/elements/admin/navigation.ctp:19;19 +msgid "Content types" +msgstr "" + +#: /views/elements/admin/navigation.ctp:21;21 +#: /views/types/admin_add.ctp:8;8 +#: /views/types/admin_edit.ctp:9;9 +msgid "Taxonomy" +msgstr "" + +#: /views/elements/admin/navigation.ctp:24;44;24;44 +msgid "Add new" +msgstr "" + +#: /views/elements/admin/navigation.ctp:55;55 +msgid "Regions" +msgstr "" + +#: /views/elements/admin/navigation.ctp:60;60 +msgid "Extensions" +msgstr "" + +#: /views/elements/admin/navigation.ctp:80;80 +msgid "Media" +msgstr "" + +#: /views/elements/admin/navigation.ctp:107;107 +msgid "Site" +msgstr "" + +#: /views/elements/admin/navigation.ctp:108;108 +msgid "Meta" +msgstr "" + +#: /views/elements/admin/navigation.ctp:109;109 +msgid "Reading" +msgstr "" + +#: /views/elements/admin/navigation.ctp:110;110 +msgid "Writing" +msgstr "" + +#: /views/elements/admin/navigation.ctp:112;112 +msgid "Service" +msgstr "" + +#: /views/elements/admin/nodes_filter.ctp:25;25 +msgid "Unpublished" +msgstr "" + +#: /views/elements/admin/nodes_filter.ctp:35;35 +msgid "Promoted" +msgstr "" + +#: /views/elements/admin/nodes_filter.ctp:37;37 +msgid "Yes" +msgstr "" + +#: /views/elements/admin/nodes_filter.ctp:38;38 +msgid "No" +msgstr "" + +#: /views/elements/admin/nodes_filter.ctp:43;43 +#: /views/nodes/admin_index.ctp:10;10 +msgid "Filter" +msgstr "" + +#: /views/elements/admin/quick.ctp:4;4 +msgid "You are logged in as " +msgstr "" + +#: /views/elements/admin/quick.ctp:5;5 +msgid "Log Out" +msgstr "" + +#: /views/elements/email/text/comment.ctp:2;2 +msgid "A new comment has been posted under: %s" +msgstr "" + +#: /views/elements/email/text/comment.ctp:6;6 +#: /views/elements/email/text/contact.ctp:8;8 +msgid "Name: %s" +msgstr "" + +#: /views/elements/email/text/comment.ctp:7;7 +#: /views/elements/email/text/contact.ctp:9;9 +msgid "Email: %s" +msgstr "" + +#: /views/elements/email/text/comment.ctp:8;8 +msgid "Website: %s" +msgstr "" + +#: /views/elements/email/text/comment.ctp:9;9 +#: /views/elements/email/text/contact.ctp:11;11 +#: /views/elements/email/text/forgot_password.ctp:17;17 +msgid "IP Address: %s" +msgstr "" + +#: /views/elements/email/text/comment.ctp:10;10 +msgid "Comment: %s" +msgstr "" + +#: /views/elements/email/text/contact.ctp:7;7 +msgid "You have received a new message at: %s" +msgstr "" + +#: /views/elements/email/text/contact.ctp:10;10 +msgid "Subject: %s" +msgstr "" + +#: /views/elements/email/text/contact.ctp:12;12 +msgid "Message: %s" +msgstr "" + +#: /views/elements/email/text/forgot_password.ctp:1;1 +#: /views/elements/email/text/register.ctp:1;1 +msgid "Hello %s" +msgstr "" + +#: /views/elements/email/text/forgot_password.ctp:10;10 +msgid "Please visit this link to reset your password: %s" +msgstr "" + +#: /views/elements/email/text/forgot_password.ctp:14;14 +msgid "If you did not request a password reset, then please ignore this email." +msgstr "" + +#: /views/elements/email/text/register.ctp:10;10 +msgid "Please visit this link to activate your account: %s" +msgstr "" + +#: /views/errors/missing_action.ctp:1;1 +#: /views/errors/missing_controller.ctp:1;1 +#: /views/errors/security.ctp:1;1 +msgid "Page not found" +msgstr "" + +#: /views/errors/missing_action.ctp:2;2 +#: /views/errors/missing_controller.ctp:2;2 +msgid "Error" +msgstr "" + +#: /views/errors/missing_action.ctp:4;4 +#: /views/errors/missing_controller.ctp:4;4 +#: /views/errors/security.ctp:4;4 +msgid "The requested address was not found on this server." +msgstr "" + +#: /views/errors/security.ctp:2;2 +msgid "Security Error" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:6;6 +msgid "Upload here" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:7;7 +msgid "Create directory" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:8;8 +msgid "Create file" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:14;14 +#: /views/filemanager/admin_create_directory.ctp:6;6 +#: /views/filemanager/admin_create_file.ctp:6;6 +#: /views/filemanager/admin_editfile.ctp:6;6 +#: /views/filemanager/admin_upload.ctp:6;6 +msgid "You are here:" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:28;28 +msgid "Directory content" +msgstr "" + +#: /views/filemanager/admin_browse.ctp:36;36 +msgid "Open" +msgstr "" + +#: /views/helpers/layout.php:609;609 +#: /views/settings/admin_view.ctp:9;9 +msgid "Key" +msgstr "" + +#: /views/helpers/layout.php:613;613 +#: /views/settings/admin_view.ctp:14;14 +msgid "Value" +msgstr "" + +#: /views/helpers/layout.php:628;628 +msgid "Remove" +msgstr "" + +#: /views/languages/admin_add.ctp:7;7 +#: /views/languages/admin_edit.ctp:7;7 +msgid "Language" +msgstr "" + +#: /views/languages/admin_index.ctp:6;6 +#: /views/languages/admin_select.ctp:6;6 +msgid "New Language" +msgstr "" + +#: /views/layouts/admin_login.ctp:21;21 +msgid "Back to" +msgstr "" + +#: /views/layouts/maintenance.ctp:13;13 +msgid "Site down for maintenance." +msgstr "" + +#: /views/links/admin_add.ctp:7;7 +#: /views/links/admin_edit.ctp:7;7 +msgid "Link" +msgstr "" + +#: /views/links/admin_add.ctp:9;9 +#: /views/links/admin_edit.ctp:9;9 +#: /views/menus/admin_add.ctp:8;8 +#: /views/menus/admin_edit.ctp:8;8 +#: /views/settings/admin_add.ctp:8;8 +#: /views/settings/admin_edit.ctp:8;8 +msgid "Misc." +msgstr "" + +#: /views/links/admin_add.ctp:17;17 +#: /views/links/admin_edit.ctp:18;18 +msgid "Parent" +msgstr "" + +#: /views/links/admin_add.ctp:23;23 +#: /views/links/admin_edit.ctp:24;24 +msgid "Link to a Node" +msgstr "" + +#: /views/links/admin_index.ctp:6;6 +msgid "New Link" +msgstr "" + +#: /views/links/admin_index.ctp:30;30 +msgid "Status" +msgstr "" + +#: /views/menus/admin_add.ctp:7;7 +#: /views/menus/admin_edit.ctp:7;7 +msgid "Menu" +msgstr "" + +#: /views/menus/admin_index.ctp:6;6 +msgid "New Menu" +msgstr "" + +#: /views/menus/admin_index.ctp:23;23 +msgid "View links" +msgstr "" + +#: /views/messages/admin_index.ctp:6;6 +msgid "Unread" +msgstr "" + +#: /views/messages/admin_index.ctp:7;7 +msgid "Read" +msgstr "" + +#: /views/messages/admin_index.ctp:65;65 +msgid "Mark as read" +msgstr "" + +#: /views/messages/admin_index.ctp:66;66 +msgid "Mark as unread" +msgstr "" + +#: /views/nodes/admin_add.ctp:9;9 +#: /views/nodes/admin_edit.ctp:10;10 +msgid "Terms" +msgstr "" + +#: /views/nodes/admin_add.ctp:11;11 +#: /views/nodes/admin_edit.ctp:12;12 +msgid "Custom fields" +msgstr "" + +#: /views/nodes/admin_add.ctp:13;13 +#: /views/nodes/admin_edit.ctp:14;14 +msgid "Publishing" +msgstr "" + +#: /views/nodes/admin_add.ctp:49;49 +#: /views/nodes/admin_edit.ctp:53;53 +#: /views/types/admin_add.ctp:43;43 +#: /views/types/admin_edit.ctp:45;45 +msgid "Disabled" +msgstr "" + +#: /views/nodes/admin_add.ctp:50;50 +#: /views/nodes/admin_edit.ctp:54;54 +#: /views/types/admin_add.ctp:44;44 +#: /views/types/admin_edit.ctp:46;46 +msgid "Read only" +msgstr "" + +#: /views/nodes/admin_add.ctp:51;51 +#: /views/nodes/admin_edit.ctp:55;55 +#: /views/types/admin_add.ctp:45;45 +#: /views/types/admin_edit.ctp:47;47 +msgid "Read/Write" +msgstr "" + +#: /views/nodes/admin_add.ctp:73;73 +#: /views/nodes/admin_edit.ctp:75;75 +msgid "Add another field" +msgstr "" + +#: /views/nodes/admin_add.ctp:89;89 +#: /views/nodes/admin_edit.ctp:87;87 +msgid "Promoted to front page" +msgstr "" + +#: /views/nodes/admin_index.ctp:81;81 +msgid "Promote" +msgstr "" + +#: /views/nodes/admin_index.ctp:82;82 +msgid "Unpromote" +msgstr "" + +#: /views/nodes/admin_links.ctp:24;24 +msgid "Sort by:" +msgstr "" + +#: /views/nodes/index.ctp:4;4 +#: /views/nodes/promoted.ctp:4;4 +#: /views/nodes/search.ctp:6;6 +#: /views/nodes/term.ctp:6;6 +msgid "No items found." +msgstr "" + +#: /views/regions/admin_index.ctp:6;6 +msgid "New Region" +msgstr "" + +#: /views/roles/admin_add.ctp:7;7 +#: /views/roles/admin_edit.ctp:8;8 +#: /views/users/admin_index.ctp:14;14 +msgid "Role" +msgstr "" + +#: /views/roles/admin_index.ctp:6;6 +msgid "New Role" +msgstr "" + +#: /views/settings/admin_add.ctp:13;13 +#: /views/settings/admin_edit.ctp:14;14 +msgid "e.g., 'Site.title'" +msgstr "" + +#: /views/settings/admin_add.ctp:22;22 +#: /views/settings/admin_edit.ctp:23;23 +msgid "e.g., 'text' or 'textarea'" +msgstr "" + +#: /views/settings/admin_index.ctp:6;6 +#: /views/settings/admin_view.ctp:46;46 +msgid "New Setting" +msgstr "" + +#: /views/settings/admin_view.ctp:2;2 +msgid "Setting" +msgstr "" + +#: /views/settings/admin_view.ctp:24;24 +msgid "Input Type" +msgstr "" + +#: /views/settings/admin_view.ctp:29;29 +msgid "Weight" +msgstr "" + +#: /views/settings/admin_view.ctp:34;34 +#: /views/types/admin_add.ctp:11;11 +#: /views/types/admin_edit.ctp:12;12 +msgid "Params" +msgstr "" + +#: /views/settings/admin_view.ctp:44;44 +msgid "Delete Setting" +msgstr "" + +#: /views/settings/admin_view.ctp:44;44 +msgid "Are you sure you want to delete # %s?" +msgstr "" + +#: /views/settings/admin_view.ctp:45;45 +msgid "List Settings" +msgstr "" + +#: /views/terms/admin_add.ctp:19;19 +#: /views/terms/admin_edit.ctp:12;12 +msgid "Term" +msgstr "" + +#: /views/terms/admin_index.ctp:6;6 +msgid "New Term" +msgstr "" + +#: /views/terms/admin_index.ctp:31;31 +msgid "Slug" +msgstr "" + +#: /views/types/admin_add.ctp:9;9 +#: /views/types/admin_edit.ctp:10;10 +msgid "Format" +msgstr "" + +#: /views/types/admin_add.ctp:32;32 +#: /views/types/admin_edit.ctp:34;34 +msgid "Show author's name" +msgstr "" + +#: /views/types/admin_add.ctp:35;35 +#: /views/types/admin_edit.ctp:37;37 +msgid "Show date" +msgstr "" + +#: /views/types/admin_index.ctp:6;6 +msgid "New Type" +msgstr "" + +#: /views/users/admin_add.ctp:2;2 +msgid "Add User" +msgstr "" + +#: /views/users/admin_add.ctp:7;7 +#: /views/users/admin_edit.ctp:14;14 +msgid "User" +msgstr "" + +#: /views/users/admin_edit.ctp:2;2 +msgid "Edit User" +msgstr "" + +#: /views/users/admin_edit.ctp:6;6 +#: /views/users/admin_reset_password.ctp:2;2 +msgid "Reset password" +msgstr "" + +#: /views/users/admin_index.ctp:6;6 +msgid "New User" +msgstr "" + +#: /views/users/admin_login.ctp:10;10 +msgid "Forgot password?" +msgstr "" + +#: /views/users/admin_login.ctp:17;17 +msgid "Log In" +msgstr "" + +#: /views/users/admin_reset_password.ctp:8;8 +msgid "Current Password" +msgstr "" + +#: /views/users/admin_reset_password.ctp:9;9 +msgid "New Password" +msgstr "" + +#: /views/users/index.ctp:4;4 +msgid "You are currently logged in as:" +msgstr "" + +#: /views/users/login.ctp:2;2 +msgid "Login" +msgstr "" + +#: /views/users/reset.ctp:6;6 +msgid "New password" +msgstr "" + +#: /views/vocabularies/admin_add.ctp:10;10 +#: /views/vocabularies/admin_edit.ctp:8;8 +msgid "Vocabulary" +msgstr "" + +#: /views/vocabularies/admin_add.ctp:11;11 +#: /views/vocabularies/admin_edit.ctp:9;9 +msgid "Options" +msgstr "" + +#: /views/vocabularies/admin_index.ctp:6;6 +msgid "New Vocabulary" +msgstr "" + +#: /views/vocabularies/admin_index.ctp:22;22 +msgid "View terms" +msgstr "" + +#: /webroot/test.php:88;88 +msgid "Debug setting does not allow access to this url." +msgstr "" + diff --git a/app/locale/eng/.DS_Store b/app/locale/eng/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f69b470eb21b3943edf55c089d1b8d45e8386dc6 GIT binary patch literal 6148 zcmeHKO-my|5Uq|;XZ(O%1idwT@(?7$?y3h5V>ZzhRuD$;u!_#?2nh^MNG9YEvO9}^ zXn(@~0MGuN?5plpkmyx(se`>6;$wKmc%FU6DlRhz zROT8H6_it-u8*>rYDv6B1^C_hv_&n7=o0?;{_-D5mM56yPvZ{0IW>leXqmpz7t|k9 z8=Q#t>5!wN>RRIf;u7W=wpV=NaO2SAEt^i_T?jV>}LaKh<^c zac5H3dY&0Bs~cP%$73Wx%)p#bj>8qOFxEG?R?1A}P+fK{Z8A?6=O=4gkZ!_p#VV9HW~ zma1Hfp)4JF?dn2@rA138<(d!WR#vV7Lp+y-*0a4(o0^Iw-YJC2;U+(`+ zkqn}MDDZzOpsKB?)x@*8vvuYv`K;COD>xh1l@=c<2+UE8T0V-`;l_~H8~{UyrA1_5 P@*`kmkUPwb*H4us>3&xgZtzdIavliIlixmWgLul8o| zBR+r9J^c1NZ0-Q%rGONW0#ZN;k*#EcinfZTA(oPCUfq$idFE)>xHD0ND>*VFwYa9Ft&YBaPhILR7q8$UH i9b?0Gd=o`k*SN;>UN|HM9r>UG^=E*($fUquEARu{9vc4u literal 0 HcmV?d00001 diff --git a/app/locale/eng/LC_MESSAGES/.svn/entries b/app/locale/eng/LC_MESSAGES/.svn/entries new file mode 100644 index 0000000..5ed28c9 --- /dev/null +++ b/app/locale/eng/LC_MESSAGES/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/locale/eng/LC_MESSAGES +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-02T13:50:22.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/locale/eng/LC_MESSAGES/.svn/text-base/empty.svn-base b/app/locale/eng/LC_MESSAGES/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/locale/eng/LC_MESSAGES/empty b/app/locale/eng/LC_MESSAGES/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/locale/por/LC_MESSAGES/default.po b/app/locale/por/LC_MESSAGES/default.po new file mode 100644 index 0000000..534eee1 --- /dev/null +++ b/app/locale/por/LC_MESSAGES/default.po @@ -0,0 +1,2284 @@ +msgid "" +msgstr "" +"Project-Id-Version: Croogo\n" +"POT-Creation-Date: 2009-12-28 19:45+0700\n" +"PO-Revision-Date: 2010-03-09 22:17-0300\n" +"Last-Translator: Juan Basso \n" +"Language-Team: Juan Basso \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" +"X-Poedit-SourceCharset: utf-8\n" +"Plural-Forms: nplurals=2; plural=n>1;\n" + +#: \app_controller.php:56 +msgid "Site down for maintenance" +msgstr "Site em manutenção" + +#: \controllers\attachments_controller.php:70 +#: \views\elements\admin\navigation.ctp:30 +msgid "Attachments" +msgstr "Anexos" + +#: \controllers\attachments_controller.php:78 +msgid "Add Attachment" +msgstr "Incluir Anexo" + +#: \controllers\attachments_controller.php:117;139 +msgid "The Attachment has been saved" +msgstr "O Anexo foi salvo" + +#: \controllers\attachments_controller.php:125;142 +msgid "The Attachment could not be saved. Please, try again." +msgstr "O Anexo não pode ser salvo. Tente novamente." + +#: \controllers\attachments_controller.php:131 +msgid "Edit Attachment" +msgstr "Editar Anexo" + +#: \controllers\attachments_controller.php:134 +msgid "Invalid Attachment" +msgstr "Anexo Inválido" + +#: \controllers\attachments_controller.php:152;167 +msgid "Invalid id for Attachment" +msgstr "ID inválido do Anexo" + +#: \controllers\attachments_controller.php:163 +msgid "Attachment deleted" +msgstr "Anexo excluído" + +#: \controllers\blocks_controller.php:31 +#: \views\elements\admin\navigation.ctp:21;23 +msgid "Blocks" +msgstr "Blocos" + +#: \controllers\blocks_controller.php:39 +#: \views\blocks\admin_add.ctp:2 +msgid "Add Block" +msgstr "Incluir Bloco" + +#: \controllers\blocks_controller.php:46;68 +msgid "The Block has been saved" +msgstr "O Bloco foi salvo" + +#: \controllers\blocks_controller.php:49;71 +msgid "The Block could not be saved. Please, try again." +msgstr "O Bloco não pode ser salvo. Tente novamente." + +#: \controllers\blocks_controller.php:58 +#: \views\blocks\admin_edit.ctp:2 +msgid "Edit Block" +msgstr "Editar Bloco" + +#: \controllers\blocks_controller.php:61 +msgid "Invalid Block" +msgstr "Bloco Inválido" + +#: \controllers\blocks_controller.php:89 +msgid "Invalid id for Block" +msgstr "ID inválido do Bloco" + +#: \controllers\blocks_controller.php:93 +msgid "Block deleted" +msgstr "Bloco excluído" + +#: \controllers\blocks_controller.php:100 +#: \controllers\languages_controller.php:85 +#: \controllers\links_controller.php:142 +#: \controllers\settings_controller.php:131 +#: \controllers\terms_controller.php:112 +msgid "Moved up succuessfully" +msgstr "Movido para cima com sucesso" + +#: \controllers\blocks_controller.php:102 +#: \controllers\languages_controller.php:87 +#: \controllers\links_controller.php:144 +#: \controllers\settings_controller.php:133 +#: \controllers\terms_controller.php:114 +msgid "Could not move up" +msgstr "Não foi possível mover para cima" + +#: \controllers\blocks_controller.php:110 +#: \controllers\languages_controller.php:95 +#: \controllers\links_controller.php:152 +#: \controllers\settings_controller.php:141 +#: \controllers\terms_controller.php:122 +msgid "Moved down succuessfully" +msgstr "Movido para baixo com sucesso" + +#: \controllers\blocks_controller.php:112 +#: \controllers\languages_controller.php:97 +#: \controllers\links_controller.php:154 +#: \controllers\settings_controller.php:143 +#: \controllers\terms_controller.php:124 +msgid "Could not move down" +msgstr "Não foi possível mover para baixo" + +#: \controllers\blocks_controller.php:128 +#: \controllers\comments_controller.php:100 +#: \controllers\links_controller.php:170 +#: \controllers\messages_controller.php:100 +#: \controllers\nodes_controller.php:250 +#: \controllers\terms_controller.php:140 +msgid "No items selected." +msgstr "Nenhum item selecionado." + +#: \controllers\blocks_controller.php:134 +msgid "Blocks deleted." +msgstr "Blocos excluídos." + +#: \controllers\blocks_controller.php:137 +msgid "Blocks published" +msgstr "Blocos publicados" + +#: \controllers\blocks_controller.php:140 +msgid "Blocks unpublished" +msgstr "Blocos não publicados" + +#: \controllers\blocks_controller.php:142 +#: \controllers\comments_controller.php:114 +#: \controllers\links_controller.php:184 +#: \controllers\messages_controller.php:114 +#: \controllers\nodes_controller.php:270 +#: \controllers\terms_controller.php:154 +#: \controllers\users_controller.php:163;204;215 +#: \plugins\extensions\controllers\extensions_themes_controller.php:180 +msgid "An error occurred." +msgstr "Um erro aconteceu." + +#: \controllers\comments_controller.php:31;121 +#: \views\elements\comments.ctp:7 +#: \views\elements\node_more_info.ctp:33 +#: \views\elements\admin\navigation.ctp:10 +#: \views\nodes\admin_add.ctp:16 +#: \views\nodes\admin_edit.ctp:17 +#: \views\types\admin_add.ctp:10 +#: \views\types\admin_edit.ctp:11 +msgid "Comments" +msgstr "Comentários" + +#: \controllers\comments_controller.php:50 +#: \views\comments\admin_edit.ctp:17 +#: \views\comments\admin_index.ctp:14 +#: \views\elements\admin\nodes_filter.ctp:24 +#: \views\nodes\admin_add.ctp:80 +#: \views\nodes\admin_edit.ctp:80 +msgid "Published" +msgstr "Publicado" + +#: \controllers\comments_controller.php:52 +#: \views\comments\admin_index.ctp:15 +msgid "Approval" +msgstr "Aprovado" + +#: \controllers\comments_controller.php:60 +msgid "Edit Comment" +msgstr "Editar Comentário" + +#: \controllers\comments_controller.php:63 +msgid "Invalid Comment" +msgstr "Comentário Inválido" + +#: \controllers\comments_controller.php:68 +msgid "The Comment has been saved" +msgstr "O Comentário foi salvo" + +#: \controllers\comments_controller.php:71 +msgid "The Comment could not be saved. Please, try again." +msgstr "O Comentário não pode ser salvo. Tente novamente." + +#: \controllers\comments_controller.php:81 +msgid "Invalid id for Comment" +msgstr "ID Inválido do Comentário" + +#: \controllers\comments_controller.php:85 +msgid "Comment deleted" +msgstr "Comentário excluído" + +#: \controllers\comments_controller.php:106 +msgid "Comments deleted." +msgstr "Comentário excluído." + +#: \controllers\comments_controller.php:109 +msgid "Comments published" +msgstr "Comentários publicados" + +#: \controllers\comments_controller.php:112 +msgid "Comments unpublished" +msgstr "Comentários não publicados" + +#: \controllers\comments_controller.php:139;150 +msgid "Invalid Node" +msgstr "Nó inválido" + +#: \controllers\comments_controller.php:157 +msgid "Maximum level reached. You cannot reply to that comment." +msgstr "Nível máximo atingido. Você não pode responder a esse comentário." + +#: \controllers\comments_controller.php:205 +msgid "Your comment has been added successfully." +msgstr "Seu comentário foi incluído com sucesso." + +#: \controllers\comments_controller.php:207 +msgid "Your comment will appear after moderation." +msgstr "Seu comentário aparecerá depos da moderação." + +#: \controllers\comments_controller.php:215 +msgid "New comment posted under" +msgstr "Novo comentário postado dentro de" + +#: \controllers\comments_controller.php:240 +msgid "Sorry, the comment appears to be spam." +msgstr "Desculpe, seu comentário parece ser um spam." + +#: \controllers\comments_controller.php:253 +#: \controllers\contacts_controller.php:157 +msgid "Invalid captcha entry" +msgstr "Captcha inválido." + +#: \controllers\contacts_controller.php:31 +#: \views\elements\admin\navigation.ctp:35;37 +msgid "Contacts" +msgstr "Contatos" + +#: \controllers\contacts_controller.php:39 +msgid "Add Contact" +msgstr "Incluir Contato" + +#: \controllers\contacts_controller.php:44;61 +msgid "The Contact has been saved" +msgstr "O Contato foi salvo" + +#: \controllers\contacts_controller.php:47;64 +msgid "The Contact could not be saved. Please, try again." +msgstr "O Comentário não pode ser salvo. Tente novamente." + +#: \controllers\contacts_controller.php:53 +msgid "Edit Contact" +msgstr "Editar Contato" + +#: \controllers\contacts_controller.php:56 +msgid "Invalid Contact" +msgstr "Contato Inválido" + +#: \controllers\contacts_controller.php:74 +msgid "Invalid id for Contact" +msgstr "ID Inválido do Contato" + +#: \controllers\contacts_controller.php:78 +msgid "Contact deleted" +msgstr "Contato excluído" + +#: \controllers\contacts_controller.php:113 +msgid "Your message has been received..." +msgstr "Sua mensagem foi recebida..." + +#: \controllers\contacts_controller.php:144 +msgid "Sorry, the message appears to be spam." +msgstr "Desculpa, a mensagem parece ser um spam." + +#: \controllers\filemanager_controller.php:97 +msgid "File saved successfully" +msgstr "Arquivo salvado com sucesso" + +#: \controllers\filemanager_controller.php:107 +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:9 +#: \plugins\extensions\views\extensions_locales\admin_add.ctp:15 +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:6 +#: \plugins\extensions\views\extensions_plugins\admin_add.ctp:15 +#: \plugins\extensions\views\extensions_plugins\admin_index.ctp:6 +#: \plugins\extensions\views\extensions_themes\admin_add.ctp:15 +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:6 +#: \views\attachments\admin_add.ctp:12 +msgid "Upload" +msgstr "Enviar arquivo" + +#: \controllers\filemanager_controller.php:121 +msgid "File uploaded successfully." +msgstr "Arquivo enviado com sucesso." + +#: \controllers\filemanager_controller.php:136 +msgid "File deleted" +msgstr "Arquivo excluído" + +#: \controllers\filemanager_controller.php:138;160;206;230 +msgid "An error occured" +msgstr "Um erro aconteceu" + +#: \controllers\filemanager_controller.php:158 +msgid "Directory deleted" +msgstr "Diretório excluído" + +#: \controllers\filemanager_controller.php:191 +msgid "New Directory" +msgstr "Novo Diretório" + +#: \controllers\filemanager_controller.php:202 +msgid "Directory created successfully." +msgstr "Diretório criado com sucesso." + +#: \controllers\filemanager_controller.php:214 +msgid "New File" +msgstr "Novo Arquivo" + +#: \controllers\filemanager_controller.php:226 +msgid "File created successfully." +msgstr "Arquivo criado com sucesso." + +#: \controllers\languages_controller.php:31 +#: \views\elements\admin\navigation.ctp:68 +msgid "Languages" +msgstr "Idiomas" + +#: \controllers\languages_controller.php:39 +msgid "Add Language" +msgstr "Incluir Idioma" + +#: \controllers\languages_controller.php:44;61 +msgid "The Language has been saved" +msgstr "O Idioma foi salvo" + +#: \controllers\languages_controller.php:47;64 +msgid "The Language could not be saved. Please, try again." +msgstr "O Idioma não pode ser salvo. Tente novamente." + +#: \controllers\languages_controller.php:53 +msgid "Edit Language" +msgstr "Editar Idioma" + +#: \controllers\languages_controller.php:56 +#: \plugins\translate\controllers\translate_controller.php:104 +msgid "Invalid Language" +msgstr "Idioma Inválido" + +#: \controllers\languages_controller.php:74 +msgid "Invalid id for Language" +msgstr "ID Inválido do Idioma" + +#: \controllers\languages_controller.php:78 +msgid "Language deleted" +msgstr "Idioma excluído" + +#: \controllers\languages_controller.php:109 +msgid "Select a language" +msgstr "Selecione o idioma" + +#: \controllers\links_controller.php:54 +msgid "Links" +msgstr "Links" + +#: \controllers\links_controller.php:76 +msgid "Add Link" +msgstr "Incluir Link" + +#: \controllers\links_controller.php:82;108 +msgid "The Link has been saved" +msgstr "O Link foi salvo" + +#: \controllers\links_controller.php:85;111 +msgid "The Link could not be saved. Please, try again." +msgstr "O Link não pode ser salvo. Tente novamente." + +#: \controllers\links_controller.php:99 +msgid "Edit Link" +msgstr "Editar Link" + +#: \controllers\links_controller.php:102 +msgid "Invalid Link" +msgstr "Link Inválido" + +#: \controllers\links_controller.php:131 +msgid "Invalid id for Link" +msgstr "ID Inválido do Link" + +#: \controllers\links_controller.php:135 +msgid "Link deleted" +msgstr "Link excluído" + +#: \controllers\links_controller.php:176 +msgid "Links deleted." +msgstr "Links excluídos." + +#: \controllers\links_controller.php:179 +msgid "Links published" +msgstr "Links publicados" + +#: \controllers\links_controller.php:182 +msgid "Links unpublished" +msgstr "Links não publicados" + +#: \controllers\menus_controller.php:31 +#: \views\elements\admin\navigation.ctp:14;16 +msgid "Menus" +msgstr "Menus" + +#: \controllers\menus_controller.php:39 +#: \views\elements\admin\navigation.ctp:17 +msgid "Add Menu" +msgstr "Incluir Menu" + +#: \controllers\menus_controller.php:44;61 +msgid "The Menu has been saved" +msgstr "O Menu foi salvo" + +#: \controllers\menus_controller.php:47;64 +msgid "The Menu could not be saved. Please, try again." +msgstr "O Menu não pode ser salvo. Tente novamente." + +#: \controllers\menus_controller.php:53 +msgid "Edit Menu" +msgstr "Editar Menu" + +#: \controllers\menus_controller.php:56 +msgid "Invalid Menu" +msgstr "Menu Inválido" + +#: \controllers\menus_controller.php:74 +msgid "Invalid id for Menu" +msgstr "ID Inválido do Menu" + +#: \controllers\menus_controller.php:78 +msgid "Menu deleted" +msgstr "Menu excluído" + +#: \controllers\messages_controller.php:31 +#: \views\elements\admin\navigation.ctp:38 +msgid "Messages" +msgstr "Mensagens" + +#: \controllers\messages_controller.php:50 +#: \views\messages\admin_index.ctp:7 +msgid "Read" +msgstr "Lida" + +#: \controllers\messages_controller.php:52 +#: \views\messages\admin_index.ctp:6 +msgid "Unread" +msgstr "Não lida" + +#: \controllers\messages_controller.php:60 +msgid "Edit Message" +msgstr "Editar Mensagem" + +#: \controllers\messages_controller.php:63 +msgid "Invalid Message" +msgstr "Mensagem Inválida" + +#: \controllers\messages_controller.php:68 +msgid "The Message has been saved" +msgstr "A Mensagem foi salva" + +#: \controllers\messages_controller.php:71 +msgid "The Message could not be saved. Please, try again." +msgstr "A Mensagem não pode ser salva. Tente novamente." + +#: \controllers\messages_controller.php:81 +msgid "Invalid id for Message" +msgstr "ID Inválido da Mensagem" + +#: \controllers\messages_controller.php:85 +msgid "Message deleted" +msgstr "Mensagem excluída" + +#: \controllers\messages_controller.php:106 +msgid "Messages deleted." +msgstr "Mensagens excluídas." + +#: \controllers\messages_controller.php:109 +msgid "Messages marked as read" +msgstr "Mensagens marcadas como lidas" + +#: \controllers\messages_controller.php:112 +msgid "Messages marked as unread" +msgstr "Mensagens marcadas como não lidas" + +#: \controllers\nodes_controller.php:44 +#: \plugins\extensions\views\extensions_locales\admin_edit.ctp:16 +#: \views\elements\admin\navigation.ctp:4 +msgid "Content" +msgstr "Conteúdo" + +#: \controllers\nodes_controller.php:75 +#: \views\elements\admin\navigation.ctp:7 +#: \views\nodes\admin_index.ctp:9 +msgid "Create content" +msgstr "Criar Conteúdo" + +#: \controllers\nodes_controller.php:88;137 +msgid "Content type does not exist." +msgstr "Tipo do conteúdo não exite." + +#: \controllers\nodes_controller.php:92 +msgid "Create content: %s" +msgstr "Criar conteúdo: %s" + +#: \controllers\nodes_controller.php:108;156 +msgid "%s has been saved" +msgstr "%s foi salvo" + +#: \controllers\nodes_controller.php:111;159 +msgid "%s could not be saved. Please, try again." +msgstr "%s não pode ser salvo. Tente novamente." + +#: \controllers\nodes_controller.php:128;424;436 +msgid "Invalid content" +msgstr "Conteúdo inválido" + +#: \controllers\nodes_controller.php:141 +msgid "Edit content: %s" +msgstr "Editar conteúdo: %s" + +#: \controllers\nodes_controller.php:212 +msgid "Paths updated." +msgstr "Caminhos atualizados." + +#: \controllers\nodes_controller.php:218 +msgid "Invalid id for Node" +msgstr "ID Inválido do Nó" + +#: \controllers\nodes_controller.php:222 +msgid "Node deleted" +msgstr "Nó excluído" + +#: \controllers\nodes_controller.php:256 +msgid "Nodes deleted." +msgstr "Nós excluídos." + +#: \controllers\nodes_controller.php:259 +msgid "Nodes published" +msgstr "Nós publicados" + +#: \controllers\nodes_controller.php:262 +msgid "Nodes unpublished" +msgstr "Nós não publicados" + +#: \controllers\nodes_controller.php:265 +msgid "Nodes promoted" +msgstr "Nós publicados" + +#: \controllers\nodes_controller.php:268 +msgid "Nodes unpromoted" +msgstr "Nós despublicados" + +#: \controllers\nodes_controller.php:293;329;358 +msgid "Invalid content type." +msgstr "Tipo de conteúdo inválido." + +#: \controllers\nodes_controller.php:308 +msgid "Invalid Term." +msgstr "Termo Inválido." + +#: \controllers\nodes_controller.php:342 +msgid "Nodes" +msgstr "Nós" + +#: \controllers\nodes_controller.php:404 +msgid "Search Results: %s" +msgstr "Resultado da Busca: %s" + +#: \controllers\regions_controller.php:31 +msgid "Region" +msgstr "Região" + +#: \controllers\regions_controller.php:39 +msgid "Add Region" +msgstr "Incluir Região" + +#: \controllers\regions_controller.php:44;61 +msgid "The Region has been saved" +msgstr "A Região foi salva" + +#: \controllers\regions_controller.php:47;64 +msgid "The Region could not be saved. Please, try again." +msgstr "A Região não pode ser salva. Tente novamente." + +#: \controllers\regions_controller.php:53 +msgid "Edit Region" +msgstr "Editar Região." + +#: \controllers\regions_controller.php:56 +msgid "Invalid Region" +msgstr "Região Inválida" + +#: \controllers\regions_controller.php:74 +msgid "Invalid id for Region" +msgstr "ID Inválido da Região" + +#: \controllers\regions_controller.php:78 +msgid "Region deleted" +msgstr "Região excluída" + +#: \controllers\roles_controller.php:31 +#: \views\elements\admin\navigation.ctp:45 +msgid "Roles" +msgstr "Regras" + +#: \controllers\roles_controller.php:39 +msgid "Add Role" +msgstr "Incluir Regra" + +#: \controllers\roles_controller.php:44;61 +msgid "The Role has been saved" +msgstr "A Regra foi salva" + +#: \controllers\roles_controller.php:47;64 +msgid "The Role could not be saved. Please, try again." +msgstr "A Regra não pode ser salva. Tente novamente." + +#: \controllers\roles_controller.php:53 +msgid "Edit Role" +msgstr "Editar Regra" + +#: \controllers\roles_controller.php:56 +msgid "Invalid Role" +msgstr "Regra Inválida" + +#: \controllers\roles_controller.php:74 +msgid "Invalid id for Role" +msgstr "ID Inválido da Regra" + +#: \controllers\roles_controller.php:78 +msgid "Role deleted" +msgstr "Regra excluída" + +#: \controllers\settings_controller.php:38 +msgid "Dashboard" +msgstr "Dashboard" + +#: \controllers\settings_controller.php:54 +msgid "Invalid Setting." +msgstr "Configuração Inválida." + +#: \controllers\settings_controller.php:66;83 +msgid "The Setting has been saved" +msgstr "A Configuração foi salva" + +#: \controllers\settings_controller.php:69;86 +msgid "The Setting could not be saved. Please, try again." +msgstr "A Configuração não pode ser salva. Tente novamente." + +#: \controllers\settings_controller.php:78 +msgid "Invalid Setting" +msgstr "Configuração Inválida" + +#: \controllers\settings_controller.php:96 +msgid "Invalid id for Setting" +msgstr "ID Inválido da Configuração" + +#: \controllers\settings_controller.php:100 +msgid "Setting deleted" +msgstr "Configuração excluída" + +#: \controllers\settings_controller.php:106 +msgid "Settings: %s" +msgstr "Configurações: %s" + +#: \controllers\settings_controller.php:109 +msgid "Settings updated successfully" +msgstr "Configurações atualizadas com sucesso" + +#: \controllers\settings_controller.php:123 +msgid "Invalid Setting key" +msgstr "Chave de Configuração Inválida" + +#: \controllers\terms_controller.php:40 +#: \views\nodes\admin_add.ctp:15 +#: \views\nodes\admin_edit.ctp:16 +msgid "Terms" +msgstr "Termos" + +#: \controllers\terms_controller.php:56 +msgid "Add Term" +msgstr "Incluir Termo" + +#: \controllers\terms_controller.php:61;85 +msgid "The Term has been saved" +msgstr "O Termo foi salvo" + +#: \controllers\terms_controller.php:64;88 +msgid "The Term could not be saved. Please, try again." +msgstr "O Termo não pode ser salvo. Tente novamente." + +#: \controllers\terms_controller.php:77 +msgid "Edit Term" +msgstr "Editar Termo" + +#: \controllers\terms_controller.php:80 +msgid "Invalid Term" +msgstr "Termo Inválido" + +#: \controllers\terms_controller.php:101 +msgid "Invalid id for Term" +msgstr "ID Inválido do Termo" + +#: \controllers\terms_controller.php:105 +msgid "Term deleted" +msgstr "Termo excluído" + +#: \controllers\terms_controller.php:146 +msgid "Terms deleted." +msgstr "Termos excluídos." + +#: \controllers\terms_controller.php:149 +msgid "Terms published" +msgstr "Termos publicados" + +#: \controllers\terms_controller.php:152 +msgid "Terms unpublished" +msgstr "Termos não publicados" + +#: \controllers\types_controller.php:31 +#: \views\types\admin_add.ctp:7 +#: \views\types\admin_edit.ctp:8 +msgid "Type" +msgstr "Tipo" + +#: \controllers\types_controller.php:39 +msgid "Add Type" +msgstr "Incluir Tipo" + +#: \controllers\types_controller.php:44;64 +msgid "The Type has been saved" +msgstr "O Tipo foi salvo" + +#: \controllers\types_controller.php:47;67 +msgid "The Type could not be saved. Please, try again." +msgstr "O Tipo não pode ser salvo. Tente novamente." + +#: \controllers\types_controller.php:56 +msgid "Edit Type" +msgstr "Editar Tipo" + +#: \controllers\types_controller.php:59 +msgid "Invalid Type" +msgstr "Tipo Inválido" + +#: \controllers\types_controller.php:80 +msgid "Invalid id for Type" +msgstr "ID Inválido do Tipo" + +#: \controllers\types_controller.php:84 +msgid "Type deleted" +msgstr "Tipo excluído" + +#: \controllers\users_controller.php:35;119 +#: \views\elements\admin\navigation.ctp:42;44 +#: \views\users\admin_index.ctp:2 +msgid "Users" +msgstr "Usuários" + +#: \controllers\users_controller.php:46;66 +msgid "The User has been saved" +msgstr "O Usuário foi salvo" + +#: \controllers\users_controller.php:49;69;142 +msgid "The User could not be saved. Please, try again." +msgstr "O Usuário não pode ser salvo. Tente novamente." + +#: \controllers\users_controller.php:61;81 +msgid "Invalid User" +msgstr "Usuário Inválido" + +#: \controllers\users_controller.php:86 +msgid "Password has been reset." +msgstr "A senha foi alterada." + +#: \controllers\users_controller.php:89 +msgid "Password could not be reset. Please, try again." +msgstr "A senha não pode ser alterada. Tente novamente." + +#: \controllers\users_controller.php:99 +msgid "Invalid id for User" +msgstr "ID Inválido do Usuário" + +#: \controllers\users_controller.php:103 +msgid "User deleted" +msgstr "Usuário excluído" + +#: \controllers\users_controller.php:109 +msgid "Admin Login" +msgstr "Login do Administrador" + +#: \controllers\users_controller.php:114;239 +msgid "Log out successful." +msgstr "Logout com sucesso." + +#: \controllers\users_controller.php:123 +msgid "Register" +msgstr "Registrar" + +#: \controllers\users_controller.php:139 +msgid "You have successfully registered an account. An email has been sent with further instructions." +msgstr "Você foi registrado com sucesso. Um e-mail foi enviado com novas intruções." + +#: \controllers\users_controller.php:161 +msgid "Account activated successfully." +msgstr "Conta ativada com sucesso." + +#: \controllers\users_controller.php:172 +msgid "Forgot Password" +msgstr "Esqueci a senha" + +#: \controllers\users_controller.php:177 +msgid "Invalid username." +msgstr "Usuário inválido." + +#: \controllers\users_controller.php:189;201 +msgid "Reset Password" +msgstr "Alterar Senha" + +#: \controllers\users_controller.php:192 +msgid "An email has been sent with instructions for resetting your password." +msgstr "Um email foi enviado com as instruções de como alterar sua senha." + +#: \controllers\users_controller.php:195;227 +msgid "An error occurred. Please try again." +msgstr "Um erro aconteceu. Tente novamente." + +#: \controllers\users_controller.php:224 +msgid "Your password has been reset successfully." +msgstr "Sua senha foi alterada com sucesso." + +#: \controllers\users_controller.php:235 +msgid "Log in" +msgstr "Log in" + +#: \controllers\users_controller.php:246 +msgid "Invalid User." +msgstr "Usuário Inválido." + +#: \controllers\vocabularies_controller.php:31 +#: \views\vocabularies\admin_add.ctp:10 +#: \views\vocabularies\admin_edit.ctp:8 +msgid "Vocabulary" +msgstr "Vocabulário" + +#: \controllers\vocabularies_controller.php:39 +msgid "Add Vocabulary" +msgstr "Incluir Vocabulário" + +#: \controllers\vocabularies_controller.php:44;64 +msgid "The Vocabulary has been saved" +msgstr "O Vocabulário foi salvo" + +#: \controllers\vocabularies_controller.php:47;67 +msgid "The Vocabulary could not be saved. Please, try again." +msgstr "O Vocabulário não pode ser salvo. Tente novamente." + +#: \controllers\vocabularies_controller.php:56 +msgid "Edit Vocabulary" +msgstr "Editar Vocabulário" + +#: \controllers\vocabularies_controller.php:59 +msgid "Invalid Vocabulary" +msgstr "Vocabulário Inválido" + +#: \controllers\vocabularies_controller.php:80 +msgid "Invalid id for Vocabulary" +msgstr "ID Inválido do Vocabulário" + +#: \controllers\vocabularies_controller.php:84 +msgid "Vocabulary deleted" +msgstr "Vocabulário excluído" + +#: \models\behaviors\croogo_translate.php:73 +msgid "Datasource %s for CroogoTranslateBehavior of model %s is not connected" +msgstr "Datasource %s para CroogoTranslateBehavior do model %s não está conectado" + +#: \plugins\acl\controllers\acl_acos_controller.php:19 +#: \plugins\acl\views\acl_acos\admin_index.ctp:2 +msgid "Acos" +msgstr "Acos" + +#: \plugins\acl\controllers\acl_acos_controller.php:26 +#: \plugins\acl\views\acl_acos\admin_add.ctp:2 +#: \plugins\acl\views\acl_acos\admin_edit.ctp:2 +msgid "Add Aco" +msgstr "Incluir Aco" + +#: \plugins\acl\controllers\acl_acos_controller.php:31;48 +msgid "The Aco has been saved" +msgstr "O Aco foi salvo" + +#: \plugins\acl\controllers\acl_acos_controller.php:34;51 +msgid "The Aco could not be saved. Please, try again." +msgstr "O Aco não pode ser salvo. Tente novamente." + +#: \plugins\acl\controllers\acl_acos_controller.php:40 +msgid "Edit Aco" +msgstr "Editar Aco" + +#: \plugins\acl\controllers\acl_acos_controller.php:43 +msgid "Invalid Aco" +msgstr "Aco inválido" + +#: \plugins\acl\controllers\acl_acos_controller.php:61 +msgid "Invalid id for Aco" +msgstr "ID inválido do Aco" + +#: \plugins\acl\controllers\acl_acos_controller.php:65 +msgid "Aco deleted" +msgstr "Aco excluído" + +#: \plugins\acl\controllers\acl_actions_controller.php:20 +#: \plugins\acl\views\acl_acos\admin_index.ctp:18 +#: \plugins\acl\views\acl_actions\admin_index.ctp:20 +#: \plugins\acl\views\acl_aros\admin_index.ctp:18 +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:20 +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:16 +#: \plugins\extensions\views\extensions_plugins\admin_index.ctp:15 +#: \plugins\translate\views\translate\admin_index.ctp:28 +#: \views\attachments\admin_browse.ctp:19 +#: \views\attachments\admin_index.ctp:17 +#: \views\blocks\admin_index.ctp:20 +#: \views\comments\admin_index.ctp:31 +#: \views\contacts\admin_index.ctp:17 +#: \views\filemanager\admin_browse.ctp:29 +#: \views\languages\admin_index.ctp:18 +#: \views\links\admin_index.ctp:26 +#: \views\menus\admin_index.ctp:17 +#: \views\messages\admin_index.ctp:30 +#: \views\nodes\admin_index.ctp:36 +#: \views\nodes\admin_translations.ctp:28 +#: \views\regions\admin_index.ctp:16 +#: \views\roles\admin_index.ctp:16 +#: \views\settings\admin_index.ctp:17 +#: \views\terms\admin_index.ctp:25 +#: \views\types\admin_index.ctp:17 +#: \views\users\admin_index.ctp:18 +#: \views\vocabularies\admin_index.ctp:16 +msgid "Actions" +msgstr "Ações" + +#: \plugins\acl\controllers\acl_actions_controller.php:32 +msgid "Add Action" +msgstr "Incluir Ação" + +#: \plugins\acl\controllers\acl_actions_controller.php:72 +msgid "Edit Action" +msgstr "Editar Ações" + +#: \plugins\acl\controllers\acl_actions_controller.php:75 +msgid "Invalid Action" +msgstr "Ação Inválida" + +#: \plugins\acl\controllers\acl_actions_controller.php:80 +msgid "The Action has been saved" +msgstr "A Ação foi salva" + +#: \plugins\acl\controllers\acl_actions_controller.php:83 +msgid "The Action could not be saved. Please, try again." +msgstr "A Ação não pode ser salva. Tente novamente." + +#: \plugins\acl\controllers\acl_actions_controller.php:110;121 +msgid "Invalid id for Action" +msgstr "ID Inválido da Ação" + +#: \plugins\acl\controllers\acl_actions_controller.php:114 +msgid "Action deleted" +msgstr "Ação excluída" + +#: \plugins\acl\controllers\acl_actions_controller.php:126 +msgid "Action moved up" +msgstr "Ação movida para cima" + +#: \plugins\acl\controllers\acl_actions_controller.php:131 +msgid "Action moved down" +msgstr "Ação movida para baixo" + +#: \plugins\acl\controllers\acl_aros_controller.php:19 +#: \plugins\acl\views\acl_aros\admin_index.ctp:2 +msgid "Aros" +msgstr "Aros" + +#: \plugins\acl\controllers\acl_aros_controller.php:26 +#: \plugins\acl\views\acl_aros\admin_add.ctp:2 +#: \plugins\acl\views\acl_aros\admin_edit.ctp:2 +msgid "Add Aro" +msgstr "Incluir Aro" + +#: \plugins\acl\controllers\acl_aros_controller.php:31;48 +msgid "The Aro has been saved" +msgstr "O Aro foi salvo" + +#: \plugins\acl\controllers\acl_aros_controller.php:34;51 +msgid "The Aro could not be saved. Please, try again." +msgstr "O Aro não pode ser salvo. Tente novamente." + +#: \plugins\acl\controllers\acl_aros_controller.php:40 +msgid "Edit Aro" +msgstr "Editar Aro" + +#: \plugins\acl\controllers\acl_aros_controller.php:43 +msgid "Invalid Aro" +msgstr "Aro inválido" + +#: \plugins\acl\controllers\acl_aros_controller.php:61 +msgid "Invalid id for Aro" +msgstr "ID inválido do Aro" + +#: \plugins\acl\controllers\acl_aros_controller.php:65 +msgid "Aro deleted" +msgstr "Aro excluído" + +#: \plugins\acl\controllers\acl_permissions_controller.php:19 +#: \views\elements\admin\navigation.ctp:46 +msgid "Permissions" +msgstr "Permissões" + +#: \plugins\acl\views\acl_acos\admin_index.ctp:6 +msgid "New Aco" +msgstr "Novo Aco" + +#: \plugins\acl\views\acl_acos\admin_index.ctp:24 +#: \plugins\acl\views\acl_actions\admin_index.ctp:41 +#: \plugins\acl\views\acl_aros\admin_index.ctp:24 +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:61 +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:24 +#: \plugins\translate\views\translate\admin_index.ctp:34 +#: \views\attachments\admin_browse.ctp:25 +#: \views\attachments\admin_index.ctp:23 +#: \views\blocks\admin_index.ctp:28 +#: \views\comments\admin_index.ctp:37 +#: \views\contacts\admin_index.ctp:25 +#: \views\filemanager\admin_browse.ctp:51 +#: \views\languages\admin_index.ctp:26 +#: \views\links\admin_index.ctp:34 +#: \views\menus\admin_index.ctp:24 +#: \views\messages\admin_index.ctp:36 +#: \views\nodes\admin_index.ctp:42 +#: \views\nodes\admin_translations.ctp:34 +#: \views\regions\admin_index.ctp:22 +#: \views\roles\admin_index.ctp:22 +#: \views\settings\admin_index.ctp:25 +#: \views\terms\admin_index.ctp:33 +#: \views\types\admin_index.ctp:23 +#: \views\users\admin_index.ctp:24 +#: \views\vocabularies\admin_index.ctp:23 +msgid "Edit" +msgstr "Editar" + +#: \plugins\acl\views\acl_acos\admin_index.ctp:25 +#: \plugins\acl\views\acl_actions\admin_index.ctp:42 +#: \plugins\acl\views\acl_aros\admin_index.ctp:25 +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:25 +#: \plugins\extensions\views\extensions_plugins\admin_index.ctp:24 +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:45 +#: \plugins\translate\views\translate\admin_index.ctp:40 +#: \views\attachments\admin_browse.ctp:26 +#: \views\attachments\admin_index.ctp:24 +#: \views\blocks\admin_index.ctp:30;54 +#: \views\comments\admin_index.ctp:38;70 +#: \views\contacts\admin_index.ctp:26 +#: \views\filemanager\admin_browse.ctp:38;53 +#: \views\languages\admin_index.ctp:27 +#: \views\links\admin_index.ctp:36;58 +#: \views\menus\admin_index.ctp:25 +#: \views\messages\admin_index.ctp:37;62 +#: \views\nodes\admin_index.ctp:44;79 +#: \views\nodes\admin_translations.ctp:35 +#: \views\regions\admin_index.ctp:23 +#: \views\roles\admin_index.ctp:23 +#: \views\settings\admin_index.ctp:26 +#: \views\terms\admin_index.ctp:34;55 +#: \views\types\admin_index.ctp:24 +#: \views\users\admin_index.ctp:25 +#: \views\vocabularies\admin_index.ctp:24 +msgid "Delete" +msgstr "Excluir" + +#: \plugins\acl\views\acl_acos\admin_index.ctp:25 +#: \plugins\acl\views\acl_actions\admin_index.ctp:42 +#: \plugins\acl\views\acl_aros\admin_index.ctp:25 +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:25 +#: \plugins\extensions\views\extensions_plugins\admin_index.ctp:24 +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:45 +#: \plugins\translate\views\translate\admin_index.ctp:45 +#: \views\attachments\admin_browse.ctp:26 +#: \views\attachments\admin_index.ctp:24 +#: \views\blocks\admin_index.ctp:30 +#: \views\comments\admin_index.ctp:38 +#: \views\contacts\admin_index.ctp:26 +#: \views\languages\admin_index.ctp:27 +#: \views\links\admin_index.ctp:36 +#: \views\menus\admin_index.ctp:25 +#: \views\messages\admin_index.ctp:37 +#: \views\nodes\admin_index.ctp:44 +#: \views\nodes\admin_translations.ctp:35 +#: \views\regions\admin_index.ctp:23 +#: \views\roles\admin_index.ctp:23 +#: \views\settings\admin_index.ctp:26 +#: \views\terms\admin_index.ctp:34 +#: \views\types\admin_index.ctp:24 +#: \views\users\admin_index.ctp:25 +#: \views\vocabularies\admin_index.ctp:24 +msgid "Are you sure?" +msgstr "Você tem certeza?" + +#: \plugins\acl\views\acl_acos\admin_index.ctp:44 +#: \plugins\acl\views\acl_aros\admin_index.ctp:44 +#: \views\attachments\admin_browse.ctp:56 +#: \views\attachments\admin_index.ctp:50 +#: \views\blocks\admin_index.ctp:64 +#: \views\comments\admin_index.ctp:80 +#: \views\contacts\admin_index.ctp:49 +#: \views\languages\admin_index.ctp:46 +#: \views\menus\admin_index.ctp:43 +#: \views\messages\admin_index.ctp:72 +#: \views\nodes\admin_index.ctp:89 +#: \views\regions\admin_index.ctp:40 +#: \views\roles\admin_index.ctp:40 +#: \views\settings\admin_index.ctp:53 +#: \views\types\admin_index.ctp:42 +#: \views\users\admin_index.ctp:44 +#: \views\vocabularies\admin_index.ctp:41 +msgid "Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%" +msgstr "Página %page% de %pages%, mostrando %current% registros de %count%, começando no %start% e termiando no %end%" + +#: \plugins\acl\views\acl_actions\admin_add.ctp:9 +#: \plugins\acl\views\acl_actions\admin_edit.ctp:11 +msgid "Choose none if the Aco is a controller." +msgstr "Escolha nada se o Aco é um controller." + +#: \plugins\acl\views\acl_actions\admin_index.ctp:10 +msgid "New Action" +msgstr "Nova Ação" + +#: \plugins\acl\views\acl_actions\admin_index.ctp:11 +#: \plugins\acl\views\acl_permissions\admin_index.ctp:9 +msgid "Generate Actions" +msgstr "Gerar Ações" + +#: \plugins\acl\views\acl_actions\admin_index.ctp:18 +#: \plugins\acl\views\acl_permissions\admin_index.ctp:20 +#: \views\links\admin_index.ctp:23 +#: \views\settings\admin_view.ctp:4 +#: \views\terms\admin_index.ctp:23 +msgid "Id" +msgstr "Id" + +#: \plugins\acl\views\acl_actions\admin_index.ctp:19 +#: \plugins\acl\views\acl_permissions\admin_index.ctp:21 +msgid "Alias" +msgstr "Apelido" + +#: \plugins\acl\views\acl_actions\admin_index.ctp:43 +#: \views\blocks\admin_index.ctp:26 +#: \views\languages\admin_index.ctp:24 +#: \views\links\admin_index.ctp:32 +#: \views\settings\admin_index.ctp:23 +#: \views\terms\admin_index.ctp:31 +msgid "Move up" +msgstr "Mover para cima" + +#: \plugins\acl\views\acl_actions\admin_index.ctp:44 +#: \views\blocks\admin_index.ctp:27 +#: \views\languages\admin_index.ctp:25 +#: \views\links\admin_index.ctp:33 +#: \views\settings\admin_index.ctp:24 +#: \views\terms\admin_index.ctp:32 +msgid "Move down" +msgstr "Mover para baixo" + +#: \plugins\acl\views\acl_aros\admin_index.ctp:6 +msgid "New Aro" +msgstr "Novo Aro" + +#: \plugins\acl\views\acl_permissions\admin_index.ctp:10 +msgid "Edit Actions" +msgstr "Editar Ações" + +#: \plugins\acl\views\acl_permissions\admin_toggle.ctp:9 +msgid "error" +msgstr "erro" + +#: \plugins\debug_kit\controllers\components\toolbar.php:85 +msgid "Component initialization and startup" +msgstr "Inicialização e startup do componente" + +#: \plugins\debug_kit\controllers\components\toolbar.php:123 +msgid "Controller Action" +msgstr "Ação do Controller" + +#: \plugins\debug_kit\controllers\components\toolbar.php:150 +msgid "Render Controller Action" +msgstr "Ação de Renderização do Controller" + +#: \plugins\debug_kit\controllers\components\toolbar.php:163 +msgid "Could not load DebugToolbar panel %s" +msgstr "Não pode carregar o painel %s do DebugToolbar" + +#: \plugins\debug_kit\vendors\fire_cake.php:298 +msgid "Headers already sent in %s on line %s. Cannot send log data to FirePHP." +msgstr "O cabeçalho já foi enviado em %s, na linha %s. Não pode enviar o log para o FirePHP." + +#: \plugins\debug_kit\vendors\fire_cake.php:319 +msgid "Incorrect parameter count for FireCake::fb()" +msgstr "Número de parâmetros incorretos para o FireCake::fb()" + +#: \plugins\debug_kit\vendors\fire_cake.php:392 +msgid "Maximum number (99,999) of messages reached!" +msgstr "Número máximo (99.999) de mensagens alcançado!" + +#: \plugins\debug_kit\views\debug.php:57 +msgid "Rendering %s" +msgstr "Renderizando %s" + +#: \plugins\debug_kit\views\debug.php:79 +msgid "Rendering View" +msgstr "Renderizando View" + +#: \plugins\debug_kit\views\elements\debug_toolbar.ctp:32 +msgid "There are no active panels. You must enable a panel to see its output." +msgstr "Não há paineis ativos. Você deve habilitar o painel para ver a saída." + +#: \plugins\debug_kit\views\elements\log_panel.ctp:29 +msgid "Logs" +msgstr "Logs" + +#: \plugins\debug_kit\views\elements\log_panel.ctp:36 +msgid "Time" +msgstr "Tempo" + +#: \plugins\debug_kit\views\elements\log_panel.ctp:36 +#: \plugins\debug_kit\views\elements\timer_panel.ctp:42 +#: \views\contacts\admin_add.ctp:9 +#: \views\contacts\admin_edit.ctp:9 +#: \views\contacts\view.ctp:20 +msgid "Message" +msgstr "Mensagem" + +#: \plugins\debug_kit\views\elements\log_panel.ctp:45 +msgid "There were no log entries made this request" +msgstr "Não há log nesta requisição" + +#: \plugins\debug_kit\views\elements\memory_panel.ctp:30 +msgid "Memory" +msgstr "Memória" + +#: \plugins\debug_kit\views\elements\memory_panel.ctp:33 +msgid "Current Memory Use" +msgstr "Memória em Uso" + +#: \plugins\debug_kit\views\elements\memory_panel.ctp:40 +msgid "Peak Memory Use" +msgstr "Pico de Memória" + +#: \plugins\debug_kit\views\elements\request_panel.ctp:30 +msgid "Request" +msgstr "Requisição" + +#: \plugins\debug_kit\views\elements\request_panel.ctp:44 +msgid "Current Route" +msgstr "Rota Atual" + +#: \plugins\debug_kit\views\elements\session_panel.ctp:30 +msgid "Session" +msgstr "Sessão" + +#: \plugins\debug_kit\views\elements\sql_log_panel.ctp:30 +msgid "Sql Logs" +msgstr "Sql Logs" + +#: \plugins\debug_kit\views\elements\sql_log_panel.ctp:39 +msgid "No active database connections" +msgstr "Banco de dados não está ativo" + +#: \plugins\debug_kit\views\elements\timer_panel.ctp:31 +msgid "Timers" +msgstr "Tempos" + +#: \plugins\debug_kit\views\elements\timer_panel.ctp:33 +msgid "%s (seconds)" +msgstr "%s (segundos)" + +#: \plugins\debug_kit\views\elements\timer_panel.ctp:34 +msgid "Total Request Time:" +msgstr "Tempo Total da Requisição:" + +#: \plugins\debug_kit\views\elements\timer_panel.ctp:42 +msgid "time in seconds" +msgstr "tempo em segundos" + +#: \plugins\debug_kit\views\elements\variables_panel.ctp:30 +msgid "View Variables" +msgstr "Variáveis da View" + +#: \plugins\example\controllers\example_controller.php:31 +#: \plugins\example\views\elements\admin_menu.ctp:1 +msgid "Example" +msgstr "Exemplo" + +#: \plugins\example\views\elements\admin_menu.ctp:3 +msgid "Example 1" +msgstr "Exemplo 1" + +#: \plugins\example\views\elements\admin_menu.ctp:4 +msgid "Example 2" +msgstr "Exemplo 2" + +#: \plugins\example\views\example\index.ctp:3 +msgid "content here" +msgstr "conteúdo aqui" + +#: \plugins\extensions\controllers\extensions_hooks_controller.php:37 +#: \views\elements\admin\navigation.ctp:55 +msgid "Hooks" +msgstr "Hooks" + +#: \plugins\extensions\controllers\extensions_locales_controller.php:37 +#: \views\elements\admin\navigation.ctp:53 +msgid "Locales" +msgstr "Idiomas" + +#: \plugins\extensions\controllers\extensions_locales_controller.php:48 +msgid "Locale does not exist." +msgstr "Idioma não existe." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:61 +msgid "Could not edit croogo_bootstrap.php file." +msgstr "Não foi possível editar o arquivo crooogo_boostrap.php." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:67 +msgid "Upload a new locale" +msgstr "Enviar um novo idioma." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:93;142 +msgid "Invalid locale." +msgstr "Idioma inválido." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:98 +msgid "Locale already exists." +msgstr "Idioma já existe." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:147 +msgid "The file default.po does not exist." +msgstr "O arquivo default.po não existe." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:157 +msgid "Locale updated successfully" +msgstr "Idioma atualizado com sucesso" + +#: \plugins\extensions\controllers\extensions_locales_controller.php:167 +#: \plugins\translate\controllers\translate_controller.php:89 +msgid "Invalid locale" +msgstr "Idioma inválido" + +#: \plugins\extensions\controllers\extensions_locales_controller.php:173 +msgid "Locale deleted successfully." +msgstr "Idioma excluído com sucesso." + +#: \plugins\extensions\controllers\extensions_locales_controller.php:175 +msgid "Local could not be deleted." +msgstr "Idioma não pode ser excluído." + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:51 +#: \views\elements\admin\navigation.ctp:54 +msgid "Plugins" +msgstr "Plugins" + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:62 +msgid "Upload a new plugin" +msgstr "Enviar um novo plugin" + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:91 +msgid "Invalid plugin." +msgstr "Plugin inválido." + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:96 +msgid "Plugin already exists." +msgstr "O plugin já existe." + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:138 +msgid "Invalid plugin" +msgstr "Plugin inválido" + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:144 +msgid "Plugin deleted successfully." +msgstr "Plugin excluído com sucesso." + +#: \plugins\extensions\controllers\extensions_plugins_controller.php:146 +msgid "Plugin could not be deleted." +msgstr "Plugin não pode ser excluído." + +#: \plugins\extensions\controllers\extensions_themes_controller.php:38 +#: \views\elements\admin\navigation.ctp:52 +msgid "Themes" +msgstr "Temas" + +#: \plugins\extensions\controllers\extensions_themes_controller.php:59 +msgid "Theme activated." +msgstr "Tema ativado." + +#: \plugins\extensions\controllers\extensions_themes_controller.php:65 +msgid "Upload a new theme" +msgstr "Envie um novo tema" + +#: \plugins\extensions\controllers\extensions_themes_controller.php:85;95 +msgid "Invalid XML file" +msgstr "Arquivo XML inválido" + +#: \plugins\extensions\controllers\extensions_themes_controller.php:101 +msgid "Directory with theme alias already exists." +msgstr "O diretório com o nome do tema já existe." + +#: \plugins\extensions\controllers\extensions_themes_controller.php:146 +msgid "Theme Editor" +msgstr "Editor de Tema" + +#: \plugins\extensions\controllers\extensions_themes_controller.php:155 +msgid "Invalid Theme." +msgstr "Tema inválido." + +#: \plugins\extensions\controllers\extensions_themes_controller.php:160 +msgid "Default theme cannot be deleted." +msgstr "O tema padrão não pode ser excluído." + +#: \plugins\extensions\controllers\extensions_themes_controller.php:182 +msgid "Theme deleted successfully." +msgstr "Tema excluído com sucesso." + +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:17 +msgid "Hook" +msgstr "Hook" + +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:18 +msgid "Hook type" +msgstr "Tipo de hook" + +#: \plugins\extensions\views\extensions_hooks\admin_index.ctp:19 +#: \views\links\admin_index.ctp:25 +msgid "Status" +msgstr "Status" + +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:14 +#: \plugins\translate\views\translate\admin_index.ctp:27 +#: \views\nodes\admin_translations.ctp:27 +msgid "Locale" +msgstr "Idioma" + +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:15 +msgid "Default" +msgstr "Padrão" + +#: \plugins\extensions\views\extensions_locales\admin_index.ctp:23 +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:44 +msgid "Activate" +msgstr "Ativar" + +#: \plugins\extensions\views\extensions_plugins\admin_index.ctp:14 +msgid "Plugin" +msgstr "Plugin" + +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:7 +msgid "Editor" +msgstr "Editor" + +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:12 +msgid "Current Theme" +msgstr "Tema Atual" + +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:22;40 +#: \views\comments\rss\index.ctp:16 +#: \views\elements\node_info.ctp:9 +msgid "by" +msgstr "por" + +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:24;42 +msgid "Regions supported: " +msgstr "Regiões suportadas:" + +#: \plugins\extensions\views\extensions_themes\admin_index.ctp:29 +msgid "Available Themes" +msgstr "Temas Disponíveis" + +#: \plugins\install\controllers\install_controller.php:56 +msgid "Installation: Welcome" +msgstr "Instalação: Bem Vindo" + +#: \plugins\install\controllers\install_controller.php:64 +msgid "Step 1: Database" +msgstr "Passo 1: Banco de dados" + +#: \plugins\install\controllers\install_controller.php:85 +msgid "Could not write database.php file." +msgstr "Não foi possível escrever o arquivo database.php." + +#: \plugins\install\controllers\install_controller.php:88;108 +msgid "Could not connect to database." +msgstr "Não foi possível conectar com o banco de dados." + +#: \plugins\install\controllers\install_controller.php:98 +msgid "Step 2: Run SQL" +msgstr "Passo 2: Excecutar SQL" + +#: \plugins\install\controllers\install_controller.php:125 +msgid "Installation completed successfully" +msgstr "Instalação completada com sucesso" + +#: \plugins\install\controllers\install_controller.php:131 +msgid "Installataion files deleted successfully." +msgstr "Arquivos da instalação excluído com sucesso." + +#: \plugins\install\controllers\install_controller.php:134 +msgid "Could not delete installation files." +msgstr "Não foi possível excluir os arquivos de instalação." + +#: \plugins\install\views\install\data.ctp:5 +msgid "Click here to build your database" +msgstr "Clique aqui para importar sua base de dados" + +#: \plugins\install\views\install\finish.ctp:21 +msgid "Click here to delete installation files" +msgstr "Clique aqui para excluir os arquivos da instalação" + +#: \plugins\install\views\layouts\install.ctp:5 +#: \views\layouts\admin.ctp:5 +#: \views\layouts\admin_full.ctp:5 +#: \views\layouts\admin_login.ctp:5 +msgid "Croogo" +msgstr "Croogo" + +#: \plugins\install\views\layouts\install.ctp:21 +msgid "Install Croogo" +msgstr "Instalar Croogo" + +#: \plugins\translate\controllers\translate_controller.php:35;80 +msgid "Invalid ID." +msgstr "ID Inválido." + +#: \plugins\translate\controllers\translate_controller.php:44;159 +msgid "Invalid model." +msgstr "Model inválida." + +#: \plugins\translate\controllers\translate_controller.php:56;116;171 +msgid "Invalid record." +msgstr "Registro inválido." + +#: \plugins\translate\controllers\translate_controller.php:63 +msgid "Translations: " +msgstr "Traduções:" + +#: \plugins\translate\controllers\translate_controller.php:124 +msgid "Translate content:" +msgstr "Conteúdo traduzido:" + +#: \plugins\translate\controllers\translate_controller.php:132 +msgid "Record has been translated" +msgstr "Registro foi traduzido" + +#: \plugins\translate\controllers\translate_controller.php:139 +msgid "Record could not be translated. Please, try again." +msgstr "Registro não pode ser traduzido. Tente novamente." + +#: \plugins\translate\controllers\translate_controller.php:150 +msgid "Invalid Locale or ID" +msgstr "Idioma ou ID inválido" + +#: \plugins\translate\controllers\translate_controller.php:186 +msgid "Translation for the locale deleted successfully." +msgstr "Tradução para o idioma excluído com sucesso." + +#: \plugins\translate\controllers\translate_controller.php:188 +msgid "Translation for the locale could not be deleted." +msgstr "Tradução para o idioma não pode ser excluído." + +#: \plugins\translate\views\translate\admin_edit.ctp:21 +msgid "Record" +msgstr "Registro" + +#: \plugins\translate\views\translate\admin_index.ctp:8 +#: \views\nodes\admin_translations.ctp:8 +msgid "Translate in a new language" +msgstr "Tradução no novo idioma" + +#: \plugins\translate\views\translate\admin_index.ctp:26 +#: \views\links\admin_index.ctp:24 +#: \views\nodes\admin_translations.ctp:26 +#: \views\terms\admin_index.ctp:24 +msgid "Title" +msgstr "Título" + +#: \plugins\translate\views\translate\admin_index.ctp:62 +#: \views\nodes\admin_translations.ctp:52 +msgid "No translations available." +msgstr "Nenhuma tradução disponível." + +#: \views\attachments\admin_browse.ctp:7 +#: \views\attachments\admin_index.ctp:6 +msgid "New Attachment" +msgstr "Novo Anexo" + +#: \views\attachments\admin_browse.ctp:18 +#: \views\attachments\admin_index.ctp:16 +msgid "URL" +msgstr "URL" + +#: \views\attachments\admin_browse.ctp:37 +msgid "Insert" +msgstr "Inserir" + +#: \views\attachments\admin_edit.ctp:9 +msgid "Attachment" +msgstr "Anexo" + +#: \views\attachments\admin_edit.ctp:10 +msgid "Info" +msgstr "Info" + +#: \views\attachments\admin_edit.ctp:29 +msgid "Caption" +msgstr "Legenda" + +#: \views\attachments\admin_edit.ctp:36 +msgid "File URL" +msgstr "URL do arquivo" + +#: \views\attachments\admin_edit.ctp:37 +msgid "Mime Type" +msgstr "Tipo do arquivo" + +#: \views\blocks\admin_add.ctp:7 +#: \views\blocks\admin_edit.ctp:7 +msgid "Block" +msgstr "Bloco" + +#: \views\blocks\admin_add.ctp:8 +#: \views\blocks\admin_edit.ctp:8 +#: \views\links\admin_add.ctp:8 +#: \views\links\admin_edit.ctp:8 +#: \views\nodes\admin_add.ctp:18 +#: \views\nodes\admin_edit.ctp:19 +msgid "Access" +msgstr "Acesso" + +#: \views\blocks\admin_add.ctp:9 +#: \views\blocks\admin_edit.ctp:9 +msgid "Visibilities" +msgstr "Visibilidades" + +#: \views\blocks\admin_add.ctp:16 +#: \views\blocks\admin_edit.ctp:17 +msgid "unique name for your block" +msgstr "nome único para seu bloco" + +#: \views\blocks\admin_add.ctp:17 +#: \views\blocks\admin_edit.ctp:18 +msgid "if you are not sure, choose 'none'" +msgstr "se você não tem certeza, escolha 'none'" + +#: \views\blocks\admin_add.ctp:35 +#: \views\blocks\admin_edit.ctp:36 +msgid "Enter one URL per line. Leave blank if you want this Block to appear in all pages." +msgstr "Entre uma URL por linha. Deixe em branca se você não quer que o Bloco apareça em todas as páginas." + +#: \views\blocks\admin_index.ctp:6 +msgid "New Block" +msgstr "Novo Bloco" + +#: \views\blocks\admin_index.ctp:52 +#: \views\comments\admin_index.ctp:68 +#: \views\links\admin_index.ctp:56 +#: \views\nodes\admin_index.ctp:75 +msgid "Publish" +msgstr "Publicar" + +#: \views\blocks\admin_index.ctp:53 +#: \views\comments\admin_index.ctp:69 +#: \views\links\admin_index.ctp:57 +#: \views\nodes\admin_index.ctp:76 +msgid "Unpublish" +msgstr "Remover publicação" + +#: \views\blocks\admin_index.ctp:58 +#: \views\comments\admin_index.ctp:74 +#: \views\links\admin_index.ctp:62 +#: \views\messages\admin_index.ctp:66 +#: \views\nodes\admin_index.ctp:83 +#: \views\terms\admin_index.ctp:59 +msgid "Submit" +msgstr "Enviar" + +#: \views\comments\admin_edit.ctp:8 +#: \views\elements\comments.ctp:5 +#: \views\elements\node_more_info.ctp:31 +msgid "Comment" +msgstr "Comentário" + +#: \views\comments\admin_edit.ctp:9 +msgid "Contact Info" +msgstr "Informação de Contato" + +#: \views\comments\rss\index.ctp:16 +msgid "Comment on" +msgstr "Comentário em" + +#: \views\contacts\admin_add.ctp:7 +#: \views\contacts\admin_edit.ctp:7 +msgid "Contact" +msgstr "ontato" + +#: \views\contacts\admin_add.ctp:8 +#: \views\contacts\admin_edit.ctp:8 +msgid "Details" +msgstr "Detalhes" + +#: \views\contacts\admin_add.ctp:39 +#: \views\contacts\admin_edit.ctp:40 +msgid "Let users leave a message" +msgstr "Deixe uma mensagem" + +#: \views\contacts\admin_add.ctp:42 +#: \views\contacts\admin_edit.ctp:43 +msgid "Save messages in database" +msgstr "Salve a mensagem no banco de dados" + +#: \views\contacts\admin_add.ctp:45 +#: \views\contacts\admin_edit.ctp:46 +msgid "Notify by email instantly" +msgstr "Notificar por e-mail instantaneamente" + +#: \views\contacts\admin_add.ctp:48 +#: \views\contacts\admin_edit.ctp:49 +#: \views\types\admin_add.ctp:56 +msgid "Spam protection (requires Akismet API key)" +msgstr "Proteção spam (requer Akismet API key)" + +#: \views\contacts\admin_add.ctp:51 +#: \views\contacts\admin_edit.ctp:52 +#: \views\types\admin_add.ctp:59 +msgid "Use captcha? (requires Recaptcha API key)" +msgstr "Usar captcha? (requer Recaptcha API key)" + +#: \views\contacts\admin_add.ctp:56 +#: \views\contacts\admin_edit.ctp:57 +#: \views\types\admin_add.ctp:65 +#: \views\types\admin_edit.ctp:66 +msgid "You can manage your API keys here." +msgstr "Você pode alterar suas chaves aqui." + +#: \views\contacts\admin_index.ctp:6 +msgid "New Contact" +msgstr "Novo Contato" + +#: \views\contacts\view.ctp:17 +msgid "Your name" +msgstr "Seu nome" + +#: \views\contacts\view.ctp:18 +msgid "Your email" +msgstr "Seu e-mail" + +#: \views\contacts\view.ctp:19 +msgid "Subject" +msgstr "Assunto" + +#: \views\contacts\view.ctp:24 +msgid "Send" +msgstr "Enviar" + +#: \views\elements\comment.ctp:13 +msgid "said on %s" +msgstr "dito em %s" + +#: \views\elements\comment.ctp:19 +msgid "Reply" +msgstr "Responder" + +#: \views\elements\comments_form.ctp:2 +msgid "Add new comment" +msgstr "Incluir novo comentário" + +#: \views\elements\comments_form.ctp:7 +msgid "Go back to original post" +msgstr "Voltar a mensagem original" + +#: \views\elements\comments_form.ctp:23;39 +msgid "Name" +msgstr "Nome" + +#: \views\elements\comments_form.ctp:28;40 +msgid "Email" +msgstr "E-mail" + +#: \views\elements\comments_form.ctp:33;41 +msgid "Website" +msgstr "Site" + +#: \views\elements\comments_form.ctp:48 +msgid "Post comment" +msgstr "Postar comentário" + +#: \views\elements\node_info.ctp:6 +msgid "Posted" +msgstr "Postado" + +#: \views\elements\node_info.ctp:20 +msgid "on" +msgstr "em" + +#: \views\elements\node_more_info.ctp:17 +msgid "Posted in" +msgstr "Postado em" + +#: \views\elements\node_more_info.ctp:29 +msgid "Leave a comment" +msgstr "Deixe um comentário" + +#: \views\elements\search.ctp:24 +msgid "Search" +msgstr "Buscar" + +#: \views\elements\admin\logo.ctp:2 +msgid "Admin Panel" +msgstr "Painel de Administração" + +#: \views\elements\admin\logo.ctp:4 +msgid "Visit website" +msgstr "Visite o site" + +#: \views\elements\admin\navigation.ctp:6 +msgid "List" +msgstr "Listar" + +#: \views\elements\admin\navigation.ctp:8 +msgid "Content types" +msgstr "Tipos de conteúdo" + +#: \views\elements\admin\navigation.ctp:9 +#: \views\types\admin_add.ctp:8 +#: \views\types\admin_edit.ctp:9 +msgid "Taxonomy" +msgstr "Taxonomia" + +#: \views\elements\admin\navigation.ctp:24 +msgid "Regions" +msgstr "Regiões" + +#: \views\elements\admin\navigation.ctp:28 +msgid "Media" +msgstr "Mídia" + +#: \views\elements\admin\navigation.ctp:31 +msgid "File Manager" +msgstr "Gerenciador de Arquivos" + +#: \views\elements\admin\navigation.ctp:50 +msgid "Extensions" +msgstr "Extensões" + +#: \views\elements\admin\navigation.ctp:59 +#: \views\settings\admin_add.ctp:7 +#: \views\settings\admin_edit.ctp:7 +msgid "Settings" +msgstr "Configurações" + +#: \views\elements\admin\nodes_filter.ctp:25 +msgid "Unpublished" +msgstr "Despublicado" + +#: \views\elements\admin\nodes_filter.ctp:35 +msgid "Promoted" +msgstr "Publicado" + +#: \views\elements\admin\nodes_filter.ctp:37 +msgid "Yes" +msgstr "Sim" + +#: \views\elements\admin\nodes_filter.ctp:38 +msgid "No" +msgstr "Não" + +#: \views\elements\admin\nodes_filter.ctp:43 +#: \views\nodes\admin_index.ctp:10 +msgid "Filter" +msgstr "Filtrar" + +#: \views\elements\admin\quick.ctp:4 +msgid "You are logged in as " +msgstr "Você está logado como " + +#: \views\elements\admin\quick.ctp:5 +msgid "Log Out" +msgstr "Sair" + +#: \views\elements\email\text\comment.ctp:2 +msgid "A new comment has been posted under: %s" +msgstr "Um novo comentário foi postando em: %s" + +#: \views\elements\email\text\comment.ctp:6 +#: \views\elements\email\text\contact.ctp:8 +msgid "Name: %s" +msgstr "Nome: %s" + +#: \views\elements\email\text\comment.ctp:7 +#: \views\elements\email\text\contact.ctp:9 +msgid "Email: %s" +msgstr "E-mail: %s" + +#: \views\elements\email\text\comment.ctp:8 +msgid "Website: %s" +msgstr "Site: %s" + +#: \views\elements\email\text\comment.ctp:9 +#: \views\elements\email\text\contact.ctp:11 +#: \views\elements\email\text\forgot_password.ctp:17 +msgid "IP Address: %s" +msgstr "Endereço IP: %s" + +#: \views\elements\email\text\comment.ctp:10 +msgid "Comment: %s" +msgstr "Comentário: %s" + +#: \views\elements\email\text\contact.ctp:7 +msgid "You have received a new message at: %s" +msgstr "Você recebeu uma nova mensagem em: %s" + +#: \views\elements\email\text\contact.ctp:10 +msgid "Subject: %s" +msgstr "Assunto: %s" + +#: \views\elements\email\text\contact.ctp:12 +msgid "Message: %s" +msgstr "Mensagem: %s" + +#: \views\elements\email\text\forgot_password.ctp:1 +#: \views\elements\email\text\register.ctp:1 +msgid "Hello %s" +msgstr "Olá %s" + +#: \views\elements\email\text\forgot_password.ctp:10 +msgid "Please visit this link to reset your password: %s" +msgstr "Acesse este link para alterar sua senha: %s" + +#: \views\elements\email\text\forgot_password.ctp:14 +msgid "If you did not request a password reset, then please ignore this email." +msgstr "Se você não pediu para alterar a senha, ignore este e-mail." + +#: \views\elements\email\text\register.ctp:10 +msgid "Please visit this link to activate your account: %s" +msgstr "Por favor visite este link para ativar sua conta: %s" + +#: \views\errors\missing_action.ctp:1 +#: \views\errors\missing_controller.ctp:1 +msgid "Page not found" +msgstr "Página não encontrada" + +#: \views\errors\missing_action.ctp:2 +#: \views\errors\missing_controller.ctp:2 +msgid "Error" +msgstr "Erro" + +#: \views\errors\missing_action.ctp:4 +#: \views\errors\missing_controller.ctp:4 +msgid "The requested address was not found on this server." +msgstr "O endereço requisitado não foi encontrado." + +#: \views\filemanager\admin_browse.ctp:6 +msgid "Upload here" +msgstr "Enviar aqui" + +#: \views\filemanager\admin_browse.ctp:7 +msgid "Create directory" +msgstr "Criar diretório" + +#: \views\filemanager\admin_browse.ctp:8 +msgid "Create file" +msgstr "Criar arquivo" + +#: \views\filemanager\admin_browse.ctp:14 +#: \views\filemanager\admin_create_directory.ctp:6 +#: \views\filemanager\admin_create_file.ctp:6 +#: \views\filemanager\admin_editfile.ctp:6 +#: \views\filemanager\admin_upload.ctp:6 +msgid "You are here:" +msgstr "Você está aqui:" + +#: \views\filemanager\admin_browse.ctp:28 +msgid "Directory content" +msgstr "Conteúdo do diretório" + +#: \views\filemanager\admin_browse.ctp:36 +msgid "Open" +msgstr "Abrir" + +#: \views\helpers\meta.php:34 +#: \views\settings\admin_view.ctp:9 +msgid "Key" +msgstr "Chave" + +#: \views\helpers\meta.php:38 +#: \views\settings\admin_view.ctp:14 +msgid "Value" +msgstr "Valor" + +#: \views\helpers\meta.php:53 +msgid "Remove" +msgstr "Remover" + +#: \views\languages\admin_index.ctp:6 +#: \views\languages\admin_select.ctp:6 +msgid "New Language" +msgstr "Novo idioma" + +#: \views\layouts\admin_login.ctp:21 +msgid "Back to" +msgstr "Voltar para" + +#: \views\layouts\maintenance.ctp:13 +msgid "Site down for maintenance." +msgstr "Site em manutenção." + +#: \views\links\admin_add.ctp:7 +#: \views\links\admin_edit.ctp:7 +msgid "Link" +msgstr "Link" + +#: \views\links\admin_add.ctp:9 +#: \views\links\admin_edit.ctp:9 +#: \views\menus\admin_add.ctp:8 +#: \views\menus\admin_edit.ctp:8 +#: \views\settings\admin_add.ctp:8 +#: \views\settings\admin_edit.ctp:8 +msgid "Misc." +msgstr "Diversos" + +#: \views\links\admin_add.ctp:16 +#: \views\links\admin_edit.ctp:17 +msgid "Parent" +msgstr "A cima" + +#: \views\links\admin_add.ctp:22 +#: \views\links\admin_edit.ctp:23 +msgid "Link to a Node" +msgstr "Link para o Nó" + +#: \views\links\admin_index.ctp:6 +msgid "New Link" +msgstr "Novo Link" + +#: \views\menus\admin_add.ctp:7 +#: \views\menus\admin_edit.ctp:7 +msgid "Menu" +msgstr "Menu" + +#: \views\menus\admin_index.ctp:6 +msgid "New Menu" +msgstr "Novo Menu" + +#: \views\menus\admin_index.ctp:23 +msgid "View links" +msgstr "Ver links" + +#: \views\messages\admin_index.ctp:60 +msgid "Mark as read" +msgstr "Marcar como lida" + +#: \views\messages\admin_index.ctp:61 +msgid "Mark as unread" +msgstr "Marcar como não lida" + +#: \views\nodes\admin_add.ctp:17 +#: \views\nodes\admin_edit.ctp:18 +msgid "Custom fields" +msgstr "Campos personalizados" + +#: \views\nodes\admin_add.ctp:19 +#: \views\nodes\admin_edit.ctp:20 +msgid "Publishing" +msgstr "Publicando" + +#: \views\nodes\admin_add.ctp:45 +#: \views\nodes\admin_edit.ctp:47 +#: \views\types\admin_add.ctp:42 +#: \views\types\admin_edit.ctp:44 +msgid "Disabled" +msgstr "Desativado" + +#: \views\nodes\admin_add.ctp:46 +#: \views\nodes\admin_edit.ctp:48 +#: \views\types\admin_add.ctp:43 +#: \views\types\admin_edit.ctp:45 +msgid "Read only" +msgstr "Apenas leitura" + +#: \views\nodes\admin_add.ctp:47 +#: \views\nodes\admin_edit.ctp:49 +#: \views\types\admin_add.ctp:44 +#: \views\types\admin_edit.ctp:46 +msgid "Read/Write" +msgstr "Leitura/Escrita" + +#: \views\nodes\admin_add.ctp:69 +#: \views\nodes\admin_edit.ctp:69 +msgid "Add another field" +msgstr "Incluir novo campo" + +#: \views\nodes\admin_add.ctp:81 +#: \views\nodes\admin_edit.ctp:81 +msgid "Promoted to front page" +msgstr "Publicado na página principal" + +#: \views\nodes\admin_index.ctp:77 +msgid "Promote" +msgstr "Publicar" + +#: \views\nodes\admin_index.ctp:78 +msgid "Unpromote" +msgstr "Despublicar" + +#: \views\nodes\admin_links.ctp:24 +msgid "Sort by:" +msgstr "Ordenar por:" + +#: \views\nodes\index.ctp:4 +#: \views\nodes\promoted.ctp:4 +#: \views\nodes\search.ctp:6 +#: \views\nodes\term.ctp:6 +msgid "No items found." +msgstr "Nenhum item encontrado." + +#: \views\regions\admin_index.ctp:6 +msgid "New Region" +msgstr "Nova Região" + +#: \views\roles\admin_index.ctp:6 +msgid "New Role" +msgstr "Nova Regra" + +#: \views\settings\admin_add.ctp:13 +#: \views\settings\admin_edit.ctp:14 +msgid "e.g., 'Site.title'" +msgstr "ex: 'Site.titulo'" + +#: \views\settings\admin_add.ctp:22 +#: \views\settings\admin_edit.ctp:23 +msgid "e.g., 'text' or 'textarea'" +msgstr "ex: 'text' ou 'textarea'" + +#: \views\settings\admin_index.ctp:6 +#: \views\settings\admin_view.ctp:46 +msgid "New Setting" +msgstr "Nova Configuração" + +#: \views\settings\admin_view.ctp:2 +msgid "Setting" +msgstr "Configuração" + +#: \views\settings\admin_view.ctp:19 +msgid "Description" +msgstr "Descrição" + +#: \views\settings\admin_view.ctp:24 +msgid "Input Type" +msgstr "Tipo de Entrada" + +#: \views\settings\admin_view.ctp:29 +msgid "Weight" +msgstr "Peso" + +#: \views\settings\admin_view.ctp:34 +#: \views\types\admin_add.ctp:11 +#: \views\types\admin_edit.ctp:12 +msgid "Params" +msgstr "Parâmetros" + +#: \views\settings\admin_view.ctp:43 +msgid "Edit Setting" +msgstr "Editar Configuração" + +#: \views\settings\admin_view.ctp:44 +msgid "Delete Setting" +msgstr "Excluir Configuração" + +#: \views\settings\admin_view.ctp:44 +msgid "Are you sure you want to delete # %s?" +msgstr "Você tem certeza que deseja excluir o id #%s?" + +#: \views\settings\admin_view.ctp:45 +msgid "List Settings" +msgstr "Listar Configurações" + +#: \views\terms\admin_index.ctp:6 +msgid "New Term" +msgstr "Novo Termo" + +#: \views\types\admin_add.ctp:9 +#: \views\types\admin_edit.ctp:10 +msgid "Format" +msgstr "Formato" + +#: \views\types\admin_add.ctp:31 +#: \views\types\admin_edit.ctp:33 +msgid "Show author's name" +msgstr "Mostrar o nome do autor" + +#: \views\types\admin_add.ctp:34 +#: \views\types\admin_edit.ctp:36 +msgid "Show date" +msgstr "Mostrar a data" + +#: \views\types\admin_index.ctp:6 +msgid "New Type" +msgstr "Novo Tipo" + +#: \views\users\admin_add.ctp:2 +msgid "Add User" +msgstr "Adicionar Usuário" + +#: \views\users\admin_edit.ctp:2 +msgid "Edit User" +msgstr "Editar Usuário" + +#: \views\users\admin_edit.ctp:6 +#: \views\users\admin_reset_password.ctp:2 +msgid "Reset password" +msgstr "Alterar senha" + +#: \views\users\admin_index.ctp:6 +msgid "New User" +msgstr "Novo Usuário" + +#: \views\users\admin_index.ctp:14 +msgid "Role" +msgstr "Regra" + +#: \views\users\admin_login.ctp:10 +msgid "Forgot password?" +msgstr "Perdeu a senha?" + +#: \views\users\admin_reset_password.ctp:8 +msgid "New Password" +msgstr "Nova Senha" + +#: \views\users\index.ctp:4 +msgid "You are currently logged in as:" +msgstr "Você está atualmente logado como:" + +#: \views\users\login.ctp:2 +msgid "Login" +msgstr "Login" + +#: \views\users\reset.ctp:6 +msgid "New password" +msgstr "Nova senha" + +#: \views\vocabularies\admin_add.ctp:11 +#: \views\vocabularies\admin_edit.ctp:9 +msgid "Options" +msgstr "Opções" + +#: \views\vocabularies\admin_index.ctp:6 +msgid "New Vocabulary" +msgstr "Novo Vocabulário" + +#: \views\vocabularies\admin_index.ctp:22 +msgid "View terms" +msgstr "Ver termos" + +#: \webroot\test.php:99 +msgid "Debug setting does not allow access to this url." +msgstr "As opções de debug não permitem acessar esta url." \ No newline at end of file diff --git a/app/models/aviso.php b/app/models/aviso.php new file mode 100644 index 0000000..ea46e02 --- /dev/null +++ b/app/models/aviso.php @@ -0,0 +1,34 @@ + array('numeric'), + 'users_id' => array('numeric') + ); + + //The Associations below have been created with all possible keys, those that are not needed can be removed + var $belongsTo = array( + 'Codigo' => array( + 'className' => 'Codigo', + 'foreignKey' => 'codigos_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ), + 'User' => array( + 'className' => 'User', + 'foreignKey' => 'users_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + ); + + + //var $hasOne = 'Codigo'; + + + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/entries b/app/models/behaviors/.svn/entries new file mode 100644 index 0000000..e0eb0d3 --- /dev/null +++ b/app/models/behaviors/.svn/entries @@ -0,0 +1,300 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/models/behaviors +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +encoder.php +file + + + + +2010-09-04T08:55:28.000000Z +3256b5790d3bf9723142847229e760ee +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2069 + +url.php +file + + + + +2010-09-04T08:55:28.000000Z +eca66886df77f86490a951fbfc20829c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2330 + +params.php +file + + + + +2010-09-04T08:55:28.000000Z +f1434095b6bfea127a9a7863a01ae5ff +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2411 + +ordered.php +file + + + + +2010-09-04T08:55:28.000000Z +b513e469535f3600c5fdaeaafda62005 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +25644 + +croogo_translate.php +file + + + + +2010-09-04T08:55:28.000000Z +1940bc4f9a7dbeb845aee0392a410414 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +9982 + +meta.php +file + + + + +2010-09-04T08:55:28.000000Z +df91cbfd381610014fc50b3ee5ec2451 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2689 + +cached.php +file + + + + +2010-09-04T08:55:28.000000Z +d7cf93e35f31da9bb566e5c0debd2971 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1457 + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/models/behaviors/.svn/text-base/cached.php.svn-base b/app/models/behaviors/.svn/text-base/cached.php.svn-base new file mode 100644 index 0000000..af455dd --- /dev/null +++ b/app/models/behaviors/.svn/text-base/cached.php.svn-base @@ -0,0 +1,66 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CachedBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterSave callback + * + * @param object $model + * @param boolean $created + * @return void + */ + public function afterSave(&$model, $created) { + $this->_deleteCachedFiles($model); + } +/** + * afterDelete callback + * + * @param object $model + * @return void + */ + public function afterDelete(&$model) { + $this->_deleteCachedFiles($model); + } +/** + * Delete cache files matching prefix + * + * @param object $model + * @return void + */ + protected function _deleteCachedFiles(&$model) { + foreach ($this->settings[$model->alias]['prefix'] AS $prefix) { + $files = glob(TMP.'cache'.DS.'queries'.DS.'cake_'.$prefix.'*'); + if (is_array($files) && count($files) > 0) { + foreach ($files AS $file) { + unlink($file); + } + } + } + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/text-base/croogo_translate.php.svn-base b/app/models/behaviors/.svn/text-base/croogo_translate.php.svn-base new file mode 100644 index 0000000..8b9d46a --- /dev/null +++ b/app/models/behaviors/.svn/text-base/croogo_translate.php.svn-base @@ -0,0 +1,295 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CroogoTranslateBehavior extends ModelBehavior { +/** + * Used for runtime configuration of model + */ + public $runtime = array(); +/** + * Field names + * + * @var array + */ + public $translationFields = array(); +/** + * Callback + * + * $config for CroogoTranslateBehavior should be + * array( 'fields' => array('field_one', + * 'field_two' => 'FieldAssoc', 'field_three')) + * + * With above example only one permanent hasMany will be joined (for field_two + * as FieldAssoc) + * + * $config could be empty - and translations configured dynamically by + * bindTranslation() method + * + * @param array $config + * @return mixed + * @access public + */ + public function setup(&$model, $config = array()) { + $db =& ConnectionManager::getDataSource($model->useDbConfig); + if (!$db->connected) { + trigger_error( + sprintf(__('Datasource %s for CroogoTranslateBehavior of model %s is not connected', true), $model->useDbConfig, $model->alias), + E_USER_ERROR + ); + return false; + } + + $this->settings[$model->alias] = array(); + $this->runtime[$model->alias] = array('fields' => array()); + $this->translateModel($model); + $this->translationFields[$model->alias] = $config; + //return $this->bindTranslation($model, $config, false); + } +/** + * Callback + * + * @return void + * @access public + */ + public function cleanup(&$model) { + //$this->unbindTranslation($model); + unset($this->settings[$model->alias]); + unset($this->runtime[$model->alias]); + } +/** + * Get field names for Translation + * + * @param object $model + * @return array + * @access public + */ + public function getTranslationFields(&$model) { + if (Set::numeric(array_keys($this->translationFields[$model->alias]))) { + return $this->translationFields[$model->alias]; + } else { + return array_keys($this->translationFields[$model->alias]); + } + } +/** + * afterFind Callback + * + * @param array $results + * @param boolean $primary + * @return array Modified results + * @access public + */ + public function afterFind(&$model, $results, $primary) { + $locale = $this->_getLocale($model); + + if (empty($locale) || empty($results)) { + return $results; + } + + $fields = $this->getTranslationFields($model); + $RuntimeModel =& $this->translateModel($model); + + if ($primary && isset($results[0][$model->alias])) { + $i = 0; + foreach ($results AS $result) { + if (!isset($result[$model->alias][$model->primaryKey])) continue; + + $translations = $RuntimeModel->find('all', array( + 'conditions' => array( + $RuntimeModel->alias.'.model' => $model->alias, + $RuntimeModel->alias.'.foreign_key' => $result[$model->alias][$model->primaryKey], + $RuntimeModel->alias.'.field' => $fields, + ), + )); + + foreach ($translations AS $translation) { + $field = $translation[$RuntimeModel->alias]['field']; + + // Original row + /*if (isset($results[$i][$model->alias][$field])) { + $results[$i][$field.'Original'] = $results[$i][$model->alias][$field]; + }*/ + + // Translated row + if ($translation[$RuntimeModel->alias]['locale'] == $locale && + isset($results[$i][$model->alias][$field])) { + $results[$i][$model->alias][$field] = $translation[$RuntimeModel->alias]['content']; + } + + // Other translations + if (!Set::numeric(array_keys($this->translationFields[$model->alias])) && + isset($results[$i][$model->alias][$field])) { + if (!isset($results[$i][$field.'Translation'])) { + $results[$i][$field.'Translation'] = array(); + } + $results[$i][$field.'Translation'][] = $translation[$RuntimeModel->alias]; + } + } + + $i++; + } + } + + return $results; + } +/** + * Save translation only (in i18n table) + * + * @param object $model + * @param array $data + * @param boolean $validate + */ + public function saveTranslation(&$model, $data = null, $validate = true) { + $model->data = $data; + if (!isset($model->data[$model->alias])) { + return false; + } + + $locale = $this->_getLocale($model); + if (empty($locale)) { + return false; + } + + $RuntimeModel =& $this->translateModel($model); + $conditions = array('model' => $model->alias, 'foreign_key' => $model->id); + + foreach ($model->data[$model->alias] as $field => $value) { + unset($conditions['content']); + $conditions['field'] = $field; + if (is_array($value)) { + $conditions['locale'] = array_keys($value); + } else { + $conditions['locale'] = $locale; + if (is_array($locale)) { + $value = array($locale[0] => $value); + } else { + $value = array($locale => $value); + } + } + $translations = $RuntimeModel->find('list', array('conditions' => $conditions, 'fields' => array($RuntimeModel->alias . '.locale', $RuntimeModel->alias . '.id'))); + foreach ($value as $_locale => $_value) { + $RuntimeModel->create(); + $conditions['locale'] = $_locale; + $conditions['content'] = $_value; + if (array_key_exists($_locale, $translations)) { + if (!$RuntimeModel->save(array($RuntimeModel->alias => array_merge($conditions, array('id' => $translations[$_locale]))))) { + return false; + } + } else { + if (!$RuntimeModel->save(array($RuntimeModel->alias => $conditions))) { + return false; + } + } + } + } + + return true; + } +/** + * afterDelete Callback + * + * @return void + * @access public + */ + public function afterDelete(&$model) { + $RuntimeModel =& $this->translateModel($model); + $conditions = array('model' => $model->alias, 'foreign_key' => $model->id); + $RuntimeModel->deleteAll($conditions); + } +/** + * Get selected locale for model + * + * @return mixed string or false + * @access protected + */ + protected function _getLocale(&$model) { + if (!isset($model->locale) || is_null($model->locale)) { + /* + if (!class_exists('I18n')) { + App::import('Core', 'i18n'); + } + $I18n =& I18n::getInstance(); + $I18n->l10n->get(Configure::read('Config.language')); + $model->locale = $I18n->l10n->locale; + */ + $model->locale = Configure::read('Config.language'); + } + + return $model->locale; + } +/** + * Get instance of model for translations + * + * @return object + * @access public + */ + public function &translateModel(&$model) { + if (!isset($this->runtime[$model->alias]['model'])) { + if (!isset($model->translateModel) || empty($model->translateModel)) { + $className = 'I18nModel'; + } else { + $className = $model->translateModel; + } + + if (PHP5) { + $this->runtime[$model->alias]['model'] = ClassRegistry::init($className, 'Model'); + } else { + $this->runtime[$model->alias]['model'] =& ClassRegistry::init($className, 'Model'); + } + } + if (!empty($model->translateTable) && $model->translateTable !== $this->runtime[$model->alias]['model']->useTable) { + $this->runtime[$model->alias]['model']->setSource($model->translateTable); + } elseif (empty($model->translateTable) && empty($model->translateModel)) { + $this->runtime[$model->alias]['model']->setSource('i18n'); + } + return $this->runtime[$model->alias]['model']; + } +} +if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) { +/** + * @package cake + * @subpackage cake.cake.libs.model.behaviors + */ + class I18nModel extends AppModel { + public $name = 'I18nModel'; + public $useTable = 'i18n'; + public $displayField = 'field'; + } +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/text-base/empty.svn-base b/app/models/behaviors/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/models/behaviors/.svn/text-base/encoder.php.svn-base b/app/models/behaviors/.svn/text-base/encoder.php.svn-base new file mode 100644 index 0000000..9b9f635 --- /dev/null +++ b/app/models/behaviors/.svn/text-base/encoder.php.svn-base @@ -0,0 +1,87 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class EncoderBehavior extends ModelBehavior { + + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * Encode data + * + * Turn array into a JSON + * + * @param object $model model + * @param array $data data + * @param array $options (optional) + * @return string + */ + public function encodeData(&$model, $data, $options = array()) { + $_options = array( + 'json' => false, + 'trim' => true, + ); + $options = array_merge($_options, $options); + + if (is_array($data) && count($data) > 0) { + // trim + if ($options['trim']) { + $elements = array(); + foreach($data AS $id => $d) { + $d = trim($d); + if ($d != '') { + $elements[$id] = '"' . $d . '"'; + } + } + } else { + $elements = $data; + } + + // encode + if (count($elements) > 0) { + if ($options['json']) { + $output = json_encode($elements); + } else { + $output = '[' . implode(',', $elements) . ']'; + } + } else { + $output = ''; + } + } else { + $output = ''; + } + + return $output; + } +/** + * Decode data + * + * @param object $model model + * @param string $data data + * @return array + */ + public function decodeData(&$model, $data) { + if ($data == '') { + $output = ''; + } else { + $output = json_decode($data, true); + } + + return $output; + } +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/text-base/meta.php.svn-base b/app/models/behaviors/.svn/text-base/meta.php.svn-base new file mode 100644 index 0000000..82019f7 --- /dev/null +++ b/app/models/behaviors/.svn/text-base/meta.php.svn-base @@ -0,0 +1,103 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class MetaBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $customFields = array(); + if (isset($result['Meta']) && count($result['Meta']) > 0) { + $customFields = Set::combine($result, 'Meta.{n}.key', 'Meta.{n}.value'); + } + $results[$i]['CustomFields'] = $customFields; + } + } elseif (isset($results[$model->alias])) { + $customFields = array(); + if (isset($results['Meta']) && count($results['Meta']) > 0) { + $customFields = Set::combine($results, 'Meta.{n}.key', 'Meta.{n}.value'); + } + $results['CustomFields'] = $customFields; + } + + return $results; + } +/** + * Prepare data + * + * @param object $model + * @param array $data + * @return array + */ + public function prepareData(&$model, $data) { + return $this->__prepareMeta($data); + } +/** + * Private method for MetaBehavior::prepareData() + * + * @param object $model + * @param array $data + * @return array + */ + private function __prepareMeta($data) { + if (isset($data['Meta']) && + is_array($data['Meta']) && + count($data['Meta']) > 0 && + !Set::numeric(array_keys($data['Meta']))) { + $meta = $data['Meta']; + $data['Meta'] = array(); + $i = 0; + foreach ($meta AS $metaUuid => $metaArray) { + $data['Meta'][$i] = $metaArray; + $i++; + } + } + + return $data; + } +/** + * Save with meta + * + * @param object $model + * @param array $data + * @param array $options + * @return void + */ + public function saveWithMeta(&$model, $data, $options = array()) { + $data = $this->__prepareMeta($data); + return $model->saveAll($data, $options); + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/text-base/ordered.php.svn-base b/app/models/behaviors/.svn/text-base/ordered.php.svn-base new file mode 100644 index 0000000..b358c9c --- /dev/null +++ b/app/models/behaviors/.svn/text-base/ordered.php.svn-base @@ -0,0 +1,664 @@ + array( + * 'field' => 'page_number', + * 'foreign_key' => 'book_id' + * )); + * + * Now when you save a new page (no changes needed to action or view, + * but leave page_number out of the form), it will be added to the end + * of the book. + * + * When deleting, the weights will automatically be adjusted to fill in + * the vacum. + * + * NB! Note that if using Model::deleteAll() it is VERY important that you + * assign it to use callbacks 'beforeDelete' and 'afterDelete', like this: + * + * // in controller action + * $this->Page->deleteAll(array('user_id'=>22),true,array('beforeDelete','afterDelete')); + * + * Now lets say the last two pages to be created got made in the wrong + * order, so you want to move the last page "up" one space. With the + * a simple controller call to the model like this that can be achieved: + * + * // in a controller action : + * $this->Page->moveup($id); + * // the id here is the id of the newest page + * + * You find that the first page you made is suppose to be the 5 pages later: + * + * // in a controller action : + * $this->Page->movedown($id, 5); + * + * Also you discovered that in the first page got put in the middle. This + * can easily be moved first by doing this : + * + * // in a controller action : + * $this->Page->moveup($id,true); + * // true will move it to the extre in that direction + * + * You can also use actions to find out if the node is first or last page : + * + * - isfirst($id) + * - islast($id) + * + * And a last feature is the ability to sort the list by any field + * you want and have it set weights based on that. You do that like this : + * + * //in controller action : + * $this->Page->sortby('content DESC', $book_id); + * // dont ask me why you would sort the pages of a book by its content lol + * + * Note that this behaviour will also let you sort an entire table as one list. + * To do that you simply set the 'foreign_key' to false (and dont create the field + * in the table). Now there will only be one set of weights. (Note you need the weight + * field as normal) + * + * @author Alexander Morland aka alkemann + * @license MIT + * @modified 17. nov. 2008 (model independent settings) + * @version 2.1.3 + * + */ +class OrderedBehavior extends ModelBehavior { + public $name = 'Ordered'; + + /** + * field : (string) The field to be ordered by. + * + * foreign_key : (string) The field to identify one SET by. + * Each set has their own order (ie they start at 1). + * Set to FALSE to not use this feature (and use only 1 set) + */ + public $_defaults = array('field' => 'weight', 'foreign_key' => 'order_id'); + + public function setup(&$Model, $config = array()) { + if (!is_array($config)) { + $config = array(); + } + $this->settings[$Model->alias] = array_merge($this->_defaults, $config); + $Model->order = $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' ASC'; + } + + public function beforedelete(&$Model) { + $Model->read(); + $highest = $this->_highest($Model); + if (!empty($Model->data) && ($Model->data[$Model->alias][$Model->primaryKey] == $highest[$Model->alias][$Model->primaryKey])) { + $Model->data = null; + } + } + public function afterdelete(&$Model) { + if ($Model->data) { + // What was the weight of the deleted model? + $old_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + // update the weight of all models of higher weight by + + + $action = array($this->settings[$Model->alias]['field'] => $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + // decreasing them by 1 + return $Model->updateAll($action, $conditions); + } + return true; + } + /** + * Sets the weight for new items so they end up at end + * + * @todo add new model with weight. clean up after + * @param Model $Model + */ + public function beforesave(&$Model) { + // Check if weight id is set. If not add to end, if set update all + // rows from ID and up + if (!isset($Model->data[$Model->alias][$Model->primaryKey])) { + // get highest current row + $highest = $this->_highest($Model); + // set new weight to model as last by using current highest one + 1 + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1; + } + return true; + } + + /** + * Moving a node to specific weight, it will shift the rest of the table to make room. + * + * @param Object $Model + * @param int $id The id of the node to move + * @param int $new_weight the new weight of the node + * @return boolean True of move successful + */ + public function moveto(&$Model, $id = null, $new_weight = null) { + if (!$id || !$new_weight || $new_weight < 1) { + return false; + } + $highest = $this->_highest($Model); + // fetch the model and its old weight + $old_weight = $this->_read($Model, $id); + + //check if new weight is too big + if ($new_weight > $highest[$Model->alias][$this->settings[$Model->alias]['field']]) { + return false; + } + if ($new_weight === true && $old_weight == 0) { + $new_weight = $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1; + } + if (empty($Model->data)) { + return false; + } + $conditions = array(); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + + // give Model new weight + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + if ($new_weight == $old_weight) { + // move to same location? + return false; + } elseif ($old_weight == 0) { + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + } elseif ($new_weight > $old_weight) { + // move all nodes that have weight > old_weight AND <= new_weight up one (-1) + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >'] = $old_weight; + } else { // $new_weight < $old_weight + // move all where weight >= new_weight AND < old_weight down one (+1) + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <'] = $old_weight; + + } + $Model->updateAll($action, $conditions); + return $Model->save(null, false); + } + + /** + * Take in an order array and sorts the list based on that order specification + * and creates new weights for it. If no foreign key is supplied, all lists + * will be sorted. + * + * @todo foreign key independent + * @param Object $Model + * @param array $order + * @param mixed $foreign_key + * $returns boolean true if successfull + */ + public function sortby(&$Model, $order, $foreign_key = null) { + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + $conditions = array(1 => 1); + if ($this->settings[$Model->alias]['foreign_key']) { + if (!$foreign_key) { + return false; + } + $fields[] = $this->settings[$Model->alias]['foreign_key']; + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $foreign_key); + } + + $all = $Model->find('all', array( + 'fields' => $fields, + 'conditions' => $conditions, + 'recursive' => -1, + 'order' => $order)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + return $Model->saveAll($all); + } + + /** + * Reorder the node, by moving it $number spaces up. Defaults to 1 + * + * If the node is the first node (or less then $number spaces from first) + * this method will return false. + * + * @param AppModel $Model + * @param mixed $id The ID of the record to move + * @param mixed $number how many places to move the node or true to move to last position + * @return boolean true on success, false on failure + * @access public + */ + public function moveup(&$Model, $id = null, $number = 1) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } + $old_weight = $this->_read($Model, $id); + if (empty($Model->data)) { + return false; + } + if (is_numeric($number)) { + if ($number == 1) { // move 1 space + $previous = $this->_previous($Model); + if (!$previous) { + return false; + } + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $previous[$Model->alias][$this->settings[$Model->alias]['field']]; + + $previous[$Model->alias][$this->settings[$Model->alias]['field']] = $old_weight; + + $data[0] = $Model->data; + $data[1] = $previous; + + return $Model->saveAll($data, array('validate' => false)); + + } elseif ($number < 1) { // cant move 0 or negative spaces + return false; + } else { // move Model up N spaces UP + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array(); + } + + // find the one occupying new space and its weight + $new_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] - $number; + // check if new weight is possible. else move last + if (!$this->_findByWeight($Model, $new_weight)) { + return false; + } + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <'] = $old_weight; + // increase weight of all where weight > new weight and id != Model.id + $Model->updateAll(array( + $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'), $conditions); + + // set Model weight to new weight and save it + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + return $Model->save(null, false); + } + } elseif (is_bool($number) && $number && $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] != 1) { // move Model FIRST; + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <' => $old_weight, + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <' => $old_weight); + } + $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + $Model->saveField($this->settings[$Model->alias]['field'], 0); + $Model->updateAll(array( // update + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'), $conditions); + + return true; + } else { // $number is neither a number nor a bool + return false; + } + } + + /** + * This will create weights based on display field. The purpose of the method is to create + * weights for tables that existed before this behavior was added. + * + * @param Object $Model + * @return boolean success + */ + public function resetweights(&$Model) { + if ($this->settings[$Model->alias]['foreign_key']) { + $temp = $Model->find('all', array( + 'fields' => $this->settings[$Model->alias]['foreign_key'], + 'group' => $this->settings[$Model->alias]['foreign_key'], + 'recursive' => -1)); + $foreign_keys = Set::extract($temp, '{n}.' . $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']); + foreach ($foreign_keys as $fk) { + $all = $Model->find('all', array( + 'conditions' => array($this->settings[$Model->alias]['foreign_key'] => $fk), + 'fields' => array( + $Model->displayField, + $Model->primaryKey, + $this->settings[$Model->alias]['field'], + $this->settings[$Model->alias]['foreign_key']), + 'order' => $Model->displayField)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + if (!$Model->saveAll($all)) { + return false; + } + } + } else { + $all = $Model->find('all', array( + 'fields' => array( + $Model->displayField, + $Model->primaryKey, + $this->settings[$Model->alias]['field']), + 'order' => $Model->displayField)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + if (!$Model->saveAll($all)) { + return false; + } + } + return true; + } + + /** + * Reorder the node, by moving it $number spaces down. Defaults to 1 + * + * If the node is the last node (or less then $number spaces from last) + * this method will return false. + * + * @param AppModel $Model + * @param mixed $id The ID of the record to move + * @param mixed $number how many places to move the node or true to move to last position + * @return boolean true on success, false on failure + * @access public + */ + public function movedown(&$Model, $id = null, $number = 1) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } + $old_weight = $this->_read($Model, $id); + if (empty($Model->data)) { + return false; + } + if (is_numeric($number)) { + if ($number == 1) { // move node 1 space down + $next = $this->_next($Model); + if (!$next) { // it is the last node + return false; + } + // switch the node's weight around + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $next[$Model->alias][$this->settings[$Model->alias]['field']]; + + $next[$Model->alias][$this->settings[$Model->alias]['field']] = $old_weight; + + // create an array of the two nodes and save them + $data[0] = $Model->data; + $data[1] = $next; + return $Model->saveAll($data, array('validate' => false)); + + } elseif ($number < 1) { // cant move 0 or negative number of spaces + return false; + } else { // move Model up N spaces DWN + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array(); + } + + // find the one occupying new space and its weight + $new_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] + $number; + // check if new weight is possible. else move last + if (!$this->_findByWeight($Model, $new_weight)) { + return false; + } + // increase weight of all where weight > new weight and id != Model.id + + + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >'] = $old_weight; + + $Model->updateAll(array( + $this->settings[$Model->alias]['field'] => $this->settings[$Model->alias]['field'] . ' - 1'), $conditions); + + // set Model weight to new weight and save it + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + return $Model->save(null, false); + } + + } elseif (is_bool($number) && $number) { // move Model LAST; + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight, + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + } + + // get highest weighted row + $highest = $this->_highest($Model); + // check of Model is allready highest + if ($highest[$Model->alias][$Model->primaryKey] == $Model->data[$Model->alias][$Model->primaryKey]) { + return false; + } + // Save models as highest +1 + $Model->saveField($this->settings[$Model->alias]['field'], $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1); + // updated all by taking off 1 + $Model->updateAll(array( // action + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'), $conditions); + + return true; + } else { // $number is neither a number nor a bool + return false; + } + } + + /** + * Returns true if the specified item is the first item + * + * @param Model $Model + * @param Int $id + * @return Boolean, true if it is the first item, false if not + */ + public function isfirst(&$Model, $id = null) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } else { + $Model->id = $id; + } + $Model->read(); + + $first = $this->_read($Model, $id); + if ($Model->data[$Model->alias][$this->settings[$Model->alias]['field']] == 1) { + return true; + } else { + return false; + } + } + + /** + * Returns true if the specified item is the last item + * + * @param Model $Model + * @param Int $id + * @return Boolean, true if it is the last item, false if not + */ + public function islast(&$Model, $id = null) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } else { + $Model->id = $id; + } + $Model->read(); + $last = $this->_highest($Model); + return ($last[$Model->alias][$Model->primaryKey] == $id); + } + + /** + * Removing an item from the list means to set its field to 0 and updating the other items to be "complete" + * + * @param Model $Model + * @param int $id + * @return boolean + */ + public function removefromlist(&$Model, $id) { + $this->_read($Model, $id); + $old_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + $data = $Model->data; + $data[$Model->alias][$this->settings[$Model->alias]['field']] = 0; + if (!$Model->save($data, false)) { + return false; + } + return $Model->updateAll($action, $conditions); + } + + private function _findbyweight(&$Model, $weight) { + $conditions = array($this->settings[$Model->alias]['field'] => $weight); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _highest(&$Model) { + $options = array( + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => array($Model->primaryKey, $this->settings[$Model->alias]['field']), + 'recursive' => -1); + if ($this->settings[$Model->alias]['foreign_key']) { + if (empty($Model->data) || !isset($Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']])) { + $this->_read($Model, $Model->id); + } + $options['conditions'] = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + $options['fields'][] = $this->settings[$Model->alias]['foreign_key']; + } + $temp_model_id = $Model->id; + $Model->id = null; + $last = $Model->find('first', $options); + $Model->id = $temp_model_id; + return $last; + } + + private function _previous(&$Model) { + $conditions = array( + $this->settings[$Model->alias]['field'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] - 1); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _next(&$Model) { + $conditions = array( + $this->settings[$Model->alias]['field'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] + 1); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _all(&$Model) { + $options = array( + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => array($Model->primaryKey, $this->settings[$Model->alias]['field']), + 'recursive' => -1); + if ($this->settings[$Model->alias]['foreign_key']) { + $options['conditions'] = array( + $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + $options['fields'][] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('all', $options); + } + + private function _read(&$Model, $id) { + $Model->id = $id; + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + $Model->data = $Model->find('first', array( + 'fields' => $fields, + 'conditions' => array($Model->primaryKey => $id), + 'recursive' => -1)); + return $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + } +} +?> diff --git a/app/models/behaviors/.svn/text-base/params.php.svn-base b/app/models/behaviors/.svn/text-base/params.php.svn-base new file mode 100644 index 0000000..04acc5e --- /dev/null +++ b/app/models/behaviors/.svn/text-base/params.php.svn-base @@ -0,0 +1,86 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ParamsBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $params = array(); + if (isset($result[$model->alias]['params']) && strlen($result[$model->alias]['params']) > 0) { + $params = $this->paramsToArray($model, $result[$model->alias]['params']); + } + $results[$i]['Params'] = $params; + } + } elseif (isset($results[$model->alias])) { + $params = array(); + if (isset($results[$model->alias]['params']) && strlen($results[$model->alias]['params']) > 0) { + $params = $this->paramsToArray($model, $results[$model->alias]['params']); + } + $results['Params'] = $params; + } + + return $results; + } +/** + * Converts a string of params to an array of formatted key/value pairs + * + * String is supposed to have one parameter per line in the format: + * my_param_key=value_here + * another_param=another_value + * + * @param object $model + * @param string $params + * @return array + */ + public function paramsToArray(&$model, $params) { + $output = array(); + $params = explode("\n", $params); + foreach ($params AS $param) { + if (strlen($param) == 0) { + continue; + } + + $paramE = explode('=', $param); + if (count($paramE) == 2) { + $key = $paramE['0']; + $value = $paramE['1']; + $output[$key] = $value; + } + } + return $output; + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/.svn/text-base/url.php.svn-base b/app/models/behaviors/.svn/text-base/url.php.svn-base new file mode 100644 index 0000000..abbb01c --- /dev/null +++ b/app/models/behaviors/.svn/text-base/url.php.svn-base @@ -0,0 +1,82 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class UrlBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + $_config = array( + 'url' => array( + 'plugin' => false, + 'controller' => 'nodes', + 'action' => 'view', + ), + 'fields' => array( + 'type', + 'slug', + ), + ); + + if (is_string($config)) { + $config = array($config); + } + + $config = array_merge($_config, $config); + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $url = $this->settings[$model->alias]['url']; + $fields = $this->settings[$model->alias]['fields']; + if (is_array($fields)) { + foreach ($fields AS $field) { + if (isset($results[$i][$model->alias][$field])) { + $url[$field] = $results[$i][$model->alias][$field]; + } + } + } + $results[$i][$model->alias]['url'] = $url; + } + } elseif (isset($results[$model->alias])) { + $url = $this->settings[$model->alias]['url']; + $fields = $this->settings[$model->alias]['fields']; + if (is_array($fields)) { + foreach ($fields AS $field) { + if (isset($results[$i][$model->alias][$field])) { + $url[$field] = $results[$i][$model->alias][$field]; + } + } + } + $results[$model->alias]['url'] = $url; + } + + return $results; + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/cached.php b/app/models/behaviors/cached.php new file mode 100644 index 0000000..af455dd --- /dev/null +++ b/app/models/behaviors/cached.php @@ -0,0 +1,66 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CachedBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterSave callback + * + * @param object $model + * @param boolean $created + * @return void + */ + public function afterSave(&$model, $created) { + $this->_deleteCachedFiles($model); + } +/** + * afterDelete callback + * + * @param object $model + * @return void + */ + public function afterDelete(&$model) { + $this->_deleteCachedFiles($model); + } +/** + * Delete cache files matching prefix + * + * @param object $model + * @return void + */ + protected function _deleteCachedFiles(&$model) { + foreach ($this->settings[$model->alias]['prefix'] AS $prefix) { + $files = glob(TMP.'cache'.DS.'queries'.DS.'cake_'.$prefix.'*'); + if (is_array($files) && count($files) > 0) { + foreach ($files AS $file) { + unlink($file); + } + } + } + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/croogo_translate.php b/app/models/behaviors/croogo_translate.php new file mode 100644 index 0000000..ff1d10e --- /dev/null +++ b/app/models/behaviors/croogo_translate.php @@ -0,0 +1,302 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CroogoTranslateBehavior extends ModelBehavior { +/** + * Used for runtime configuration of model + */ + public $runtime = array(); +/** + * Field names + * + * @var array + */ + public $translationFields = array(); +/** + * Callback + * + * $config for CroogoTranslateBehavior should be + * array( 'fields' => array('field_one', + * 'field_two' => 'FieldAssoc', 'field_three')) + * + * With above example only one permanent hasMany will be joined (for field_two + * as FieldAssoc) + * + * $config could be empty - and translations configured dynamically by + * bindTranslation() method + * + * @param array $config + * @return mixed + * @access public + */ + public function setup(&$model, $config = array()) { + $db =& ConnectionManager::getDataSource($model->useDbConfig); + if (!$db->connected) { + trigger_error( + sprintf(__('Datasource %s for CroogoTranslateBehavior of model %s is not connected', true), $model->useDbConfig, $model->alias), + E_USER_ERROR + ); + return false; + } + + $this->settings[$model->alias] = array(); + $this->runtime[$model->alias] = array('fields' => array()); + $this->translateModel($model); + $this->translationFields[$model->alias] = $config; + //return $this->bindTranslation($model, $config, false); + } +/** + * Callback + * + * @return void + * @access public + */ + public function cleanup(&$model) { + //$this->unbindTranslation($model); + unset($this->settings[$model->alias]); + unset($this->runtime[$model->alias]); + } +/** + * Get field names for Translation + * + * @param object $model + * @return array + * @access public + */ + public function getTranslationFields(&$model) { + if (Set::numeric(array_keys($this->translationFields[$model->alias]))) { + return $this->translationFields[$model->alias]; + } else { + return array_keys($this->translationFields[$model->alias]); + } + } +/** + * afterFind Callback + * + * @param array $results + * @param boolean $primary + * @return array Modified results + * @access public + */ + public function afterFind(&$model, $results, $primary) { + $locale = $this->_getLocale($model); + + if (empty($locale) || empty($results)) { + return $results; + } + + $fields = $this->getTranslationFields($model); + $RuntimeModel =& $this->translateModel($model); + + if ($primary && isset($results[0][$model->alias])) { + $i = 0; + foreach ($results AS $result) { + if (!isset($result[$model->alias][$model->primaryKey])) continue; + + $translations = $RuntimeModel->find('all', array( + 'conditions' => array( + $RuntimeModel->alias.'.model' => $model->alias, + $RuntimeModel->alias.'.foreign_key' => $result[$model->alias][$model->primaryKey], + $RuntimeModel->alias.'.field' => $fields, + ), + )); + + foreach ($translations AS $translation) { + $field = $translation[$RuntimeModel->alias]['field']; + + // Original row + /*if (isset($results[$i][$model->alias][$field])) { + $results[$i][$field.'Original'] = $results[$i][$model->alias][$field]; + }*/ + + // Translated row + if ($translation[$RuntimeModel->alias]['locale'] == $locale && + isset($results[$i][$model->alias][$field])) { + $results[$i][$model->alias][$field] = $translation[$RuntimeModel->alias]['content']; + } + + // Other translations + if (!Set::numeric(array_keys($this->translationFields[$model->alias])) && + isset($results[$i][$model->alias][$field])) { + if (!isset($results[$i][$field.'Translation'])) { + $results[$i][$field.'Translation'] = array(); + } + $results[$i][$field.'Translation'][] = $translation[$RuntimeModel->alias]; + } + } + + $i++; + } + } + + return $results; + } +/** + * Save translation only (in i18n table) + * + * @param object $model + * @param array $data + * @param boolean $validate + */ + public function saveTranslation(&$model, $data = null, $validate = true) { + $model->data = $data; + if (!isset($model->data[$model->alias])) { + return false; + } + + $locale = $this->_getLocale($model); + if (empty($locale)) { + return false; + } + + $RuntimeModel =& $this->translateModel($model); + $conditions = array('model' => $model->alias, 'foreign_key' => $model->id); + + foreach ($model->data[$model->alias] as $field => $value) { + unset($conditions['content']); + $conditions['field'] = $field; + if (is_array($value)) { + $conditions['locale'] = array_keys($value); + } else { + $conditions['locale'] = $locale; + if (is_array($locale)) { + $value = array($locale[0] => $value); + } else { + $value = array($locale => $value); + } + } + $translations = $RuntimeModel->find('list', array('conditions' => $conditions, 'fields' => array($RuntimeModel->alias . '.locale', $RuntimeModel->alias . '.id'))); + foreach ($value as $_locale => $_value) { + $RuntimeModel->create(); + $conditions['locale'] = $_locale; + $conditions['content'] = $_value; + if (array_key_exists($_locale, $translations)) { + if (!$RuntimeModel->save(array($RuntimeModel->alias => array_merge($conditions, array('id' => $translations[$_locale]))))) { + return false; + } + } else { + if (!$RuntimeModel->save(array($RuntimeModel->alias => $conditions))) { + return false; + } + } + } + } + + return true; + } +/** + * afterDelete Callback + * + * @return void + * @access public + */ + public function afterDelete(&$model) { + $RuntimeModel =& $this->translateModel($model); + $conditions = array('model' => $model->alias, 'foreign_key' => $model->id); + $RuntimeModel->deleteAll($conditions); + } +/** + * Get selected locale for model + * + * @return mixed string or false + * @access protected + */ + protected function _getLocale(&$model) { + if (!isset($model->locale) || is_null($model->locale)) { + /* + if (!class_exists('I18n')) { + App::import('Core', 'i18n'); + } + $I18n =& I18n::getInstance(); + $I18n->l10n->get(Configure::read('Config.language')); + $model->locale = $I18n->l10n->locale; + */ + $model->locale = Configure::read('Config.language'); + } + + return $model->locale; + } +/** + * Get instance of model for translations + * + * @return object + * @access public + */ + public function &translateModel(&$model) { + if (!isset($this->runtime[$model->alias]['model'])) { + if (!isset($model->translateModel) || empty($model->translateModel)) { + $className = 'I18nModel'; + } else { + $className = $model->translateModel; + } + + if (PHP5) { + $this->runtime[$model->alias]['model'] = ClassRegistry::init($className, 'Model'); + } else { + $this->runtime[$model->alias]['model'] =& ClassRegistry::init($className, 'Model'); + } + } + if (!empty($model->translateTable) && $model->translateTable !== $this->runtime[$model->alias]['model']->useTable) { + $this->runtime[$model->alias]['model']->setSource($model->translateTable); + } elseif (empty($model->translateTable) && empty($model->translateModel)) { + $this->runtime[$model->alias]['model']->setSource('i18n'); + } + return $this->runtime[$model->alias]['model']; + } +} +if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) { +/** + * @package cake + * @subpackage cake.cake.libs.model.behaviors + */ + class I18nModel extends AppModel { + public $name = 'I18nModel'; + public $useTable = 'i18n'; + public $displayField = 'field'; + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + '', + ), + ), + ); + } +} +?> \ No newline at end of file diff --git a/app/models/behaviors/empty b/app/models/behaviors/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/models/behaviors/encoder.php b/app/models/behaviors/encoder.php new file mode 100644 index 0000000..9b9f635 --- /dev/null +++ b/app/models/behaviors/encoder.php @@ -0,0 +1,87 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class EncoderBehavior extends ModelBehavior { + + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * Encode data + * + * Turn array into a JSON + * + * @param object $model model + * @param array $data data + * @param array $options (optional) + * @return string + */ + public function encodeData(&$model, $data, $options = array()) { + $_options = array( + 'json' => false, + 'trim' => true, + ); + $options = array_merge($_options, $options); + + if (is_array($data) && count($data) > 0) { + // trim + if ($options['trim']) { + $elements = array(); + foreach($data AS $id => $d) { + $d = trim($d); + if ($d != '') { + $elements[$id] = '"' . $d . '"'; + } + } + } else { + $elements = $data; + } + + // encode + if (count($elements) > 0) { + if ($options['json']) { + $output = json_encode($elements); + } else { + $output = '[' . implode(',', $elements) . ']'; + } + } else { + $output = ''; + } + } else { + $output = ''; + } + + return $output; + } +/** + * Decode data + * + * @param object $model model + * @param string $data data + * @return array + */ + public function decodeData(&$model, $data) { + if ($data == '') { + $output = ''; + } else { + $output = json_decode($data, true); + } + + return $output; + } +} +?> \ No newline at end of file diff --git a/app/models/behaviors/meta.php b/app/models/behaviors/meta.php new file mode 100644 index 0000000..82019f7 --- /dev/null +++ b/app/models/behaviors/meta.php @@ -0,0 +1,103 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class MetaBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $customFields = array(); + if (isset($result['Meta']) && count($result['Meta']) > 0) { + $customFields = Set::combine($result, 'Meta.{n}.key', 'Meta.{n}.value'); + } + $results[$i]['CustomFields'] = $customFields; + } + } elseif (isset($results[$model->alias])) { + $customFields = array(); + if (isset($results['Meta']) && count($results['Meta']) > 0) { + $customFields = Set::combine($results, 'Meta.{n}.key', 'Meta.{n}.value'); + } + $results['CustomFields'] = $customFields; + } + + return $results; + } +/** + * Prepare data + * + * @param object $model + * @param array $data + * @return array + */ + public function prepareData(&$model, $data) { + return $this->__prepareMeta($data); + } +/** + * Private method for MetaBehavior::prepareData() + * + * @param object $model + * @param array $data + * @return array + */ + private function __prepareMeta($data) { + if (isset($data['Meta']) && + is_array($data['Meta']) && + count($data['Meta']) > 0 && + !Set::numeric(array_keys($data['Meta']))) { + $meta = $data['Meta']; + $data['Meta'] = array(); + $i = 0; + foreach ($meta AS $metaUuid => $metaArray) { + $data['Meta'][$i] = $metaArray; + $i++; + } + } + + return $data; + } +/** + * Save with meta + * + * @param object $model + * @param array $data + * @param array $options + * @return void + */ + public function saveWithMeta(&$model, $data, $options = array()) { + $data = $this->__prepareMeta($data); + return $model->saveAll($data, $options); + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/ordered.php b/app/models/behaviors/ordered.php new file mode 100644 index 0000000..b358c9c --- /dev/null +++ b/app/models/behaviors/ordered.php @@ -0,0 +1,664 @@ + array( + * 'field' => 'page_number', + * 'foreign_key' => 'book_id' + * )); + * + * Now when you save a new page (no changes needed to action or view, + * but leave page_number out of the form), it will be added to the end + * of the book. + * + * When deleting, the weights will automatically be adjusted to fill in + * the vacum. + * + * NB! Note that if using Model::deleteAll() it is VERY important that you + * assign it to use callbacks 'beforeDelete' and 'afterDelete', like this: + * + * // in controller action + * $this->Page->deleteAll(array('user_id'=>22),true,array('beforeDelete','afterDelete')); + * + * Now lets say the last two pages to be created got made in the wrong + * order, so you want to move the last page "up" one space. With the + * a simple controller call to the model like this that can be achieved: + * + * // in a controller action : + * $this->Page->moveup($id); + * // the id here is the id of the newest page + * + * You find that the first page you made is suppose to be the 5 pages later: + * + * // in a controller action : + * $this->Page->movedown($id, 5); + * + * Also you discovered that in the first page got put in the middle. This + * can easily be moved first by doing this : + * + * // in a controller action : + * $this->Page->moveup($id,true); + * // true will move it to the extre in that direction + * + * You can also use actions to find out if the node is first or last page : + * + * - isfirst($id) + * - islast($id) + * + * And a last feature is the ability to sort the list by any field + * you want and have it set weights based on that. You do that like this : + * + * //in controller action : + * $this->Page->sortby('content DESC', $book_id); + * // dont ask me why you would sort the pages of a book by its content lol + * + * Note that this behaviour will also let you sort an entire table as one list. + * To do that you simply set the 'foreign_key' to false (and dont create the field + * in the table). Now there will only be one set of weights. (Note you need the weight + * field as normal) + * + * @author Alexander Morland aka alkemann + * @license MIT + * @modified 17. nov. 2008 (model independent settings) + * @version 2.1.3 + * + */ +class OrderedBehavior extends ModelBehavior { + public $name = 'Ordered'; + + /** + * field : (string) The field to be ordered by. + * + * foreign_key : (string) The field to identify one SET by. + * Each set has their own order (ie they start at 1). + * Set to FALSE to not use this feature (and use only 1 set) + */ + public $_defaults = array('field' => 'weight', 'foreign_key' => 'order_id'); + + public function setup(&$Model, $config = array()) { + if (!is_array($config)) { + $config = array(); + } + $this->settings[$Model->alias] = array_merge($this->_defaults, $config); + $Model->order = $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' ASC'; + } + + public function beforedelete(&$Model) { + $Model->read(); + $highest = $this->_highest($Model); + if (!empty($Model->data) && ($Model->data[$Model->alias][$Model->primaryKey] == $highest[$Model->alias][$Model->primaryKey])) { + $Model->data = null; + } + } + public function afterdelete(&$Model) { + if ($Model->data) { + // What was the weight of the deleted model? + $old_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + // update the weight of all models of higher weight by + + + $action = array($this->settings[$Model->alias]['field'] => $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + // decreasing them by 1 + return $Model->updateAll($action, $conditions); + } + return true; + } + /** + * Sets the weight for new items so they end up at end + * + * @todo add new model with weight. clean up after + * @param Model $Model + */ + public function beforesave(&$Model) { + // Check if weight id is set. If not add to end, if set update all + // rows from ID and up + if (!isset($Model->data[$Model->alias][$Model->primaryKey])) { + // get highest current row + $highest = $this->_highest($Model); + // set new weight to model as last by using current highest one + 1 + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1; + } + return true; + } + + /** + * Moving a node to specific weight, it will shift the rest of the table to make room. + * + * @param Object $Model + * @param int $id The id of the node to move + * @param int $new_weight the new weight of the node + * @return boolean True of move successful + */ + public function moveto(&$Model, $id = null, $new_weight = null) { + if (!$id || !$new_weight || $new_weight < 1) { + return false; + } + $highest = $this->_highest($Model); + // fetch the model and its old weight + $old_weight = $this->_read($Model, $id); + + //check if new weight is too big + if ($new_weight > $highest[$Model->alias][$this->settings[$Model->alias]['field']]) { + return false; + } + if ($new_weight === true && $old_weight == 0) { + $new_weight = $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1; + } + if (empty($Model->data)) { + return false; + } + $conditions = array(); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + + // give Model new weight + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + if ($new_weight == $old_weight) { + // move to same location? + return false; + } elseif ($old_weight == 0) { + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + } elseif ($new_weight > $old_weight) { + // move all nodes that have weight > old_weight AND <= new_weight up one (-1) + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >'] = $old_weight; + } else { // $new_weight < $old_weight + // move all where weight >= new_weight AND < old_weight down one (+1) + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'); + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <'] = $old_weight; + + } + $Model->updateAll($action, $conditions); + return $Model->save(null, false); + } + + /** + * Take in an order array and sorts the list based on that order specification + * and creates new weights for it. If no foreign key is supplied, all lists + * will be sorted. + * + * @todo foreign key independent + * @param Object $Model + * @param array $order + * @param mixed $foreign_key + * $returns boolean true if successfull + */ + public function sortby(&$Model, $order, $foreign_key = null) { + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + $conditions = array(1 => 1); + if ($this->settings[$Model->alias]['foreign_key']) { + if (!$foreign_key) { + return false; + } + $fields[] = $this->settings[$Model->alias]['foreign_key']; + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $foreign_key); + } + + $all = $Model->find('all', array( + 'fields' => $fields, + 'conditions' => $conditions, + 'recursive' => -1, + 'order' => $order)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + return $Model->saveAll($all); + } + + /** + * Reorder the node, by moving it $number spaces up. Defaults to 1 + * + * If the node is the first node (or less then $number spaces from first) + * this method will return false. + * + * @param AppModel $Model + * @param mixed $id The ID of the record to move + * @param mixed $number how many places to move the node or true to move to last position + * @return boolean true on success, false on failure + * @access public + */ + public function moveup(&$Model, $id = null, $number = 1) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } + $old_weight = $this->_read($Model, $id); + if (empty($Model->data)) { + return false; + } + if (is_numeric($number)) { + if ($number == 1) { // move 1 space + $previous = $this->_previous($Model); + if (!$previous) { + return false; + } + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $previous[$Model->alias][$this->settings[$Model->alias]['field']]; + + $previous[$Model->alias][$this->settings[$Model->alias]['field']] = $old_weight; + + $data[0] = $Model->data; + $data[1] = $previous; + + return $Model->saveAll($data, array('validate' => false)); + + } elseif ($number < 1) { // cant move 0 or negative spaces + return false; + } else { // move Model up N spaces UP + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array(); + } + + // find the one occupying new space and its weight + $new_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] - $number; + // check if new weight is possible. else move last + if (!$this->_findByWeight($Model, $new_weight)) { + return false; + } + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <'] = $old_weight; + // increase weight of all where weight > new weight and id != Model.id + $Model->updateAll(array( + $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'), $conditions); + + // set Model weight to new weight and save it + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + return $Model->save(null, false); + } + } elseif (is_bool($number) && $number && $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] != 1) { // move Model FIRST; + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <' => $old_weight, + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <' => $old_weight); + } + $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + $Model->saveField($this->settings[$Model->alias]['field'], 0); + $Model->updateAll(array( // update + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' + 1'), $conditions); + + return true; + } else { // $number is neither a number nor a bool + return false; + } + } + + /** + * This will create weights based on display field. The purpose of the method is to create + * weights for tables that existed before this behavior was added. + * + * @param Object $Model + * @return boolean success + */ + public function resetweights(&$Model) { + if ($this->settings[$Model->alias]['foreign_key']) { + $temp = $Model->find('all', array( + 'fields' => $this->settings[$Model->alias]['foreign_key'], + 'group' => $this->settings[$Model->alias]['foreign_key'], + 'recursive' => -1)); + $foreign_keys = Set::extract($temp, '{n}.' . $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']); + foreach ($foreign_keys as $fk) { + $all = $Model->find('all', array( + 'conditions' => array($this->settings[$Model->alias]['foreign_key'] => $fk), + 'fields' => array( + $Model->displayField, + $Model->primaryKey, + $this->settings[$Model->alias]['field'], + $this->settings[$Model->alias]['foreign_key']), + 'order' => $Model->displayField)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + if (!$Model->saveAll($all)) { + return false; + } + } + } else { + $all = $Model->find('all', array( + 'fields' => array( + $Model->displayField, + $Model->primaryKey, + $this->settings[$Model->alias]['field']), + 'order' => $Model->displayField)); + $i = 1; + foreach ($all as $key => $one) { + $all[$key][$Model->alias][$this->settings[$Model->alias]['field']] = $i++; + } + if (!$Model->saveAll($all)) { + return false; + } + } + return true; + } + + /** + * Reorder the node, by moving it $number spaces down. Defaults to 1 + * + * If the node is the last node (or less then $number spaces from last) + * this method will return false. + * + * @param AppModel $Model + * @param mixed $id The ID of the record to move + * @param mixed $number how many places to move the node or true to move to last position + * @return boolean true on success, false on failure + * @access public + */ + public function movedown(&$Model, $id = null, $number = 1) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } + $old_weight = $this->_read($Model, $id); + if (empty($Model->data)) { + return false; + } + if (is_numeric($number)) { + if ($number == 1) { // move node 1 space down + $next = $this->_next($Model); + if (!$next) { // it is the last node + return false; + } + // switch the node's weight around + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $next[$Model->alias][$this->settings[$Model->alias]['field']]; + + $next[$Model->alias][$this->settings[$Model->alias]['field']] = $old_weight; + + // create an array of the two nodes and save them + $data[0] = $Model->data; + $data[1] = $next; + return $Model->saveAll($data, array('validate' => false)); + + } elseif ($number < 1) { // cant move 0 or negative number of spaces + return false; + } else { // move Model up N spaces DWN + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array(); + } + + // find the one occupying new space and its weight + $new_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] + $number; + // check if new weight is possible. else move last + if (!$this->_findByWeight($Model, $new_weight)) { + return false; + } + // increase weight of all where weight > new weight and id != Model.id + + + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' <='] = $new_weight; + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >'] = $old_weight; + + $Model->updateAll(array( + $this->settings[$Model->alias]['field'] => $this->settings[$Model->alias]['field'] . ' - 1'), $conditions); + + // set Model weight to new weight and save it + $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] = $new_weight; + return $Model->save(null, false); + } + + } elseif (is_bool($number) && $number) { // move Model LAST; + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight, + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + } else { + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + } + + // get highest weighted row + $highest = $this->_highest($Model); + // check of Model is allready highest + if ($highest[$Model->alias][$Model->primaryKey] == $Model->data[$Model->alias][$Model->primaryKey]) { + return false; + } + // Save models as highest +1 + $Model->saveField($this->settings[$Model->alias]['field'], $highest[$Model->alias][$this->settings[$Model->alias]['field']] + 1); + // updated all by taking off 1 + $Model->updateAll(array( // action + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'), $conditions); + + return true; + } else { // $number is neither a number nor a bool + return false; + } + } + + /** + * Returns true if the specified item is the first item + * + * @param Model $Model + * @param Int $id + * @return Boolean, true if it is the first item, false if not + */ + public function isfirst(&$Model, $id = null) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } else { + $Model->id = $id; + } + $Model->read(); + + $first = $this->_read($Model, $id); + if ($Model->data[$Model->alias][$this->settings[$Model->alias]['field']] == 1) { + return true; + } else { + return false; + } + } + + /** + * Returns true if the specified item is the last item + * + * @param Model $Model + * @param Int $id + * @return Boolean, true if it is the last item, false if not + */ + public function islast(&$Model, $id = null) { + if (!$id) { + if ($Model->id) { + $id = $Model->id; + } elseif (!empty($Model->data) && isset($Model->data[$Model->alias][$Model->primaryKey])) { + $id = $Model->id = $Model->data[$Model->alias][$Model->primaryKey]; + } else { + return false; + } + } else { + $Model->id = $id; + } + $Model->read(); + $last = $this->_highest($Model); + return ($last[$Model->alias][$Model->primaryKey] == $id); + } + + /** + * Removing an item from the list means to set its field to 0 and updating the other items to be "complete" + * + * @param Model $Model + * @param int $id + * @return boolean + */ + public function removefromlist(&$Model, $id) { + $this->_read($Model, $id); + $old_weight = $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + $action = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] => $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' - 1'); + $conditions = array( + $Model->alias . '.' . $this->settings[$Model->alias]['field'] . ' >' => $old_weight); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + } + $data = $Model->data; + $data[$Model->alias][$this->settings[$Model->alias]['field']] = 0; + if (!$Model->save($data, false)) { + return false; + } + return $Model->updateAll($action, $conditions); + } + + private function _findbyweight(&$Model, $weight) { + $conditions = array($this->settings[$Model->alias]['field'] => $weight); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _highest(&$Model) { + $options = array( + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => array($Model->primaryKey, $this->settings[$Model->alias]['field']), + 'recursive' => -1); + if ($this->settings[$Model->alias]['foreign_key']) { + if (empty($Model->data) || !isset($Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']])) { + $this->_read($Model, $Model->id); + } + $options['conditions'] = array( + $Model->alias . '.' . $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + $options['fields'][] = $this->settings[$Model->alias]['foreign_key']; + } + $temp_model_id = $Model->id; + $Model->id = null; + $last = $Model->find('first', $options); + $Model->id = $temp_model_id; + return $last; + } + + private function _previous(&$Model) { + $conditions = array( + $this->settings[$Model->alias]['field'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] - 1); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _next(&$Model) { + $conditions = array( + $this->settings[$Model->alias]['field'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['field']] + 1); + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $conditions[$Model->alias . '.' . $this->settings[$Model->alias]['foreign_key']] = $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]; + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('first', array( + 'conditions' => $conditions, + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => $fields, + 'recursive' => -1)); + } + + private function _all(&$Model) { + $options = array( + 'order' => $this->settings[$Model->alias]['field'] . ' DESC', + 'fields' => array($Model->primaryKey, $this->settings[$Model->alias]['field']), + 'recursive' => -1); + if ($this->settings[$Model->alias]['foreign_key']) { + $options['conditions'] = array( + $this->settings[$Model->alias]['foreign_key'] => $Model->data[$Model->alias][$this->settings[$Model->alias]['foreign_key']]); + $options['fields'][] = $this->settings[$Model->alias]['foreign_key']; + } + return $Model->find('all', $options); + } + + private function _read(&$Model, $id) { + $Model->id = $id; + $fields = array($Model->primaryKey, $this->settings[$Model->alias]['field']); + if ($this->settings[$Model->alias]['foreign_key']) { + $fields[] = $this->settings[$Model->alias]['foreign_key']; + } + $Model->data = $Model->find('first', array( + 'fields' => $fields, + 'conditions' => array($Model->primaryKey => $id), + 'recursive' => -1)); + return $Model->data[$Model->alias][$this->settings[$Model->alias]['field']]; + } +} +?> diff --git a/app/models/behaviors/params.php b/app/models/behaviors/params.php new file mode 100644 index 0000000..04acc5e --- /dev/null +++ b/app/models/behaviors/params.php @@ -0,0 +1,86 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ParamsBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $params = array(); + if (isset($result[$model->alias]['params']) && strlen($result[$model->alias]['params']) > 0) { + $params = $this->paramsToArray($model, $result[$model->alias]['params']); + } + $results[$i]['Params'] = $params; + } + } elseif (isset($results[$model->alias])) { + $params = array(); + if (isset($results[$model->alias]['params']) && strlen($results[$model->alias]['params']) > 0) { + $params = $this->paramsToArray($model, $results[$model->alias]['params']); + } + $results['Params'] = $params; + } + + return $results; + } +/** + * Converts a string of params to an array of formatted key/value pairs + * + * String is supposed to have one parameter per line in the format: + * my_param_key=value_here + * another_param=another_value + * + * @param object $model + * @param string $params + * @return array + */ + public function paramsToArray(&$model, $params) { + $output = array(); + $params = explode("\n", $params); + foreach ($params AS $param) { + if (strlen($param) == 0) { + continue; + } + + $paramE = explode('=', $param); + if (count($paramE) == 2) { + $key = $paramE['0']; + $value = $paramE['1']; + $output[$key] = $value; + } + } + return $output; + } + +} +?> \ No newline at end of file diff --git a/app/models/behaviors/url.php b/app/models/behaviors/url.php new file mode 100644 index 0000000..abbb01c --- /dev/null +++ b/app/models/behaviors/url.php @@ -0,0 +1,82 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class UrlBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + $_config = array( + 'url' => array( + 'plugin' => false, + 'controller' => 'nodes', + 'action' => 'view', + ), + 'fields' => array( + 'type', + 'slug', + ), + ); + + if (is_string($config)) { + $config = array($config); + } + + $config = array_merge($_config, $config); + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + $url = $this->settings[$model->alias]['url']; + $fields = $this->settings[$model->alias]['fields']; + if (is_array($fields)) { + foreach ($fields AS $field) { + if (isset($results[$i][$model->alias][$field])) { + $url[$field] = $results[$i][$model->alias][$field]; + } + } + } + $results[$i][$model->alias]['url'] = $url; + } + } elseif (isset($results[$model->alias])) { + $url = $this->settings[$model->alias]['url']; + $fields = $this->settings[$model->alias]['fields']; + if (is_array($fields)) { + foreach ($fields AS $field) { + if (isset($results[$i][$model->alias][$field])) { + $url[$field] = $results[$i][$model->alias][$field]; + } + } + } + $results[$model->alias]['url'] = $url; + } + + return $results; + } + +} +?> \ No newline at end of file diff --git a/app/models/block.php b/app/models/block.php new file mode 100644 index 0000000..3483393 --- /dev/null +++ b/app/models/block.php @@ -0,0 +1,83 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Block extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Block'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Encoder', + 'Ordered' => array( + 'field' => 'weight', + 'foreign_key' => false, + ), + 'Cached' => array( + 'prefix' => array( + 'block_', + 'blocks_', + 'croogo_blocks_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Region' => array( + 'className' => 'Region', + 'foreignKey' => 'region_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'counterCache' => true, + 'counterScope' => array('Block.status' => 1), + ), + ); + +} +?> \ No newline at end of file diff --git a/app/models/cliente.php b/app/models/cliente.php new file mode 100644 index 0000000..243addc --- /dev/null +++ b/app/models/cliente.php @@ -0,0 +1,110 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Cliente extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'User'; +/** + * Order + * + * @var string + * @access public + */ + public $order = 'name ASC'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Acl' => array('type' => 'requester'), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array('Role'); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'username' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'The username has already been taken.', + ), + 'notEmpty' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + ), + 'email' => array( + 'email' => array( + 'rule' => 'email', + 'message' => 'Please provide a valid email address.', + ), + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'Email address already in use.', + ), + ), + 'password' => array( + 'rule' => array('minLength', 6), + 'message' => 'Passwords must be at least 6 characters long.', + ), + 'name' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + ); + + public function parentNode() { + if (!$this->id && empty($this->data)) { + return null; + } + $data = $this->data; + if (empty($this->data)) { + $data = $this->read(); + } + if (!isset($data['User']['role_id']) || !$data['User']['role_id']) { + return null; + } else { + return array('Role' => array('id' => $data['User']['role_id'])); + } + } + + public function afterSave($created) { + if (!$created) { + $parent = $this->parentNode(); + $parent = $this->node($parent); + $node = $this->node(); + $aro = $node[0]; + $aro['Aro']['parent_id'] = $parent[0]['Aro']['id']; + $this->Aro->save($aro); + } + } + + +} +?> \ No newline at end of file diff --git a/app/models/codigo.php b/app/models/codigo.php new file mode 100644 index 0000000..e95e861 --- /dev/null +++ b/app/models/codigo.php @@ -0,0 +1,43 @@ + array('numeric'), + 'codigo' => array('notempty') + ); + + //The Associations below have been created with all possible keys, those that are not needed can be removed + var $belongsTo = array( + 'User' => array( + 'className' => 'User', + 'foreignKey' => 'users_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ), + /* + 'Aviso' => array( + 'className' => 'Aviso', + 'foreignKey' => 'codigos_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + */ + ); + + + + var $hasMany = array( + 'Aviso' => array( + 'className' => 'Aviso', + 'foreignKey' => 'codigos_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + ); + +} +?> \ No newline at end of file diff --git a/app/models/comment.php b/app/models/comment.php new file mode 100644 index 0000000..8d095ab --- /dev/null +++ b/app/models/comment.php @@ -0,0 +1,75 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Comment extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Comment'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Tree', + 'Containable', + 'Cached' => array( + 'prefix' => array( + 'comment_', + 'nodes_', + 'node_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'body' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'name' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'email' => array( + 'rule' => 'email', + 'required' => true, + 'message' => 'Please enter a valid email address.', + ), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Node' => array( + 'counterCache' => true, + 'counterScope' => array('Comment.status' => 1), + ), + 'User', + ); + +} +?> \ No newline at end of file diff --git a/app/models/company.php b/app/models/company.php new file mode 100644 index 0000000..1406ca3 --- /dev/null +++ b/app/models/company.php @@ -0,0 +1,28 @@ +CompanyEmail->find('all', array( + + 'order' => array('message_date' => 'DESC') + ) +*/ +?> \ No newline at end of file diff --git a/app/models/contact.php b/app/models/contact.php new file mode 100644 index 0000000..7c90345 --- /dev/null +++ b/app/models/contact.php @@ -0,0 +1,83 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Contact extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Contact'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + 'contact_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + 'email' => array( + 'rule' => 'email', + 'message' => 'Please provide a valid email address.', + ), + ); +/** + * Model associations: hasMany + * + * @var array + * @access public + */ + public $hasMany = array( + 'Message' => array( + 'className' => 'Message', + 'foreignKey' => 'contact_id', + 'dependent' => false, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '3', + 'offset' => '', + 'exclusive' => '', + 'finderQuery' => '', + 'counterQuery' => '', + ), + ); +} +?> \ No newline at end of file diff --git a/app/models/datasources/.svn/entries b/app/models/datasources/.svn/entries new file mode 100644 index 0000000..ec30a09 --- /dev/null +++ b/app/models/datasources/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/models/datasources +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +rastreamento_source.php +file + + + + +2010-09-09T18:17:00.000000Z +bfe80965b37a63a62d4962733db5f4af +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +521 + +frete_source.php +file + + + + +2010-09-15T19:25:44.000000Z +0f68c6a80cc312b006c883e87160f3b9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2927 + +imap_source.php +file + + + + +2010-06-16T03:15:26.000000Z +fa29a301d26dff3dded219e2230bb669 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +17268 + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/models/datasources/.svn/text-base/empty.svn-base b/app/models/datasources/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/models/datasources/.svn/text-base/frete_source.php.svn-base b/app/models/datasources/.svn/text-base/frete_source.php.svn-base new file mode 100644 index 0000000..cb20e84 --- /dev/null +++ b/app/models/datasources/.svn/text-base/frete_source.php.svn-base @@ -0,0 +1,147 @@ + array( + + 'nCdEmpresa' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sDsSenha' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nCdServico' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 5 + ), + 'sCepOrigem' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 8 + ), + 'sCepDestino' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 8 + //78300000 + ), + 'nVlPeso' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 10 + ), + 'nCdFormato' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + 'nVlComprimento' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlAltura' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlLargura' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlDiametro' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sCdMaoPropria' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + 'nVlValorDeclarado' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sCdAvisoRecebimento' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + + ) + ); + + + + public function __construct($config) + { + + $this->conection = new HttpSocket( + 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx' + ); + + parent::__construct($config); + } + + + + public function read( $queryData = array()) + { + + if( !isset($queryData['conditions']['nCdServico'])) + { + $queryData['conditions']['nCdServico'] = 40051; + } + + return $queryData; + } + + + + public function listSources() + { + return array('fretes'); + } + + + + public function describe(&$model) + { + return $this->_schema['fretes']; + } + + +} + +?> \ No newline at end of file diff --git a/app/models/datasources/.svn/text-base/imap_source.php.svn-base b/app/models/datasources/.svn/text-base/imap_source.php.svn-base new file mode 100644 index 0000000..b518257 --- /dev/null +++ b/app/models/datasources/.svn/text-base/imap_source.php.svn-base @@ -0,0 +1,635 @@ +ImapModel->find('all') is called. + * Now $this->ImapModel->delete($id) is working too. + * + * Implementation reference: http://bin.cakephp.org/view/154300048 + * + * Original implementations by: Moose and Gwoo. + * + * @package cakephp_imap_datasource + */ +class ImapSource extends DataSource { + + /** + * Description + * + * @var string + */ + public $description = 'Imap Data Source'; + + /** + * Default configuration. + * + * @var array + */ + public $_baseConfig = array( + 'host' => 'localhost', + 'connect' => 'imap/notls', + 'login' => 'root', + 'password' => '', + 'mailbox' => 'INBOX', + 'port' => '143' + ); + + /** + * Default array of field list for imap mailbox. + * + * @var array + */ + protected $_fields = array( + 'subject', + 'from', + 'to', + 'date', + 'message_id', + 'references', + 'in_reply_to', + 'size', + 'uid', + 'msgno', + 'recent', + 'flagged', + 'answered', + 'deleted', + 'seen', + 'draft', + 'body', + 'attachment' + ); + +// protected $_schema = array( +// example: +// 'tweets' => array( +// 'id' => array( +// 'type' => 'integer', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 11, +// ), +// 'text' => array( +// 'type' => 'string', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 140 +// ), +// 'status' => array( +// 'type' => 'string', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 140 +// ), +// ), +// 'emails' => array( +// 'subject' => array(), +// 'from' => array(), +// 'to' => array(), +// 'date' => array(), +// 'message_id' => array(), +// 'references' => array(), +// 'in_reply_to' => array(), +// 'size' => array(), +// 'uid' => array(), +// 'msgno' => array(), +// 'recent' => array(), +// 'flagged' => array(), +// 'answered' => array(), +// 'deleted' => array(), +// 'seen' => array(), +// 'draft' => array() +// ) +// ); + + /** + * Flag to keep in mind, if only find('count') is executed. + * + * @var boolean + */ + public $countonly = false; + + /** + * Global vars for decoding a message + */ + public $htmlmsg; + public $plainmsg; + public $charset; + public $attachments; + + /** + * Constructor + */ + public function __construct($config = null, $autoConnect = true) { + $this->debug = Configure::read('debug') > 0; + $this->fullDebug = Configure::read('debug') > 1; + // debug($config); + parent::__construct($config); + + if ($autoConnect) { + return $this->connect(); + } else { + return true; + } + } + + /** + * Destructor + */ + public function __destruct() { + if ($this->isConnected()) { + $this->close(); + } + } + + /** + * Connects to the mailbox using options in the given configuration array. + * + * @return boolean True if the mailbox could be connected, else false + */ + public function connect() { + $config = $this->config; + $this->connected = false; + + $this->connection = imap_open("{{$config['host']}:{$config['port']}/{$config['connect']}}{$config['mailbox']}", $config['login'], $config['password']); + if ($this->connection) { + // debug('connect'); + $this->connected = true; + } + return $this->connected; + } + + /** + * Reconnects to database server with optional new settings + * + * @param array $config An array defining the new configuration settings + * @return boolean True on success, false on failure + */ + public function reconnect($config = null) { + $this->disconnect(); + if ($config != null) { + $this->config = am($this->_baseConfig, $config); + } + return $this->connect(); + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + public function lastError() { + if ($lastError = imap_last_error()) { + $this->errors = imap_errors(); + $this->connected = false; + return $lastError; + } + return false; + } + + /** + * Delete + * + * @created: 15.10.2008 18:35:38 + * @param type $var + * + */ + public function delete(&$model) { +// debug("ImapSource::delete({$model->id})"); +// debug(func_get_args()); +// die(); + if ($this->connected) { + $id = $model->id; + imap_delete($this->connection, $id); + imap_expunge($this->connection); + return true; + } + return false; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + public function read(&$model, $queryData = array(), $recursive = null) { + $queryData = $this->__scrubQueryData($queryData); + if ($this->connected) { + $mc = imap_check($this->connection); + $mc = min($mc->Nmsgs, $queryData['limit']); + + if (!isset($queryData['options'])) { + $queryData['options'] = 0; + } + if (!isset($queryData['search'])) { + $queryData['search'] = null; + } + + $imapOrder = array(); + list($imapOrder['criteria'], $imapOrder['reverse']) = $this->_imapOrderFormat($queryData['order']); + + $resultSet = imap_sort($this->connection, $imapOrder['criteria'], $imapOrder['reverse'], $queryData['options'], $queryData['search'], $this->charset); + $result = array(); + for ($i = 0; $i < $mc; $i++) { + $result_tmp = imap_fetch_overview($this->connection, $resultSet[$i]); + $result[] = $result_tmp[0]; + } + $result = $this->_imapFormat($model, $queryData, $result); + return $result; + } else { + return false; + } + return $resultSet; + } + + /** + * Convert from simple field to imapSort order criteria + * + * order fields: 'message_date|date', 'arrival_date', 'from_address', 'subject', 'to_address', 'cc_address', 'size' + * + * @param array() $order + * @return array() + */ + private function _imapOrderFormat($order = null) { + $allowedOrderFields = array( + 'message_date', + 'date', + 'arrival_date', + 'from_address', + 'subject', + 'to_address', + 'cc_address', + 'size' + ); + + if (!$order) { + return array(SORTDATE, 0); + } + + $criteria = 'date'; + $reverse = 0; + + if (is_array($order[0])) { + $keys = array_keys($order[0]); + if (is_int($keys[0])) { + $criteria = $order[0][$keys[0]]; + } else { + $criteria = low($keys[0]); + $reverse = low($order[0][$keys[0]]) == 'asc' ? 0 : 1; + } + } else { + $criteria = low($order[0]); + } + + if (!in_array($criteria, $allowedOrderFields)) { + return array(SORTDATE, 0); + } + + switch ($criteria) { + case 'message_date': + case 'date': + return array(SORTDATE, $reverse); + break; + + case 'arrival_date': + return array(SORTARRIVAL, $reverse); + break; + + case 'from_address': + return array(SORTFROM, $reverse); + break; + + case 'subject ': + return array(SORTSUBJECT, $reverse); + break; + + case 'to_address': + return array(SORTTO, $reverse); + break; + + case 'cc_address': + return array(SORTCC, $reverse); + break; + + case 'size': + return array(SORTSIZE, $reverse); + break; + + default: + return array(SORTDATE, 0); + } + } + + private function _imapFormat($model, $queryData, $data) { + $res = array(); + $count = count($data); + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + $fields = $queryData['fields']; + } else { + $fields = $this->_fields; + } + + $hasBody = $this->checkBody($queryData); + $hasAttachment = $this->checkAttachment($queryData); + //debug($hasAttachment); + //debug($hasBody); + $i = 0; + foreach ($data as $d) { + // transfer the fields + $res[$i][$model->alias]['id'] = $d->msgno; + foreach ($fields as $field) { + if ($field != 'body') { + if (!empty($d->{$field})) { + $res[$i][$model->alias][$field] = $d->{$field}; + } + } + + if ($hasBody) { + $this->getmsg($this->connection, $d->msgno); + if (!empty($this->htmlmsg)) { + $res[$i][$model->alias]['htmlmsg'] = $this->htmlmsg; + } + if (!empty($this->plainmsg)) { + $res[$i][$model->alias]['plainmsg'] = $this->plainmsg; + } + if ($hasAttachment) { + if (!empty($this->attachments)) { + $res[$i][$model->alias]['attachments'] = $this->attachments; + } + } + if (!empty($this->charset)) { + $res[$i][$model->alias]['charset'] = $this->charset; + } + } + } + $i++; + } + return $res; + } + + private function checkBody($queryData) { + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + if (in_array('body', $queryData['fields'])) { + return true; + } + } + if ((isset($queryData['fields']) && empty($queryData['fields'])) || !isset($queryData['fields'])) { + return true; + } + return false; + } + + private function checkAttachment($queryData) { + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + if (in_array('attachments', $queryData['fields'])) { + return true; + } + } + if ((isset($queryData['fields']) && empty($queryData['fields'])) || !isset($queryData['fields'])) { + return true; + } + return false; + } + + function calculate(&$model, $func, $params = array()) { + debug('calculate:'.$func); + if ($func == 'count') { + $this->countonly = true; + $this->numRows = imap_num_msg($this->connection); + //debug($this->numRows); + return $this->numRows; + } else { + debug($func); + } + return false; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function query() { + // imap_ + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function describe() { + //debug('describe'); + $mailbox = imap_check($this->connection); + + if ($mailbox) { + $mbox["Date"] = $mailbox->Date; + $mbox["Driver"] = $mailbox->Driver; + $mbox["Mailbox"] = $mailbox->Mailbox; + $mbox["Messages"]= $mailbox->Nmsgs; + $mbox["Recent"] = $this->numRecent(); + // set numRows + $this->numRows = $mailbox->Nmsgs; + } + //debug($mbox); + return $mbox; + } + + /** + * Number of Total Emails + */ + function numMessages() { + //debug('numMessages'); + return imap_num_msg($this->connection); + } + + /** + * Number of Recent Emails + */ + function numRecent() { + //debug('numRecent'); + return imap_num_recent($this->connection); + } + + /** + * Caches/returns cached results for child instances + * + * @return array + */ + function listSources() { + if ($this->cacheSources === false) { + return null; + } + + if ($this->_sources !== null) { + return $this->_sources; + } + + $sources = imap_getmailboxes($this->connection, "{{$config['host']}}", "*"); + + $this->_sources = $sources; + return $sources; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function column() { + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function isConnected() { + return $this->connected; + } + + /** + * Disconnects from mailbox. + * + * @return boolean True if the database could be disconnected, else false + */ + function disconnect() { + $this->connected = !@imap_close($this->connection); + return !$this->connected; + } + + /** + * Disconnects database, kills the connection and says the connection is closed, + * and if DEBUG is turned on, the log for this object is shown. + * + */ + function close() { + if ($this->fullDebug) { + $this->showLog(); + } + $this->disconnect(); + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function showLog() { + } + + function __scrubQueryData($data) { + foreach (array('conditions', 'fields', 'order', 'limit', 'offset', 'group') as $key) { + if (!isset($data[$key]) || empty($data[$key])) { + $data[$key] = array(); + } + } + return $data; + } + + private function getmsg($mbox,$mid) { + // input $mbox = IMAP stream, $mid = message id + // output all the following: + // global $this->htmlmsg,$this->plainmsg,$this->charset,$this->attachments; + // the message may in $this->htmlmsg, $this->plainmsg, or both + $this->htmlmsg = ''; + $this->plainmsg = ''; + $this->charset = ''; + $this->attachments = array(); + + // HEADER - we have it already + // $h = imap_header($mbox,$mid); + // add code here to get date, from, to, cc, subject... + + // BODY + $s = imap_fetchstructure($mbox, $mid); + if (isset($s->parts)) { + foreach ($s->parts as $partno0 => $p) { + $this->getpart($mbox, $mid, $p, $partno0 + 1); + } + } else { + $this->getpart($mbox, $mid, $s, 0); // no part-number, so pass 0 + } + } + + private function getpart($mbox, $mid, $p, $partno) { + // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart + // global $htmlmsg,$plainmsg,$charset,$attachments; + + // DECODE DATA + $data = ($partno) ? + imap_fetchbody($mbox, $mid, $partno) : // multipart + imap_body($mbox, $mid); // not multipart + + // Any part may be encoded, even plain text messages, so check everything. + if ($p->encoding == 4) { + $data = quoted_printable_decode($data); + } elseif ($p->encoding == 3) { + $data = base64_decode($data); + } + // no need to decode 7-bit, 8-bit, or binary + + // PARAMETERS + // get all parameters, like charset, filenames of attachments, etc. + $params = array(); + if (isset($p->parameters)) { + if ($p->parameters) { + foreach ($p->parameters as $x) { + $params[strtolower($x->attribute)] = $x->value; + } + } + if (isset($p->dparameters)) { + foreach ($p->dparameters as $x) { + $params[strtolower($x->attribute)] = $x->value; + } + } + } + + if (!empty($params['filename']) || !empty($params['name'])) { + // ATTACHMENT + // Any part with a filename is an attachment, + // so an attached text file (type 0) is not mistaken as the message. + // filename may be given as 'Filename' or 'Name' or both + $filename = ($params['filename']) ? $params['filename'] : $params['name']; + // filename may be encoded, so see imap_mime_header_decode() + $this->attachments[$filename] = $data; // this is a problem if two files have same name + // TODO: check for double filenames + //debug($this->attachments); + } elseif ($p->type == 0 && $data) { + // TEXT + // Messages may be split in different parts because of inline attachments, + // so append parts together with blank row. + if (strtolower($p->subtype)=='plain') { + $this->plainmsg .= trim($data) ."\n\n"; + } else { + $this->htmlmsg .= $data . "

"; + } + if (!empty($params['charset'])) { + $this->charset = $params['charset']; // assume all parts are same charset + } + } elseif ($p->type == 2 && $data) { + // EMBEDDED MESSAGE + // Many bounce notifications embed the original message as type 2, + // but AOL uses type 1 (multipart), which is not handled here. + // There are no PHP functions to parse embedded messages, + // so this just appends the raw source to the main message. + $this->plainmsg .= trim($data) ."\n\n"; + } + + // SUBPART RECURSION + if (isset($p->parts)) { + foreach ($p->parts as $partno0 => $p2) { + $this->getpart($mbox, $mid, $p2, $partno . '.' . ($partno0 + 1)); // 1.2, 1.2.1, etc. + } + } + } +} +?> \ No newline at end of file diff --git a/app/models/datasources/.svn/text-base/rastreamento_source.php.svn-base b/app/models/datasources/.svn/text-base/rastreamento_source.php.svn-base new file mode 100644 index 0000000..f74cdb2 --- /dev/null +++ b/app/models/datasources/.svn/text-base/rastreamento_source.php.svn-base @@ -0,0 +1,41 @@ + array( + 'id' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 11, + ), + 'text' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 140 + ), + 'status' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 140 + ), + ) + ); + + + + +} + +?> \ No newline at end of file diff --git a/app/models/datasources/empty b/app/models/datasources/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/models/datasources/frete_source.php b/app/models/datasources/frete_source.php new file mode 100644 index 0000000..cb20e84 --- /dev/null +++ b/app/models/datasources/frete_source.php @@ -0,0 +1,147 @@ + array( + + 'nCdEmpresa' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sDsSenha' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nCdServico' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 5 + ), + 'sCepOrigem' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 8 + ), + 'sCepDestino' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 8 + //78300000 + ), + 'nVlPeso' => array( + 'type' => 'integer', + 'null' => false, + 'key' => 'primary', + 'length' => 10 + ), + 'nCdFormato' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + 'nVlComprimento' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlAltura' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlLargura' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'nVlDiametro' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sCdMaoPropria' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + 'nVlValorDeclarado' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 10 + ), + 'sCdAvisoRecebimento' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 1 + ), + + ) + ); + + + + public function __construct($config) + { + + $this->conection = new HttpSocket( + 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx' + ); + + parent::__construct($config); + } + + + + public function read( $queryData = array()) + { + + if( !isset($queryData['conditions']['nCdServico'])) + { + $queryData['conditions']['nCdServico'] = 40051; + } + + return $queryData; + } + + + + public function listSources() + { + return array('fretes'); + } + + + + public function describe(&$model) + { + return $this->_schema['fretes']; + } + + +} + +?> \ No newline at end of file diff --git a/app/models/datasources/imap_source.php b/app/models/datasources/imap_source.php new file mode 100644 index 0000000..b518257 --- /dev/null +++ b/app/models/datasources/imap_source.php @@ -0,0 +1,635 @@ +ImapModel->find('all') is called. + * Now $this->ImapModel->delete($id) is working too. + * + * Implementation reference: http://bin.cakephp.org/view/154300048 + * + * Original implementations by: Moose and Gwoo. + * + * @package cakephp_imap_datasource + */ +class ImapSource extends DataSource { + + /** + * Description + * + * @var string + */ + public $description = 'Imap Data Source'; + + /** + * Default configuration. + * + * @var array + */ + public $_baseConfig = array( + 'host' => 'localhost', + 'connect' => 'imap/notls', + 'login' => 'root', + 'password' => '', + 'mailbox' => 'INBOX', + 'port' => '143' + ); + + /** + * Default array of field list for imap mailbox. + * + * @var array + */ + protected $_fields = array( + 'subject', + 'from', + 'to', + 'date', + 'message_id', + 'references', + 'in_reply_to', + 'size', + 'uid', + 'msgno', + 'recent', + 'flagged', + 'answered', + 'deleted', + 'seen', + 'draft', + 'body', + 'attachment' + ); + +// protected $_schema = array( +// example: +// 'tweets' => array( +// 'id' => array( +// 'type' => 'integer', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 11, +// ), +// 'text' => array( +// 'type' => 'string', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 140 +// ), +// 'status' => array( +// 'type' => 'string', +// 'null' => true, +// 'key' => 'primary', +// 'length' => 140 +// ), +// ), +// 'emails' => array( +// 'subject' => array(), +// 'from' => array(), +// 'to' => array(), +// 'date' => array(), +// 'message_id' => array(), +// 'references' => array(), +// 'in_reply_to' => array(), +// 'size' => array(), +// 'uid' => array(), +// 'msgno' => array(), +// 'recent' => array(), +// 'flagged' => array(), +// 'answered' => array(), +// 'deleted' => array(), +// 'seen' => array(), +// 'draft' => array() +// ) +// ); + + /** + * Flag to keep in mind, if only find('count') is executed. + * + * @var boolean + */ + public $countonly = false; + + /** + * Global vars for decoding a message + */ + public $htmlmsg; + public $plainmsg; + public $charset; + public $attachments; + + /** + * Constructor + */ + public function __construct($config = null, $autoConnect = true) { + $this->debug = Configure::read('debug') > 0; + $this->fullDebug = Configure::read('debug') > 1; + // debug($config); + parent::__construct($config); + + if ($autoConnect) { + return $this->connect(); + } else { + return true; + } + } + + /** + * Destructor + */ + public function __destruct() { + if ($this->isConnected()) { + $this->close(); + } + } + + /** + * Connects to the mailbox using options in the given configuration array. + * + * @return boolean True if the mailbox could be connected, else false + */ + public function connect() { + $config = $this->config; + $this->connected = false; + + $this->connection = imap_open("{{$config['host']}:{$config['port']}/{$config['connect']}}{$config['mailbox']}", $config['login'], $config['password']); + if ($this->connection) { + // debug('connect'); + $this->connected = true; + } + return $this->connected; + } + + /** + * Reconnects to database server with optional new settings + * + * @param array $config An array defining the new configuration settings + * @return boolean True on success, false on failure + */ + public function reconnect($config = null) { + $this->disconnect(); + if ($config != null) { + $this->config = am($this->_baseConfig, $config); + } + return $this->connect(); + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + public function lastError() { + if ($lastError = imap_last_error()) { + $this->errors = imap_errors(); + $this->connected = false; + return $lastError; + } + return false; + } + + /** + * Delete + * + * @created: 15.10.2008 18:35:38 + * @param type $var + * + */ + public function delete(&$model) { +// debug("ImapSource::delete({$model->id})"); +// debug(func_get_args()); +// die(); + if ($this->connected) { + $id = $model->id; + imap_delete($this->connection, $id); + imap_expunge($this->connection); + return true; + } + return false; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + public function read(&$model, $queryData = array(), $recursive = null) { + $queryData = $this->__scrubQueryData($queryData); + if ($this->connected) { + $mc = imap_check($this->connection); + $mc = min($mc->Nmsgs, $queryData['limit']); + + if (!isset($queryData['options'])) { + $queryData['options'] = 0; + } + if (!isset($queryData['search'])) { + $queryData['search'] = null; + } + + $imapOrder = array(); + list($imapOrder['criteria'], $imapOrder['reverse']) = $this->_imapOrderFormat($queryData['order']); + + $resultSet = imap_sort($this->connection, $imapOrder['criteria'], $imapOrder['reverse'], $queryData['options'], $queryData['search'], $this->charset); + $result = array(); + for ($i = 0; $i < $mc; $i++) { + $result_tmp = imap_fetch_overview($this->connection, $resultSet[$i]); + $result[] = $result_tmp[0]; + } + $result = $this->_imapFormat($model, $queryData, $result); + return $result; + } else { + return false; + } + return $resultSet; + } + + /** + * Convert from simple field to imapSort order criteria + * + * order fields: 'message_date|date', 'arrival_date', 'from_address', 'subject', 'to_address', 'cc_address', 'size' + * + * @param array() $order + * @return array() + */ + private function _imapOrderFormat($order = null) { + $allowedOrderFields = array( + 'message_date', + 'date', + 'arrival_date', + 'from_address', + 'subject', + 'to_address', + 'cc_address', + 'size' + ); + + if (!$order) { + return array(SORTDATE, 0); + } + + $criteria = 'date'; + $reverse = 0; + + if (is_array($order[0])) { + $keys = array_keys($order[0]); + if (is_int($keys[0])) { + $criteria = $order[0][$keys[0]]; + } else { + $criteria = low($keys[0]); + $reverse = low($order[0][$keys[0]]) == 'asc' ? 0 : 1; + } + } else { + $criteria = low($order[0]); + } + + if (!in_array($criteria, $allowedOrderFields)) { + return array(SORTDATE, 0); + } + + switch ($criteria) { + case 'message_date': + case 'date': + return array(SORTDATE, $reverse); + break; + + case 'arrival_date': + return array(SORTARRIVAL, $reverse); + break; + + case 'from_address': + return array(SORTFROM, $reverse); + break; + + case 'subject ': + return array(SORTSUBJECT, $reverse); + break; + + case 'to_address': + return array(SORTTO, $reverse); + break; + + case 'cc_address': + return array(SORTCC, $reverse); + break; + + case 'size': + return array(SORTSIZE, $reverse); + break; + + default: + return array(SORTDATE, 0); + } + } + + private function _imapFormat($model, $queryData, $data) { + $res = array(); + $count = count($data); + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + $fields = $queryData['fields']; + } else { + $fields = $this->_fields; + } + + $hasBody = $this->checkBody($queryData); + $hasAttachment = $this->checkAttachment($queryData); + //debug($hasAttachment); + //debug($hasBody); + $i = 0; + foreach ($data as $d) { + // transfer the fields + $res[$i][$model->alias]['id'] = $d->msgno; + foreach ($fields as $field) { + if ($field != 'body') { + if (!empty($d->{$field})) { + $res[$i][$model->alias][$field] = $d->{$field}; + } + } + + if ($hasBody) { + $this->getmsg($this->connection, $d->msgno); + if (!empty($this->htmlmsg)) { + $res[$i][$model->alias]['htmlmsg'] = $this->htmlmsg; + } + if (!empty($this->plainmsg)) { + $res[$i][$model->alias]['plainmsg'] = $this->plainmsg; + } + if ($hasAttachment) { + if (!empty($this->attachments)) { + $res[$i][$model->alias]['attachments'] = $this->attachments; + } + } + if (!empty($this->charset)) { + $res[$i][$model->alias]['charset'] = $this->charset; + } + } + } + $i++; + } + return $res; + } + + private function checkBody($queryData) { + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + if (in_array('body', $queryData['fields'])) { + return true; + } + } + if ((isset($queryData['fields']) && empty($queryData['fields'])) || !isset($queryData['fields'])) { + return true; + } + return false; + } + + private function checkAttachment($queryData) { + if (isset($queryData['fields']) && !empty($queryData['fields'])) { + if (in_array('attachments', $queryData['fields'])) { + return true; + } + } + if ((isset($queryData['fields']) && empty($queryData['fields'])) || !isset($queryData['fields'])) { + return true; + } + return false; + } + + function calculate(&$model, $func, $params = array()) { + debug('calculate:'.$func); + if ($func == 'count') { + $this->countonly = true; + $this->numRows = imap_num_msg($this->connection); + //debug($this->numRows); + return $this->numRows; + } else { + debug($func); + } + return false; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function query() { + // imap_ + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function describe() { + //debug('describe'); + $mailbox = imap_check($this->connection); + + if ($mailbox) { + $mbox["Date"] = $mailbox->Date; + $mbox["Driver"] = $mailbox->Driver; + $mbox["Mailbox"] = $mailbox->Mailbox; + $mbox["Messages"]= $mailbox->Nmsgs; + $mbox["Recent"] = $this->numRecent(); + // set numRows + $this->numRows = $mailbox->Nmsgs; + } + //debug($mbox); + return $mbox; + } + + /** + * Number of Total Emails + */ + function numMessages() { + //debug('numMessages'); + return imap_num_msg($this->connection); + } + + /** + * Number of Recent Emails + */ + function numRecent() { + //debug('numRecent'); + return imap_num_recent($this->connection); + } + + /** + * Caches/returns cached results for child instances + * + * @return array + */ + function listSources() { + if ($this->cacheSources === false) { + return null; + } + + if ($this->_sources !== null) { + return $this->_sources; + } + + $sources = imap_getmailboxes($this->connection, "{{$config['host']}}", "*"); + + $this->_sources = $sources; + return $sources; + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function column() { + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function isConnected() { + return $this->connected; + } + + /** + * Disconnects from mailbox. + * + * @return boolean True if the database could be disconnected, else false + */ + function disconnect() { + $this->connected = !@imap_close($this->connection); + return !$this->connected; + } + + /** + * Disconnects database, kills the connection and says the connection is closed, + * and if DEBUG is turned on, the log for this object is shown. + * + */ + function close() { + if ($this->fullDebug) { + $this->showLog(); + } + $this->disconnect(); + } + + /** + * undocumented function + * + * @return void + * @author gwoo + */ + function showLog() { + } + + function __scrubQueryData($data) { + foreach (array('conditions', 'fields', 'order', 'limit', 'offset', 'group') as $key) { + if (!isset($data[$key]) || empty($data[$key])) { + $data[$key] = array(); + } + } + return $data; + } + + private function getmsg($mbox,$mid) { + // input $mbox = IMAP stream, $mid = message id + // output all the following: + // global $this->htmlmsg,$this->plainmsg,$this->charset,$this->attachments; + // the message may in $this->htmlmsg, $this->plainmsg, or both + $this->htmlmsg = ''; + $this->plainmsg = ''; + $this->charset = ''; + $this->attachments = array(); + + // HEADER - we have it already + // $h = imap_header($mbox,$mid); + // add code here to get date, from, to, cc, subject... + + // BODY + $s = imap_fetchstructure($mbox, $mid); + if (isset($s->parts)) { + foreach ($s->parts as $partno0 => $p) { + $this->getpart($mbox, $mid, $p, $partno0 + 1); + } + } else { + $this->getpart($mbox, $mid, $s, 0); // no part-number, so pass 0 + } + } + + private function getpart($mbox, $mid, $p, $partno) { + // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart + // global $htmlmsg,$plainmsg,$charset,$attachments; + + // DECODE DATA + $data = ($partno) ? + imap_fetchbody($mbox, $mid, $partno) : // multipart + imap_body($mbox, $mid); // not multipart + + // Any part may be encoded, even plain text messages, so check everything. + if ($p->encoding == 4) { + $data = quoted_printable_decode($data); + } elseif ($p->encoding == 3) { + $data = base64_decode($data); + } + // no need to decode 7-bit, 8-bit, or binary + + // PARAMETERS + // get all parameters, like charset, filenames of attachments, etc. + $params = array(); + if (isset($p->parameters)) { + if ($p->parameters) { + foreach ($p->parameters as $x) { + $params[strtolower($x->attribute)] = $x->value; + } + } + if (isset($p->dparameters)) { + foreach ($p->dparameters as $x) { + $params[strtolower($x->attribute)] = $x->value; + } + } + } + + if (!empty($params['filename']) || !empty($params['name'])) { + // ATTACHMENT + // Any part with a filename is an attachment, + // so an attached text file (type 0) is not mistaken as the message. + // filename may be given as 'Filename' or 'Name' or both + $filename = ($params['filename']) ? $params['filename'] : $params['name']; + // filename may be encoded, so see imap_mime_header_decode() + $this->attachments[$filename] = $data; // this is a problem if two files have same name + // TODO: check for double filenames + //debug($this->attachments); + } elseif ($p->type == 0 && $data) { + // TEXT + // Messages may be split in different parts because of inline attachments, + // so append parts together with blank row. + if (strtolower($p->subtype)=='plain') { + $this->plainmsg .= trim($data) ."\n\n"; + } else { + $this->htmlmsg .= $data . "

"; + } + if (!empty($params['charset'])) { + $this->charset = $params['charset']; // assume all parts are same charset + } + } elseif ($p->type == 2 && $data) { + // EMBEDDED MESSAGE + // Many bounce notifications embed the original message as type 2, + // but AOL uses type 1 (multipart), which is not handled here. + // There are no PHP functions to parse embedded messages, + // so this just appends the raw source to the main message. + $this->plainmsg .= trim($data) ."\n\n"; + } + + // SUBPART RECURSION + if (isset($p->parts)) { + foreach ($p->parts as $partno0 => $p2) { + $this->getpart($mbox, $mid, $p2, $partno . '.' . ($partno0 + 1)); // 1.2, 1.2.1, etc. + } + } + } +} +?> \ No newline at end of file diff --git a/app/models/datasources/rastreamento_source.php b/app/models/datasources/rastreamento_source.php new file mode 100644 index 0000000..f74cdb2 --- /dev/null +++ b/app/models/datasources/rastreamento_source.php @@ -0,0 +1,41 @@ + array( + 'id' => array( + 'type' => 'integer', + 'null' => true, + 'key' => 'primary', + 'length' => 11, + ), + 'text' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 140 + ), + 'status' => array( + 'type' => 'string', + 'null' => true, + 'key' => 'primary', + 'length' => 140 + ), + ) + ); + + + + +} + +?> \ No newline at end of file diff --git a/app/models/frete.php b/app/models/frete.php new file mode 100644 index 0000000..f1a19dd --- /dev/null +++ b/app/models/frete.php @@ -0,0 +1,9 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Language extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Language'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Ordered' => array('field' => 'weight', 'foreign_key' => null), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); + +} +?> \ No newline at end of file diff --git a/app/models/link.php b/app/models/link.php new file mode 100644 index 0000000..c0dab56 --- /dev/null +++ b/app/models/link.php @@ -0,0 +1,66 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Link extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Link'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Encoder', + 'Tree', + 'Cached' => array( + 'prefix' => array( + 'link_', + 'menu_', + 'croogo_menu_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'link' => array( + 'rule' => array('minLength', 1), + 'message' => 'Link cannot be empty.', + ), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Menu' => array('counterCache' => true) + ); + +} +?> \ No newline at end of file diff --git a/app/models/menu.php b/app/models/menu.php new file mode 100644 index 0000000..bfcacf0 --- /dev/null +++ b/app/models/menu.php @@ -0,0 +1,81 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Menu extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Menu'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + 'link_', + 'menu_', + 'croogo_menu_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); +/** + * Model associations: hasMany + * + * @var array + * @access public + */ + public $hasMany = array( + 'Link' => array( + 'className' => 'Link', + 'foreignKey' => 'menu_id', + 'dependent' => false, + 'conditions' => '', + 'fields' => '', + 'order' => 'Link.lft ASC', + 'limit' => '', + 'offset' => '', + 'exclusive' => '', + 'finderQuery' => '', + 'counterQuery' => '', + ), + ); +} +?> \ No newline at end of file diff --git a/app/models/message.php b/app/models/message.php new file mode 100644 index 0000000..10f4c19 --- /dev/null +++ b/app/models/message.php @@ -0,0 +1,64 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Message extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Message'; +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'name' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'email' => array( + 'rule' => 'email', + 'message' => 'Please provide a valid email address.', + ), + 'title' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'body' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Contact' => array( + 'className' => 'Contact', + 'foreignKey' => 'contact_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'counterCache' => true, + ), + ); + +} +?> \ No newline at end of file diff --git a/app/models/meta.php b/app/models/meta.php new file mode 100644 index 0000000..65f057c --- /dev/null +++ b/app/models/meta.php @@ -0,0 +1,46 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Meta extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Meta'; +/** + * Table name + * + * @var string + * @access public + */ + public $useTable = 'meta'; +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Node' => array( + 'className' => 'Node', + 'foreignKey' => 'foreign_key', + 'conditions' => '', + 'fields' => '', + 'order' => '', + ), + ); + +} +?> \ No newline at end of file diff --git a/app/models/node.php b/app/models/node.php new file mode 100644 index 0000000..f995e04 --- /dev/null +++ b/app/models/node.php @@ -0,0 +1,199 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Node extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Node'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Containable', + 'Tree', + 'Encoder', + 'Meta', + 'Url', + 'Cached' => array( + 'prefix' => array( + 'node_', + 'nodes_', + 'croogo_nodes_', + ), + ), + ); +/** + * Node type + * + * If the Model is associated to Node model, this variable holds the Node type value + * + * @var string + * @access public + */ + public $type = null; +/** + * Guid + * + * @var string + * @access public + */ + public $guid = null; +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + 'slug' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This slug has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Slug cannot be empty.', + ), + ), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'User' => array( + 'className' => 'User', + 'foreignKey' => 'user_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + ), + ); +/** + * Model associations: hasMany + * + * @var array + * @access public + */ + public $hasMany = array( + 'Comment' => array( + 'className' => 'Comment', + 'foreignKey' => 'node_id', + 'dependent' => false, + 'conditions' => array('Comment.status' => 1), + 'fields' => '', + 'order' => '', + 'limit' => '5', + 'offset' => '', + 'exclusive' => '', + 'finderQuery' => '', + 'counterQuery' => '', + ), + 'Meta' => array( + 'className' => 'Meta', + 'foreignKey' => 'foreign_key', + 'dependent' => false, + 'conditions' => array('Meta.model' => 'Node'), + 'fields' => '', + 'order' => 'Meta.key ASC', + 'limit' => '', + 'offset' => '', + 'exclusive' => '', + 'finderQuery' => '', + 'counterQuery' => '', + ), + ); +/** + * Model associations: hasAndBelongsToMany + * + * @var array + * @access public + */ + public $hasAndBelongsToMany = array( + 'Taxonomy' => array( + 'className' => 'Taxonomy', + 'with' => 'NodesTaxonomy', + 'joinTable' => 'nodes_taxonomies', + 'foreignKey' => 'node_id', + 'associationForeignKey' => 'taxonomy_id', + 'unique' => true, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '', + 'offset' => '', + 'finderQuery' => '', + 'deleteQuery' => '', + 'insertQuery' => '', + ), + ); +/** + * beforeFind callback + * + * @param array $q + * @return array + */ + public function beforeFind($q) { + if ($this->type != null && !isset($q['conditions']['Node.type'])) { + $q['conditions']['Node.type'] = $this->type; + } + return $q; + } +/** + * beforeSave callback + * + * @return boolean + */ + public function beforeSave() { + if ($this->type != null) { + $this->data['Node']['type'] = $this->type; + } + $this->__cacheTerms(); + + return true; + } +/** + * Caches Term in Node.terms field + * + * @return void + */ + public function __cacheTerms() { + if (isset($this->data['Taxonomy']['Taxonomy']) && count($this->data['Taxonomy']['Taxonomy']) > 0) { + $taxonomyIds = $this->data['Taxonomy']['Taxonomy']; + $taxonomies = $this->Taxonomy->find('all', array( + 'conditions' => array( + 'Taxonomy.id' => $taxonomyIds, + ), + )); + $terms = Set::combine($taxonomies, '{n}.Term.id', '{n}.Term.slug'); + $this->data['Node']['terms'] = $this->encodeData($terms, array( + 'trim' => false, + 'json' => true, + )); + } + } +} +?> \ No newline at end of file diff --git a/app/models/opcao.php b/app/models/opcao.php new file mode 100644 index 0000000..3e62bea --- /dev/null +++ b/app/models/opcao.php @@ -0,0 +1,23 @@ + array('notempty') + ); + + //The Associations below have been created with all possible keys, those that are not needed can be removed + var $belongsTo = array( + 'Produto' => array( + 'className' => 'Produto', + 'foreignKey' => 'produtos_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'dependant' => true, + 'exclusive' => true + ) + ); + +} +?> \ No newline at end of file diff --git a/app/models/produto.php b/app/models/produto.php new file mode 100644 index 0000000..9323150 --- /dev/null +++ b/app/models/produto.php @@ -0,0 +1,204 @@ + array('numeric'), + 'nome' => array( + 'nome' => array( + 'rule' => array( 'notempty' ), + 'message' => 'É obrigatório informar o nome do objeto/produto.', + 'required' => true, + 'allowEmpty' => false + ), + 'minimo' => array( + 'rule' => array( 'minLength', 2 ), + 'message' => 'O nome do produto/objeto precisa ter no mínimo 2 dígitos, entretanto, recomendamos informar um nome descritivo, sem abreviações e caracteres especiais. + Exemplo: Iphone 3GS desbloqueado' + ), + 'maximo' => array( + 'rule' => array( 'maxLength', 140 ), + 'message' => 'O nome do produto/objeto precisa ter no máximo 140 dígitos, se este limite não é o suficiente entre em contato com a equipe de atendimento.' + ), + + ), + + + + + 'comprimento' => array( + 'preenchido' => array( + 'rule' => array( 'minLength', 1 ), + 'message' => "É obrigatório informar o comprimento do objeto/produto." + ), + 'numero' => array( + 'rule' => array( 'numeric' ), + 'message' => "O comprimento deve ser informado em formato numérico. Exemplo: Para vinte centímetros e meio digite 20.5" + ), + 'minimo' => array( + 'rule' => array( 'comparison', '>=', 16 ), + 'message' => "O comprimento minimo aceito é de 16 centimetros, se este limite não é suficiente entre em contato com a equipe de atendimento." + ), + 'maximo' => array( + 'rule' => array( 'comparison', '<=', 90 ), + 'message' => "O comprimento máximo aceito é de 90 centimetros, se este limite não é suficiente entre em contato com a equipe de atendimento." + ) + ), + + 'largura' => array( + 'preenchido' => array( + 'rule' => array( 'minLength', 1 ), + 'message' => "É obrigatório informar a largura do objeto/produto." + ), + 'numero' => array( + 'rule' => array( 'numeric' ), + 'message' => "A largura deve ser informada em formato numérico. Exemplo: Para vinte centímetros e meio digite 20.5" + ), + 'minimo' => array( + 'rule' => array( 'comparison', '>=', 5 ), + 'message' => "A largura minima é de 5 centimetros, se este limite não é suficiente entre em contato com a equipe de atendimento." + ), + 'maximo' => array( + 'rule' => array( 'comparison', '<=', 60 ), + 'message' => "A largura máxima é de 60 centimetros, se este limite não é suficiente entre em contato com a equipe de atendimento." + ) + ), + + 'altura' => array( + 'alturaMinima' => array( + 'rule' => array( 'comparison', '>=', 2 ), + 'message' => 'A altura precisa ter no mínimo 2 centímetros.' + ), + 'numero' => array( + 'rule' => array( 'numeric' ), + 'message' => "A altura deve ser informada em formato numérico. Exemplo: Para vinte centímetros e meio digite 20.5" + ), + 'maximo' => array( + 'rule' => array( 'comparison', '<=', 60 ), + 'message' => "A altura máxima aceita é de 60 centimetros, se este limite não é suficiente entre em contato com a equipe de atendimento." + ) + + ), + /* + 'tamanho' => array( + + // Altura não pode ser maior que comprimento + // A largura nao pode ser menor que 11cm, quando o comprimento for menor que 25cm + // O comprimento nao pode ser inferior a 16 cm + + // CALCULOS + // A soma resultante do comprimento + largura + algura não deve superar a 150 cm + + ), + */ + 'preco' => array( + /** + * esta validação nao funcionou como esperado + 'money' => array( + 'rule' => array('money', 'right' ), + 'message' => 'Informe o valor do produto.' + ), + */ + 'minimo' => array( + 'rule' => array('comparison', '>=', 0.01 ), + 'message' => 'O preço precisa ser maior que R$ 0,00 (zero). Exemplo: 0.01' + ), + 'maximo' => array( + /** + * 1.000.000.00 10 + * 100.000.00 9 + * 10.000.00 8 + * 1.000.00 7 + */ + 'rule' => array('maxLength', 7 ), + 'message' => 'O preço máximo aceito é de R$ 9.999,99 (Nove mil, novecentos e noventa e nove reais e noventa e nove centavos). Se você precisa informar um valor maior entre em contato com a equipe de atendimento.' + ), + + ), + 'peso' => array( + 'comparacao1' => array( + 'rule' => array( 'comparison', '>=', 0.300 ), + 'message' => 'O peso precisa ter no mínimo 300 gramas (Exemplo: 0.300).' + ), + 'comparacao2' => array( + 'rule' => array( 'comparison', '<=', 30 ), + 'message' => 'O peso precisa ter no máximo 30 quilos (Exemplo: 30).' + ), + + ), + 'cep' => array( + 'numeric' => array( + 'rule' => array('minLength', '8'), + 'message' => 'O CEP precisa ter no mínimo 8 dígitos, digite apenas números.' + ), + 'notempty' => array( + 'rule' => array('maxLength', '8'), + 'message' => 'O CEP precisa ter no máximo 8 dígitos, digite apenas números.' + ) + ), + + + 'envio_maximo' => array( + 'numeric' => array( + 'rule' => array( 'notempty' ), + 'message' => 'É necessário informar quantas unidades do produto podem ser enviadas no mesmo pacote. A quantidade mínima por encomenda deve ser 1.', + 'required' => true, + 'allowEmpty' => false, + ), + ), + + /** + * Validações para meios de envio + */ + 'envio_local' => array( + 'minimo' => array( + 'rule' => array( 'comparison', '<=', 2 ), + 'message' => 'Você precisa informar se aceita a retirada do produto no local.' + ), + ), + 'envio_pac' => array( + 'notempty' => array( + 'rule' => array( 'notempty' ), + 'message' => 'Informe se este produto pode ser enviado via PAC.' + ), + ), + 'envio_sedex' => array( + 'notempty' => array( + 'rule' => array( 'notempty' ), + 'message' => 'Informe se este produto pode ser enviado via SEDEX convencional.' + ), + ), + 'envio_sedexacobrar' => array( + 'notempty' => array( + 'rule' => array( 'notempty' ), + 'message' => 'Informe se este produto pode ser enviado via SEDEX a cobrar.' + ), + ), + ); + + + //The Associations below have been created with all possible keys, those that are not needed can be removed + var $belongsTo = array( + 'User' => array( + 'className' => 'User', + 'foreignKey' => 'users_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + ); + + + var $hasMany = array( + //var $hasAndBelongsToMany = array( + 'Opcao' => array( + 'className' => 'Opcao', + 'foreignKey' => 'produtos_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + ); + +} +?> \ No newline at end of file diff --git a/app/models/region.php b/app/models/region.php new file mode 100644 index 0000000..1a5e788 --- /dev/null +++ b/app/models/region.php @@ -0,0 +1,82 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Region extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Region'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + 'region_', + 'croogo_regions', + 'block_', + 'croogo_blocks_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); +/** + * Model associations: hasMany + * + * @var array + * @access public + */ + public $hasMany = array( + 'Block' => array( + 'className' => 'Block', + 'foreignKey' => 'region_id', + 'dependent' => false, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '3', + 'offset' => '', + 'exclusive' => '', + 'finderQuery' => '', + 'counterQuery' => '', + ), + ); +} +?> \ No newline at end of file diff --git a/app/models/role.php b/app/models/role.php new file mode 100644 index 0000000..75ff7eb --- /dev/null +++ b/app/models/role.php @@ -0,0 +1,61 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Role extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Role'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Acl' => array( + 'type' => 'requester', + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); + + public function parentNode() { + return null; + } + +} +?> \ No newline at end of file diff --git a/app/models/setting.php b/app/models/setting.php new file mode 100644 index 0000000..85c90a9 --- /dev/null +++ b/app/models/setting.php @@ -0,0 +1,175 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Setting extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Setting'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Ordered' => array( + 'field' => 'weight', + 'foreign_key' => false, + ), + 'Cached' => array( + 'prefix' => array( + 'setting_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'key' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This key has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Key cannot be empty.', + ), + ), + ); +/** + * afterSave callback + * + * @return void + */ + public function afterSave() { + $this->updateYaml(); + $this->writeConfiguration(); + } +/** + * afterDelete callback + * + * @return void + */ + public function afterDelete() { + $this->updateYaml(); + $this->writeConfiguration(); + } +/** + * Creates a new record with key/value pair if key does not exist. + * + * @param string $key + * @param string $value + * @param array $options + * @return boolean + */ + public function write($key, $value, $options = array()) { + $_options = array( + 'description' => '', + 'input_type' => '', + 'editable' => 0, + 'params' => '', + ); + $options = array_merge($_options, $options); + + $setting = $this->findByKey($key); + if (isset($setting['Setting']['id'])) { + $setting['Setting']['id'] = $setting['Setting']['id']; + $setting['Setting']['value'] = $value; + $setting['Setting']['description'] = $options['description']; + $setting['Setting']['input_type'] = $options['input_type']; + $setting['Setting']['editable'] = $options['editable']; + $setting['Setting']['params'] = $options['params']; + } else { + $setting = array(); + $setting['key'] = $key; + $setting['value'] = $value; + $setting['description'] = $options['description']; + $setting['input_type'] = $options['input_type']; + $setting['editable'] = $options['editable']; + $setting['params'] = $options['params']; + } + + $this->id = false; + if ($this->save($setting)) { + Configure::write($key, $value); + return true; + } else { + return false; + } + } +/** + * Deletes setting record for given key + * + * @param string $key + * @return boolean + */ + public function deleteKey($key) { + $setting = $this->findByKey($key); + if (isset($setting['Setting']['id']) && + $this->delete($setting['Setting']['id'])) { + return true; + } + return false; + } +/** + * All key/value pairs are made accessible from Configure class + * + * @return void + */ + public function writeConfiguration() { + $settings = $this->find('all', array( + 'fields' => array( + 'Setting.key', + 'Setting.value', + ), + 'cache' => array( + 'name' => 'setting_write_configuration', + 'config' => 'setting_write_configuration', + ), + )); + foreach($settings AS $setting) { + Configure::write($setting['Setting']['key'], $setting['Setting']['value']); + } + } +/** + * Find list and save yaml dump in app/config/settings.yml file. + * Data required in bootstrap. + * + * @return void + */ + public function updateYaml() { + $list = $this->find('list', array( + 'fields' => array( + 'key', + 'value', + ), + 'order' => array( + 'Setting.key' => 'ASC', + ), + )); + $filePath = APP.'config'.DS.'settings.yml'; + App::import('Core', 'File'); + $file = new File($filePath, true); + $listYaml = Spyc::YAMLDump($list, 4, 60); + $file->write($listYaml); + } +} +?> \ No newline at end of file diff --git a/app/models/taxonomy.php b/app/models/taxonomy.php new file mode 100644 index 0000000..ee42965 --- /dev/null +++ b/app/models/taxonomy.php @@ -0,0 +1,171 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Taxonomy extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Taxonomy'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Tree', + 'Cached' => array( + 'prefix' => array( + 'node_', + 'nodes_', + 'nodes_taxonomy_', + 'croogo_nodes_', + ), + ), + 'Containable', + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array( + 'Term' => array( + 'className' => 'Term', + 'foreignKey' => 'term_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + ), + 'Vocabulary' => array( + 'className' => 'Vocabulary', + 'foreignKey' => 'vocabulary_id', + 'conditions' => '', + 'fields' => '', + 'order' => '', + ), + ); +/** + * Generates a tree of terms for a vocabulary + * + * @param string $alias Vocabulary alias (e.g., categories) + * @param array $options + * @return array + */ + public function getTree($alias, $options = array()) { + $_options = array( + 'key' => 'slug', // Term.slug + 'value' => 'title', // Term.title + 'taxonomyId' => false, + 'cache' => false, + ); + $options = array_merge($_options, $options); + + // Check if cached + if ($this->useCache && isset($options['cache']['config'])) { + if (isset($options['cache']['prefix'])) { + $cacheName = $options['cache']['prefix'] . '_' . md5($alias . serialize($options)); + } elseif (isset($options['cache']['name'])) { + $cacheName = $options['cache']['name']; + } + + if (isset($cacheName)) { + $cacheName .= '_' . Configure::read('Config.language'); + $cachedResult = Cache::read($cacheName, $options['cache']['config']); + if ($cachedResult) { + return $cachedResult; + } + } + } + + $vocabulary = $this->Vocabulary->findByAlias($alias); + if (!isset($vocabulary['Vocabulary']['id'])) { + return false; + } + $this->Behaviors->attach('Tree', array( + 'scope' => array( + 'Taxonomy.vocabulary_id' => $vocabulary['Vocabulary']['id'], + ), + )); + $treeConditions = array( + 'Taxonomy.vocabulary_id' => $vocabulary['Vocabulary']['id'], + ); + $tree = $this->generatetreelist($treeConditions, '{n}.Taxonomy.term_id', '{n}.Taxonomy.id'); + $termsIds = array_keys($tree); + $terms = $this->Term->find('list', array( + 'conditions' => array( + 'Term.id' => $termsIds, + ), + 'fields' => array( + $options['key'], + $options['value'], + 'id', + ), + )); + + $termsTree = array(); + foreach ($tree AS $termId => $tvId) { + if (isset($terms[$termId])) { + $term = $terms[$termId]; + $key = array_keys($term); + $key = $key['0']; + $value = $term[$key]; + if (strstr($tvId, '_')) { + $tvIdN = str_replace('_', '', $tvId); + $tvIdE = explode($tvIdN, $tvId); + $value = $tvIdE['0'] . $value; + } + + if (!$options['taxonomyId']) { + $termsTree[$key] = $value; + } else { + $termsTree[str_replace('_', '', $tvId)] = $value; + } + } + } + + // Write cache + if (isset($cacheName)) { + Cache::write($cacheName, $termsTree, $options['cache']['config']); + } + + return $termsTree; + } +/** + * Check if Term HABTM Vocabulary. + * + * If yes, return Taxonomy ID + * otherwise, return false + * + * @param integer $termId + * @param integer $vocabularyId + * @return boolean + */ + public function termInVocabulary($termId, $vocabularyId) { + $taxonomy = $this->find('first', array( + 'conditions' => array( + 'Taxonomy.term_id' => $termId, + 'Taxonomy.vocabulary_id' => $vocabularyId, + ), + )); + if (isset($taxonomy['Taxonomy']['id'])) { + return $taxonomy['Taxonomy']['id']; + } + return false; + } +} +?> \ No newline at end of file diff --git a/app/models/term.php b/app/models/term.php new file mode 100644 index 0000000..e705e3d --- /dev/null +++ b/app/models/term.php @@ -0,0 +1,105 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Term extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Term'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + 'term_', + 'node_', + 'nodes_', + 'croogo_nodes_', + 'croogo_vocabularies_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'slug' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This slug has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Slug cannot be empty.', + ), + ), + ); +/** + * Model associations: hasAndBelongsToMany + * + * @var array + * @access public + */ + public $hasAndBelongsToMany = array( + 'Vocabulary' => array( + 'className' => 'Vocabulary', + 'with' => 'Taxonomy', + 'joinTable' => 'taxonomy', + 'foreignKey' => 'term_id', + 'associationForeignKey' => 'vocabulary_id', + 'unique' => true, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '', + 'offset' => '', + 'finderQuery' => '', + 'deleteQuery' => '', + 'insertQuery' => '', + ), + ); +/** + * Save Term and return ID. + * If another Term with same slug exists, return ID of that Term without saving. + * + * @param array $data + * @return integer + */ + public function saveAndGetId($data) { + $term = $this->find('first', array( + 'conditions' => array( + 'Term.slug' => $data['slug'], + ), + )); + if (isset($term['Term']['id'])) { + return $term['Term']['id']; + } + + $this->id = false; + if ($this->save($data)) { + return $this->id; + } + return false; + } +} +?> \ No newline at end of file diff --git a/app/models/type.php b/app/models/type.php new file mode 100644 index 0000000..d672064 --- /dev/null +++ b/app/models/type.php @@ -0,0 +1,84 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Type extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Type'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Cached' => array( + 'prefix' => array( + 'croogo_types_', + 'types_', + 'type_', + ), + ), + 'Params', + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); +/** + * Model associations: hasAndBelongsToMany + * + * @var array + * @access public + */ + public $hasAndBelongsToMany = array( + 'Vocabulary' => array( + 'className' => 'Vocabulary', + 'joinTable' => 'types_vocabularies', + 'foreignKey' => 'type_id', + 'associationForeignKey' => 'vocabulary_id', + 'unique' => true, + 'conditions' => '', + 'fields' => '', + 'order' => 'Vocabulary.weight ASC', + 'limit' => '', + 'offset' => '', + 'finderQuery' => '', + 'deleteQuery' => '', + 'insertQuery' => '', + ), + ); +} +?> \ No newline at end of file diff --git a/app/models/user.php b/app/models/user.php new file mode 100644 index 0000000..811c466 --- /dev/null +++ b/app/models/user.php @@ -0,0 +1,110 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class User extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'User'; +/** + * Order + * + * @var string + * @access public + */ + public $order = 'name ASC'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Acl' => array('type' => 'requester'), + ); +/** + * Model associations: belongsTo + * + * @var array + * @access public + */ + public $belongsTo = array('Role'); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'username' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'The username has already been taken.', + ), + 'notEmpty' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + ), + 'email' => array( + 'email' => array( + 'rule' => 'email', + 'message' => 'Please provide a valid email address.', + ), + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'Email address already in use.', + ), + ), + 'password' => array( + 'rule' => array('minLength', 6), + 'message' => 'Passwords must be at least 6 characters long.', + ), + 'name' => array( + 'rule' => 'notEmpty', + 'message' => 'This field cannot be left blank.', + ), + ); + + public function parentNode() { + if (!$this->id && empty($this->data)) { + return null; + } + $data = $this->data; + if (empty($this->data)) { + $data = $this->read(); + } + if (!isset($data['User']['role_id']) || !$data['User']['role_id']) { + return null; + } else { + return array('Role' => array('id' => $data['User']['role_id'])); + } + } + + public function afterSave($created) { + if (!$created) { + $parent = $this->parentNode(); + $parent = $this->node($parent); + $node = $this->node(); + $aro = $node[0]; + $aro['Aro']['parent_id'] = $parent[0]['Aro']['id']; + $this->Aro->save($aro); + } + } + + +} +?> \ No newline at end of file diff --git a/app/models/vocabulary.php b/app/models/vocabulary.php new file mode 100644 index 0000000..2d5cc82 --- /dev/null +++ b/app/models/vocabulary.php @@ -0,0 +1,87 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class Vocabulary extends AppModel { +/** + * Model name + * + * @var string + * @access public + */ + public $name = 'Vocabulary'; +/** + * Behaviors used by the Model + * + * @var array + * @access public + */ + public $actsAs = array( + 'Ordered' => array( + 'field' => 'weight', + 'foreign_key' => false, + ), + 'Cached' => array( + 'prefix' => array( + 'vocabulary_', + 'croogo_vocabulary_', + 'croogo_vocabularies_', + ), + ), + ); +/** + * Validation + * + * @var array + * @access public + */ + public $validate = array( + 'title' => array( + 'rule' => array('minLength', 1), + 'message' => 'Title cannot be empty.', + ), + 'alias' => array( + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'This alias has already been taken.', + ), + 'minLength' => array( + 'rule' => array('minLength', 1), + 'message' => 'Alias cannot be empty.', + ), + ), + ); +/** + * Model associations: hasAndBelongsToMany + * + * @var array + * @access public + */ + public $hasAndBelongsToMany = array( + 'Type' => array( + 'className' => 'Type', + 'joinTable' => 'types_vocabularies', + 'foreignKey' => 'vocabulary_id', + 'associationForeignKey' => 'type_id', + 'unique' => true, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '', + 'offset' => '', + 'finderQuery' => '', + 'deleteQuery' => '', + 'insertQuery' => '', + ), + ); +} +?> \ No newline at end of file diff --git a/app/plugins/acl/.svn/entries b/app/plugins/acl/.svn/entries new file mode 100644 index 0000000..3cdb80f --- /dev/null +++ b/app/plugins/acl/.svn/entries @@ -0,0 +1,108 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +webroot +dir + +models +dir + +acl_app_model.php +file + + + + +2010-09-04T08:55:28.000000Z +6b60e9fef08bc0707767a04076ce6e1e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +49 + +controllers +dir + +acl_app_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +2daf4f9312979c51e9e848dad2d213ae +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +58 + +views +dir + diff --git a/app/plugins/acl/.svn/text-base/acl_app_controller.php.svn-base b/app/plugins/acl/.svn/text-base/acl_app_controller.php.svn-base new file mode 100644 index 0000000..92c1a9a --- /dev/null +++ b/app/plugins/acl/.svn/text-base/acl_app_controller.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/acl/.svn/text-base/acl_app_model.php.svn-base b/app/plugins/acl/.svn/text-base/acl_app_model.php.svn-base new file mode 100644 index 0000000..e762509 --- /dev/null +++ b/app/plugins/acl/.svn/text-base/acl_app_model.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/acl/acl_app_controller.php b/app/plugins/acl/acl_app_controller.php new file mode 100644 index 0000000..92c1a9a --- /dev/null +++ b/app/plugins/acl/acl_app_controller.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/acl/acl_app_model.php b/app/plugins/acl/acl_app_model.php new file mode 100644 index 0000000..e762509 --- /dev/null +++ b/app/plugins/acl/acl_app_model.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/acl/controllers/.DS_Store b/app/plugins/acl/controllers/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclAcosController extends AclAppController { + public $name = 'AclAcos'; + public $uses = array('Acl.AclAco'); + + public function admin_index() { + $this->set('title_for_layout', __('Acos', true)); + + $this->AclAro->recursive = 0; + $this->set('acos', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Aco', true)); + + if (!empty($this->data)) { + $this->AclAco->create(); + if ($this->AclAco->save($this->data)) { + $this->Session->setFlash(__('The Aco has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aco could not be saved. Please, try again.', true)); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Aco', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aco', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->AclAco->save($this->data)) { + $this->Session->setFlash(__('The Aco has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aco could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->AclAco->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aco', true)); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->AclAco->delete($id)) { + $this->Session->setFlash(__('Aco deleted', true)); + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/.svn/text-base/acl_actions_controller.php.svn-base b/app/plugins/acl/controllers/.svn/text-base/acl_actions_controller.php.svn-base new file mode 100644 index 0000000..3a867b0 --- /dev/null +++ b/app/plugins/acl/controllers/.svn/text-base/acl_actions_controller.php.svn-base @@ -0,0 +1,194 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclActionsController extends AclAppController { + public $name = 'AclActions'; + public $uses = array('Acl.AclAco'); + public $components = array('Acl.AclGenerate'); + + public function admin_index() { + $this->set('title_for_layout', __('Actions', true)); + + $conditions = array( + 'parent_id !=' => null, + //'model' => null, + 'foreign_key' => null, + 'alias !=' => null, + ); + $this->set('acos', $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Action', true)); + + if (!empty($this->data)) { + $this->Acl->Aco->create(); + + // if parent_id is null, assign 'controllers' as parent + if ($this->data['Aco']['parent_id'] == null) { + $this->data['Aco']['parent_id'] = 1; + $acoType = 'Controller'; + } else { + $acoType = 'Action'; + } + + if ($this->Acl->Aco->save($this->data['Aco'])) { + $this->Session->setFlash(__('The '. $acoType .' has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The '. $acoType .' could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + + $conditions = array( + //'model' => null, + ); + $controllersAco = $this->Acl->Aco->find('first', array( + 'conditions' => array( + 'alias' => 'controllers', + 'parent_id' => null, + //'model' => null, + 'foreign_key' => null, + ), + )); + if (isset($controllersAco['Aco']['id'])) { + $conditions['parent_id'] = $controllersAco['Aco']['id']; + } + $acos = $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias'); + $this->set(compact('acos')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Action', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Acl->Aco->save($this->data['Aco'])) { + $this->Session->setFlash(__('The Action has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Action could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Acl->Aco->read(null, $id); + } + + $conditions = array( + //'model' => null, + ); + $controllersAco = $this->Acl->Aco->find('first', array( + 'conditions' => array( + 'alias' => 'controllers', + 'parent_id' => null, + //'model' => null, + 'foreign_key' => null, + ), + )); + if (isset($controllersAco['Aco']['id'])) { + $conditions['parent_id'] = $controllersAco['Aco']['id']; + } + $acos = $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias'); + $this->set(compact('acos')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Acl->Aco->delete($id)) { + $this->Session->setFlash(__('Action deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_move($id, $direction = 'up', $step = '1') { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if ($direction == 'up') { + if ($this->Acl->Aco->moveUp($id)) { + $this->Session->setFlash(__('Action moved up', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } else { + if ($this->Acl->Aco->moveDown($id)) { + $this->Session->setFlash(__('Action moved down', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + } + + public function admin_generate() { + $aco =& $this->Acl->Aco; + $root = $aco->node('controllers'); + if (!$root) { + $aco->create(array( + 'parent_id' => null, + 'model' => null, + 'alias' => 'controllers', + )); + $root = $aco->save(); + $root['Aco']['id'] = $aco->id; + } else { + $root = $root[0]; + } + + $controllerPaths = $this->AclGenerate->listControllers(); + foreach ($controllerPaths AS $controllerName => $controllerPath) { + $controllerNode = $aco->node('controllers/'.$controllerName); + if (!$controllerNode) { + $aco->create(array( + 'parent_id' => $root['Aco']['id'], + 'model' => null, + 'alias' => $controllerName, + )); + $controllerNode = $aco->save(); + $controllerNode['Aco']['id'] = $aco->id; + $log[] = 'Created Aco node for '.$controllerName; + } else { + $controllerNode = $controllerNode[0]; + } + + $methods = $this->AclGenerate->listActions($controllerName, $controllerPath); + foreach ($methods AS $method) { + $methodNode = $aco->node('controllers/'.$controllerName.'/'.$method); + if (!$methodNode) { + $aco->create(array( + 'parent_id' => $controllerNode['Aco']['id'], + 'model' => null, + 'alias' => $method, + )); + $methodNode = $aco->save(); + } + } + } + + if (isset($this->params['named']['permissions'])) { + $this->redirect(array('plugin' => 'acl', 'controller' => 'acl_permissions', 'action' => 'index')); + } else { + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/.svn/text-base/acl_aros_controller.php.svn-base b/app/plugins/acl/controllers/.svn/text-base/acl_aros_controller.php.svn-base new file mode 100644 index 0000000..d6f3262 --- /dev/null +++ b/app/plugins/acl/controllers/.svn/text-base/acl_aros_controller.php.svn-base @@ -0,0 +1,75 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclArosController extends AclAppController { + public $name = 'AclAros'; + public $uses = array('Acl.AclAro'); + + public function admin_index() { + $this->set('title_for_layout', __('Aros', true)); + + $this->AclAro->recursive = 0; + $this->set('aros', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Aro', true)); + + if (!empty($this->data)) { + $this->AclAro->create(); + if ($this->AclAro->save($this->data)) { + $this->Session->setFlash(__('The Aro has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aro could not be saved. Please, try again.', true)); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Aro', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aro', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->AclAro->save($this->data)) { + $this->Session->setFlash(__('The Aro has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aro could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->AclAro->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aro', true)); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->AclAro->delete($id)) { + $this->Session->setFlash(__('Aro deleted', true)); + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/.svn/text-base/acl_permissions_controller.php.svn-base b/app/plugins/acl/controllers/.svn/text-base/acl_permissions_controller.php.svn-base new file mode 100644 index 0000000..676649e --- /dev/null +++ b/app/plugins/acl/controllers/.svn/text-base/acl_permissions_controller.php.svn-base @@ -0,0 +1,132 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclPermissionsController extends AclAppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'AclPermissions'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Acl.AclAco', + 'Acl.AclAro', + 'Acl.AclArosAco', + 'Role', + ); + + public function admin_index() { + $this->set('title_for_layout', __('Permissions', true)); + + $acoConditions = array( + 'parent_id !=' => null, + //'model' => null, + 'foreign_key' => null, + 'alias !=' => null, + ); + $acos = $this->Acl->Aco->generatetreelist($acoConditions, '{n}.Aco.id', '{n}.Aco.alias'); + $roles = $this->Role->find('list'); + $this->set(compact('acos', 'roles')); + + $rolesAros = $this->AclAro->find('all', array( + 'conditions' => array( + 'AclAro.model' => 'Role', + 'AclAro.foreign_key' => array_keys($roles), + ), + )); + $rolesAros = Set::combine($rolesAros, '{n}.AclAro.foreign_key', '{n}.AclAro.id'); + + $permissions = array(); // acoId => roleId => bool + foreach ($acos AS $acoId => $acoAlias) { + if (substr_count($acoAlias, '_') != 0) { + $permission = array(); + foreach ($roles AS $roleId => $roleTitle) { + $hasAny = array( + 'aco_id' => $acoId, + 'aro_id' => $rolesAros[$roleId], + '_create' => 1, + '_read' => 1, + '_update' => 1, + '_delete' => 1, + ); + if ($this->AclArosAco->hasAny($hasAny)) { + $permission[$roleId] = 1; + } else { + $permission[$roleId] = 0; + } + $permissions[$acoId] = $permission; + } + } + } + $this->set(compact('rolesAros', 'permissions')); + } + + public function admin_toggle($acoId, $aroId) { + if (!$this->RequestHandler->isAjax()) { + $this->redirect(array('action' => 'index')); + } + + // see if acoId and aroId combination exists + $conditions = array( + 'AclArosAco.aco_id' => $acoId, + 'AclArosAco.aro_id' => $aroId, + ); + if ($this->AclArosAco->hasAny($conditions)) { + $data = $this->AclArosAco->find('first', array('conditions' => $conditions)); + if ($data['AclArosAco']['_create'] == 1 && + $data['AclArosAco']['_read'] == 1 && + $data['AclArosAco']['_update'] == 1 && + $data['AclArosAco']['_delete'] == 1) { + // from 1 to 0 + $data['AclArosAco']['_create'] = 0; + $data['AclArosAco']['_read'] = 0; + $data['AclArosAco']['_update'] = 0; + $data['AclArosAco']['_delete'] = 0; + $permitted = 0; + } else { + // from 0 to 1 + $data['AclArosAco']['_create'] = 1; + $data['AclArosAco']['_read'] = 1; + $data['AclArosAco']['_update'] = 1; + $data['AclArosAco']['_delete'] = 1; + $permitted = 1; + } + } else { + // create - CRUD with 1 + $data['AclArosAco']['aco_id'] = $acoId; + $data['AclArosAco']['aro_id'] = $aroId; + $data['AclArosAco']['_create'] = 1; + $data['AclArosAco']['_read'] = 1; + $data['AclArosAco']['_update'] = 1; + $data['AclArosAco']['_delete'] = 1; + $permitted = 1; + } + + // save + $success = 0; + if ($this->AclArosAco->save($data)) { + $success = 1; + } + + $this->set(compact('acoId', 'aroId', 'data', 'success', 'permitted')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/acl_acos_controller.php b/app/plugins/acl/controllers/acl_acos_controller.php new file mode 100644 index 0000000..f827da3 --- /dev/null +++ b/app/plugins/acl/controllers/acl_acos_controller.php @@ -0,0 +1,75 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclAcosController extends AclAppController { + public $name = 'AclAcos'; + public $uses = array('Acl.AclAco'); + + public function admin_index() { + $this->set('title_for_layout', __('Acos', true)); + + $this->AclAro->recursive = 0; + $this->set('acos', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Aco', true)); + + if (!empty($this->data)) { + $this->AclAco->create(); + if ($this->AclAco->save($this->data)) { + $this->Session->setFlash(__('The Aco has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aco could not be saved. Please, try again.', true)); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Aco', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aco', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->AclAco->save($this->data)) { + $this->Session->setFlash(__('The Aco has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aco could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->AclAco->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aco', true)); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->AclAco->delete($id)) { + $this->Session->setFlash(__('Aco deleted', true)); + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/acl_actions_controller.php b/app/plugins/acl/controllers/acl_actions_controller.php new file mode 100644 index 0000000..3a867b0 --- /dev/null +++ b/app/plugins/acl/controllers/acl_actions_controller.php @@ -0,0 +1,194 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclActionsController extends AclAppController { + public $name = 'AclActions'; + public $uses = array('Acl.AclAco'); + public $components = array('Acl.AclGenerate'); + + public function admin_index() { + $this->set('title_for_layout', __('Actions', true)); + + $conditions = array( + 'parent_id !=' => null, + //'model' => null, + 'foreign_key' => null, + 'alias !=' => null, + ); + $this->set('acos', $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Action', true)); + + if (!empty($this->data)) { + $this->Acl->Aco->create(); + + // if parent_id is null, assign 'controllers' as parent + if ($this->data['Aco']['parent_id'] == null) { + $this->data['Aco']['parent_id'] = 1; + $acoType = 'Controller'; + } else { + $acoType = 'Action'; + } + + if ($this->Acl->Aco->save($this->data['Aco'])) { + $this->Session->setFlash(__('The '. $acoType .' has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The '. $acoType .' could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + + $conditions = array( + //'model' => null, + ); + $controllersAco = $this->Acl->Aco->find('first', array( + 'conditions' => array( + 'alias' => 'controllers', + 'parent_id' => null, + //'model' => null, + 'foreign_key' => null, + ), + )); + if (isset($controllersAco['Aco']['id'])) { + $conditions['parent_id'] = $controllersAco['Aco']['id']; + } + $acos = $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias'); + $this->set(compact('acos')); + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Action', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!empty($this->data)) { + if ($this->Acl->Aco->save($this->data['Aco'])) { + $this->Session->setFlash(__('The Action has been saved', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The Action could not be saved. Please, try again.', true), 'default', array('class' => 'error')); + } + } + if (empty($this->data)) { + $this->data = $this->Acl->Aco->read(null, $id); + } + + $conditions = array( + //'model' => null, + ); + $controllersAco = $this->Acl->Aco->find('first', array( + 'conditions' => array( + 'alias' => 'controllers', + 'parent_id' => null, + //'model' => null, + 'foreign_key' => null, + ), + )); + if (isset($controllersAco['Aco']['id'])) { + $conditions['parent_id'] = $controllersAco['Aco']['id']; + } + $acos = $this->Acl->Aco->generatetreelist($conditions, '{n}.Aco.id', '{n}.Aco.alias'); + $this->set(compact('acos')); + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Acl->Aco->delete($id)) { + $this->Session->setFlash(__('Action deleted', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + + public function admin_move($id, $direction = 'up', $step = '1') { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Action', true), 'default', array('class' => 'error')); + $this->redirect(array('action'=>'index')); + } + if ($direction == 'up') { + if ($this->Acl->Aco->moveUp($id)) { + $this->Session->setFlash(__('Action moved up', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } else { + if ($this->Acl->Aco->moveDown($id)) { + $this->Session->setFlash(__('Action moved down', true), 'default', array('class' => 'success')); + $this->redirect(array('action'=>'index')); + } + } + } + + public function admin_generate() { + $aco =& $this->Acl->Aco; + $root = $aco->node('controllers'); + if (!$root) { + $aco->create(array( + 'parent_id' => null, + 'model' => null, + 'alias' => 'controllers', + )); + $root = $aco->save(); + $root['Aco']['id'] = $aco->id; + } else { + $root = $root[0]; + } + + $controllerPaths = $this->AclGenerate->listControllers(); + foreach ($controllerPaths AS $controllerName => $controllerPath) { + $controllerNode = $aco->node('controllers/'.$controllerName); + if (!$controllerNode) { + $aco->create(array( + 'parent_id' => $root['Aco']['id'], + 'model' => null, + 'alias' => $controllerName, + )); + $controllerNode = $aco->save(); + $controllerNode['Aco']['id'] = $aco->id; + $log[] = 'Created Aco node for '.$controllerName; + } else { + $controllerNode = $controllerNode[0]; + } + + $methods = $this->AclGenerate->listActions($controllerName, $controllerPath); + foreach ($methods AS $method) { + $methodNode = $aco->node('controllers/'.$controllerName.'/'.$method); + if (!$methodNode) { + $aco->create(array( + 'parent_id' => $controllerNode['Aco']['id'], + 'model' => null, + 'alias' => $method, + )); + $methodNode = $aco->save(); + } + } + } + + if (isset($this->params['named']['permissions'])) { + $this->redirect(array('plugin' => 'acl', 'controller' => 'acl_permissions', 'action' => 'index')); + } else { + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/acl_aros_controller.php b/app/plugins/acl/controllers/acl_aros_controller.php new file mode 100644 index 0000000..d6f3262 --- /dev/null +++ b/app/plugins/acl/controllers/acl_aros_controller.php @@ -0,0 +1,75 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclArosController extends AclAppController { + public $name = 'AclAros'; + public $uses = array('Acl.AclAro'); + + public function admin_index() { + $this->set('title_for_layout', __('Aros', true)); + + $this->AclAro->recursive = 0; + $this->set('aros', $this->paginate()); + } + + public function admin_add() { + $this->set('title_for_layout', __('Add Aro', true)); + + if (!empty($this->data)) { + $this->AclAro->create(); + if ($this->AclAro->save($this->data)) { + $this->Session->setFlash(__('The Aro has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aro could not be saved. Please, try again.', true)); + } + } + } + + public function admin_edit($id = null) { + $this->set('title_for_layout', __('Edit Aro', true)); + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid Aro', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->AclAro->save($this->data)) { + $this->Session->setFlash(__('The Aro has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The Aro could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->AclAro->read(null, $id); + } + } + + public function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for Aro', true)); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->AclAro->delete($id)) { + $this->Session->setFlash(__('Aro deleted', true)); + $this->redirect(array('action' => 'index')); + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/acl_permissions_controller.php b/app/plugins/acl/controllers/acl_permissions_controller.php new file mode 100644 index 0000000..676649e --- /dev/null +++ b/app/plugins/acl/controllers/acl_permissions_controller.php @@ -0,0 +1,132 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclPermissionsController extends AclAppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'AclPermissions'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Acl.AclAco', + 'Acl.AclAro', + 'Acl.AclArosAco', + 'Role', + ); + + public function admin_index() { + $this->set('title_for_layout', __('Permissions', true)); + + $acoConditions = array( + 'parent_id !=' => null, + //'model' => null, + 'foreign_key' => null, + 'alias !=' => null, + ); + $acos = $this->Acl->Aco->generatetreelist($acoConditions, '{n}.Aco.id', '{n}.Aco.alias'); + $roles = $this->Role->find('list'); + $this->set(compact('acos', 'roles')); + + $rolesAros = $this->AclAro->find('all', array( + 'conditions' => array( + 'AclAro.model' => 'Role', + 'AclAro.foreign_key' => array_keys($roles), + ), + )); + $rolesAros = Set::combine($rolesAros, '{n}.AclAro.foreign_key', '{n}.AclAro.id'); + + $permissions = array(); // acoId => roleId => bool + foreach ($acos AS $acoId => $acoAlias) { + if (substr_count($acoAlias, '_') != 0) { + $permission = array(); + foreach ($roles AS $roleId => $roleTitle) { + $hasAny = array( + 'aco_id' => $acoId, + 'aro_id' => $rolesAros[$roleId], + '_create' => 1, + '_read' => 1, + '_update' => 1, + '_delete' => 1, + ); + if ($this->AclArosAco->hasAny($hasAny)) { + $permission[$roleId] = 1; + } else { + $permission[$roleId] = 0; + } + $permissions[$acoId] = $permission; + } + } + } + $this->set(compact('rolesAros', 'permissions')); + } + + public function admin_toggle($acoId, $aroId) { + if (!$this->RequestHandler->isAjax()) { + $this->redirect(array('action' => 'index')); + } + + // see if acoId and aroId combination exists + $conditions = array( + 'AclArosAco.aco_id' => $acoId, + 'AclArosAco.aro_id' => $aroId, + ); + if ($this->AclArosAco->hasAny($conditions)) { + $data = $this->AclArosAco->find('first', array('conditions' => $conditions)); + if ($data['AclArosAco']['_create'] == 1 && + $data['AclArosAco']['_read'] == 1 && + $data['AclArosAco']['_update'] == 1 && + $data['AclArosAco']['_delete'] == 1) { + // from 1 to 0 + $data['AclArosAco']['_create'] = 0; + $data['AclArosAco']['_read'] = 0; + $data['AclArosAco']['_update'] = 0; + $data['AclArosAco']['_delete'] = 0; + $permitted = 0; + } else { + // from 0 to 1 + $data['AclArosAco']['_create'] = 1; + $data['AclArosAco']['_read'] = 1; + $data['AclArosAco']['_update'] = 1; + $data['AclArosAco']['_delete'] = 1; + $permitted = 1; + } + } else { + // create - CRUD with 1 + $data['AclArosAco']['aco_id'] = $acoId; + $data['AclArosAco']['aro_id'] = $aroId; + $data['AclArosAco']['_create'] = 1; + $data['AclArosAco']['_read'] = 1; + $data['AclArosAco']['_update'] = 1; + $data['AclArosAco']['_delete'] = 1; + $permitted = 1; + } + + // save + $success = 0; + if ($this->AclArosAco->save($data)) { + $success = 1; + } + + $this->set(compact('acoId', 'aroId', 'data', 'success', 'permitted')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/components/.svn/entries b/app/plugins/acl/controllers/components/.svn/entries new file mode 100644 index 0000000..356237e --- /dev/null +++ b/app/plugins/acl/controllers/components/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/controllers/components +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +acl_generate.php +file + + + + +2010-09-04T08:55:28.000000Z +44c5d56bf43a5b417d5a9038d5012600 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3708 + +acl_filter.php +file + + + + +2010-09-04T08:55:28.000000Z +f94841b6a4d89c9d82306bf7a4c99f82 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3823 + diff --git a/app/plugins/acl/controllers/components/.svn/text-base/acl_filter.php.svn-base b/app/plugins/acl/controllers/components/.svn/text-base/acl_filter.php.svn-base new file mode 100644 index 0000000..de744a3 --- /dev/null +++ b/app/plugins/acl/controllers/components/.svn/text-base/acl_filter.php.svn-base @@ -0,0 +1,102 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclFilterComponent extends Object { + +/** + * @param object $controller controller + * @param array $settings settings + */ + public function initialize(&$controller, $settings = array()) { + $this->controller =& $controller; + } + +/** + * acl and auth + * + * @return void + */ + public function auth() { + //Configure AuthComponent + $this->controller->Auth->authorize = 'actions'; + $this->controller->Auth->loginAction = array('plugin' => 0, 'controller' => 'users', 'action' => 'login'); + $this->controller->Auth->logoutRedirect = array('plugin' => 0, 'controller' => 'users', 'action' => 'login'); + $this->controller->Auth->loginRedirect = array('plugin' => 0, 'controller' => 'users', 'action' => 'index'); + $this->controller->Auth->userScope = array('User.status' => 1); + $this->controller->Auth->actionPath = 'controllers/'; + + if ($this->controller->Auth->user() && + $this->controller->Auth->user('role_id') == 1) { + // Role: Admin + $this->controller->Auth->allowedActions = array('*'); + } else { + if ($this->controller->Auth->user()) { + $roleId = $this->controller->Auth->user('role_id'); + } else { + $roleId = 3; // Role: Public + } + + $aro = $this->controller->Acl->Aro->find('first', array( + 'conditions' => array( + 'Aro.model' => 'Role', + 'Aro.foreign_key' => $roleId, + ), + 'recursive' => -1, + )); + $aroId = $aro['Aro']['id']; + $thisControllerNode = $this->controller->Acl->Aco->node($this->controller->Auth->actionPath.$this->controller->name); + if ($thisControllerNode) { + $thisControllerNode = $thisControllerNode['0']; + $thisControllerActions = $this->controller->Acl->Aco->find('list', array( + 'conditions' => array( + 'Aco.parent_id' => $thisControllerNode['Aco']['id'], + ), + 'fields' => array( + 'Aco.id', + 'Aco.alias', + ), + 'recursive' => '-1', + )); + $thisControllerActionsIds = array_keys($thisControllerActions); + $allowedActions = $this->controller->Acl->Aco->Permission->find('list', array( + 'conditions' => array( + 'Permission.aro_id' => $aroId, + 'Permission.aco_id' => $thisControllerActionsIds, + 'Permission._create' => 1, + 'Permission._read' => 1, + 'Permission._update' => 1, + 'Permission._delete' => 1, + ), + 'fields' => array( + 'id', + 'aco_id', + ), + 'recursive' => '-1', + )); + $allowedActionsIds = array_values($allowedActions); + } + + $allow = array(); + if (isset($allowedActionsIds) && + is_array($allowedActionsIds) && + count($allowedActionsIds) > 0) { + foreach ($allowedActionsIds AS $i => $aId) { + $allow[] = $thisControllerActions[$aId]; + } + } + $this->controller->Auth->allowedActions = $allow; + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/components/.svn/text-base/acl_generate.php.svn-base b/app/plugins/acl/controllers/components/.svn/text-base/acl_generate.php.svn-base new file mode 100644 index 0000000..3d717d7 --- /dev/null +++ b/app/plugins/acl/controllers/components/.svn/text-base/acl_generate.php.svn-base @@ -0,0 +1,120 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclGenerateComponent extends Object { + +/** + * @param object $controller controller + * @param array $settings settings + */ + public function initialize(&$controller, $settings = array()) { + $this->controller =& $controller; + App::import('Core', 'File'); + $this->folder = new Folder; + } + +/** + * List all controllers (including plugin controllers) + * + * @return array + */ + public function listControllers() { + $controllerPaths = array(); + + // app/controllers + $this->folder->path = APP.'controllers'.DS; + $controllers = $this->folder->read(); + foreach ($controllers['1'] AS $c) { + if (strstr($c, '.php')) { + $cName = Inflector::camelize(str_replace('_controller.php', '', $c)); + $controllerPaths[$cName] = APP.'controllers'.DS.$c; + } + } + + // plugins/*/controllers/ + $this->folder->path = APP.'plugins'.DS; + $plugins = $this->folder->read(); + foreach ($plugins['0'] AS $p) { + if ($p != 'install') { + $this->folder->path = APP.'plugins'.DS.$p.DS.'controllers'.DS; + $pluginControllers = $this->folder->read(); + foreach ($pluginControllers['1'] AS $pc) { + if (strstr($pc, '.php')) { + $pcName = Inflector::camelize(str_replace('_controller.php', '', $pc)); + $controllerPaths[$pcName] = APP.'plugins'.DS.$p.DS.'controllers'.DS.$pc; + } + } + } + } + + return $controllerPaths; + } + +/** + * List actions of a particular Controller. + * + * @param string $name Controller name (the name only, without having Controller at the end) + * @param string $path full path to the controller file including file extension + * @param boolean $all default is false. it true, private actions will be returned too. + * + * @return array + */ + public function listActions($name, $path) { + // base methods + if (strpos($path, 'app'.DS.'plugins')) { + $plugin = $this->getPluginFromPath($path); + $pacName = Inflector::camelize($plugin) . 'AppController'; // pac - PluginAppController + $pacPath = APP.'plugins'.DS.$plugin.DS.$plugin.'_app_controller.php'; + App::import('Controller', $pacName, null, null, $pacPath); + $baseMethods = get_class_methods($pacName); + } else { + $baseMethods = get_class_methods('AppController'); + } + + $controllerName = $name.'Controller'; + App::import('Controller', $controllerName, null, null, $path); + $methods = get_class_methods($controllerName); + + // filter out methods + foreach ($methods AS $k => $method) { + if (strpos($method, '_', 0) === 0) { + unset($methods[$k]); + continue; + } + if (in_array($method, $baseMethods)) { + unset($methods[$k]); + continue; + } + } + + return $methods; + } + +/** + * Get plugin name from path + * + * @param string $path file path + * + * @return string + */ + public function getPluginFromPath($path) { + $pathE = explode(DS, $path); + $pluginsK = array_search('plugins', $pathE); + $pluginNameK = $pluginsK + 1; + $plugin = $pathE[$pluginNameK]; + + return $plugin; + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/components/acl_filter.php b/app/plugins/acl/controllers/components/acl_filter.php new file mode 100644 index 0000000..0cff37f --- /dev/null +++ b/app/plugins/acl/controllers/components/acl_filter.php @@ -0,0 +1,115 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclFilterComponent extends Object { + +/** + * @param object $controller controller + * @param array $settings settings + */ + public function initialize(&$controller, $settings = array()) { + $this->controller =& $controller; + } + +/** + * acl and auth + * + * @return void + */ + public function auth() { + //Configure AuthComponent + $this->controller->Auth->authorize = 'actions'; + $this->controller->Auth->loginAction = array( + 'plugin' => null, + 'controller' => 'users', + 'action' => 'login', + ); + $this->controller->Auth->logoutRedirect = array( + 'plugin' => null, + 'controller' => 'users', + 'action' => 'login', + ); + $this->controller->Auth->loginRedirect = array( + 'plugin' => null, + 'controller' => 'users', + 'action' => 'index', + ); + $this->controller->Auth->userScope = array( + 'User.status' => 1, + ); + $this->controller->Auth->actionPath = 'controllers/'; + + if ($this->controller->Auth->user() && $this->controller->Auth->user('role_id') == 1) { + // Role: Admin + $this->controller->Auth->allowedActions = array('*'); + } else { + if ($this->controller->Auth->user()) { + $roleId = $this->controller->Auth->user('role_id'); + } else { + $roleId = 3; // Role: Public + } + + $aro = $this->controller->Acl->Aro->find('first', array( + 'conditions' => array( + 'Aro.model' => 'Role', + 'Aro.foreign_key' => $roleId, + ), + 'recursive' => -1, + )); + $aroId = $aro['Aro']['id']; + $thisControllerNode = $this->controller->Acl->Aco->node($this->controller->Auth->actionPath.$this->controller->name); + if ($thisControllerNode) { + $thisControllerNode = $thisControllerNode['0']; + $thisControllerActions = $this->controller->Acl->Aco->find('list', array( + 'conditions' => array( + 'Aco.parent_id' => $thisControllerNode['Aco']['id'], + ), + 'fields' => array( + 'Aco.id', + 'Aco.alias', + ), + 'recursive' => '-1', + )); + $thisControllerActionsIds = array_keys($thisControllerActions); + $allowedActions = $this->controller->Acl->Aco->Permission->find('list', array( + 'conditions' => array( + 'Permission.aro_id' => $aroId, + 'Permission.aco_id' => $thisControllerActionsIds, + 'Permission._create' => 1, + 'Permission._read' => 1, + 'Permission._update' => 1, + 'Permission._delete' => 1, + ), + 'fields' => array( + 'id', + 'aco_id', + ), + 'recursive' => '-1', + )); + $allowedActionsIds = array_values($allowedActions); + } + + $allow = array(); + if (isset($allowedActionsIds) && + is_array($allowedActionsIds) && + count($allowedActionsIds) > 0) { + foreach ($allowedActionsIds AS $i => $aId) { + $allow[] = $thisControllerActions[$aId]; + } + } + $this->controller->Auth->allowedActions = $allow; + } + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/controllers/components/acl_generate.php b/app/plugins/acl/controllers/components/acl_generate.php new file mode 100644 index 0000000..fda590e --- /dev/null +++ b/app/plugins/acl/controllers/components/acl_generate.php @@ -0,0 +1,120 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class AclGenerateComponent extends Object { + +/** + * @param object $controller controller + * @param array $settings settings + */ + public function initialize(&$controller, $settings = array()) { + $this->controller =& $controller; + App::import('Core', 'File'); + $this->folder = new Folder; + } + +/** + * List all controllers (including plugin controllers) + * + * @return array + */ + public function listControllers() { + $controllerPaths = array(); + + // app/controllers + $this->folder->path = APP.'controllers'.DS; + $controllers = $this->folder->read(); + foreach ($controllers['1'] AS $c) { + if (substr($c, strlen($c) - 4, 4) == '.php') { + $cName = Inflector::camelize(str_replace('_controller.php', '', $c)); + $controllerPaths[$cName] = APP.'controllers'.DS.$c; + } + } + + // plugins/*/controllers/ + $this->folder->path = APP.'plugins'.DS; + $plugins = $this->folder->read(); + foreach ($plugins['0'] AS $p) { + if ($p != 'install') { + $this->folder->path = APP.'plugins'.DS.$p.DS.'controllers'.DS; + $pluginControllers = $this->folder->read(); + foreach ($pluginControllers['1'] AS $pc) { + if (substr($pc, strlen($pc) - 4, 4) == '.php') { + $pcName = Inflector::camelize(str_replace('_controller.php', '', $pc)); + $controllerPaths[$pcName] = APP.'plugins'.DS.$p.DS.'controllers'.DS.$pc; + } + } + } + } + + return $controllerPaths; + } + +/** + * List actions of a particular Controller. + * + * @param string $name Controller name (the name only, without having Controller at the end) + * @param string $path full path to the controller file including file extension + * @param boolean $all default is false. it true, private actions will be returned too. + * + * @return array + */ + public function listActions($name, $path) { + // base methods + if (strpos($path, APP.'plugins') >= 0) { + $plugin = $this->getPluginFromPath($path); + $pacName = Inflector::camelize($plugin) . 'AppController'; // pac - PluginAppController + $pacPath = APP.'plugins'.DS.$plugin.DS.$plugin.'_app_controller.php'; + App::import('Controller', $pacName, null, null, $pacPath); + $baseMethods = get_class_methods($pacName); + } else { + $baseMethods = get_class_methods('AppController'); + } + + $controllerName = $name.'Controller'; + App::import('Controller', $controllerName, null, null, $path); + $methods = get_class_methods($controllerName); + + // filter out methods + foreach ($methods AS $k => $method) { + if (strpos($method, '_', 0) === 0) { + unset($methods[$k]); + continue; + } + if (in_array($method, $baseMethods)) { + unset($methods[$k]); + continue; + } + } + + return $methods; + } + +/** + * Get plugin name from path + * + * @param string $path file path + * + * @return string + */ + public function getPluginFromPath($path) { + $pathE = explode(DS, $path); + $pluginsK = array_search('plugins', $pathE); + $pluginNameK = $pluginsK + 1; + $plugin = $pathE[$pluginNameK]; + + return $plugin; + } + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/models/.svn/entries b/app/plugins/acl/models/.svn/entries new file mode 100644 index 0000000..38bc745 --- /dev/null +++ b/app/plugins/acl/models/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/models +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +acl_aro.php +file + + + + +2010-09-04T08:55:28.000000Z +170c96962f64d577b827153f78b89631 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +142 + +acl_aco.php +file + + + + +2010-09-04T08:55:28.000000Z +062df4955f7f401a6ef3b1d625451535 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +142 + +acl_aros_aco.php +file + + + + +2010-09-04T08:55:28.000000Z +a8e4a47528b158c313b24310379811bf +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +382 + diff --git a/app/plugins/acl/models/.svn/text-base/acl_aco.php.svn-base b/app/plugins/acl/models/.svn/text-base/acl_aco.php.svn-base new file mode 100644 index 0000000..5d3a5da --- /dev/null +++ b/app/plugins/acl/models/.svn/text-base/acl_aco.php.svn-base @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/plugins/acl/models/.svn/text-base/acl_aro.php.svn-base b/app/plugins/acl/models/.svn/text-base/acl_aro.php.svn-base new file mode 100644 index 0000000..bfea203 --- /dev/null +++ b/app/plugins/acl/models/.svn/text-base/acl_aro.php.svn-base @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/plugins/acl/models/.svn/text-base/acl_aros_aco.php.svn-base b/app/plugins/acl/models/.svn/text-base/acl_aros_aco.php.svn-base new file mode 100644 index 0000000..7a4513f --- /dev/null +++ b/app/plugins/acl/models/.svn/text-base/acl_aros_aco.php.svn-base @@ -0,0 +1,19 @@ + array( + 'className' => 'Acl.AclAro', + 'foreignKey' => 'aro_id', + ), + 'AclAco' => array( + 'className' => 'Acl.AclAco', + 'foreignKey' => 'aco_id', + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/models/acl_aco.php b/app/plugins/acl/models/acl_aco.php new file mode 100644 index 0000000..5d3a5da --- /dev/null +++ b/app/plugins/acl/models/acl_aco.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/plugins/acl/models/acl_aro.php b/app/plugins/acl/models/acl_aro.php new file mode 100644 index 0000000..bfea203 --- /dev/null +++ b/app/plugins/acl/models/acl_aro.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/plugins/acl/models/acl_aros_aco.php b/app/plugins/acl/models/acl_aros_aco.php new file mode 100644 index 0000000..7a4513f --- /dev/null +++ b/app/plugins/acl/models/acl_aros_aco.php @@ -0,0 +1,19 @@ + array( + 'className' => 'Acl.AclAro', + 'foreignKey' => 'aro_id', + ), + 'AclAco' => array( + 'className' => 'Acl.AclAco', + 'foreignKey' => 'aco_id', + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/acl/views/.DS_Store b/app/plugins/acl/views/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 +

+ create('AclAco', array('url' => array('action' => 'add')));?> +
+ input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> + \ No newline at end of file diff --git a/app/plugins/acl/views/acl_acos/.svn/text-base/admin_edit.ctp.svn-base b/app/plugins/acl/views/acl_acos/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..1f382f6 --- /dev/null +++ b/app/plugins/acl/views/acl_acos/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,14 @@ +
+

+ create('AclAco', array('url' => array('action' => 'edit')));?> +
+ input('id'); + echo $form->input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_acos/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/acl/views/acl_acos/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..4c713d2 --- /dev/null +++ b/app/plugins/acl/views/acl_acos/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,48 @@ +
+

+ +
+
    +
  • link(__('New Aco', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('parent_id'), + $paginator->sort('model'), + $paginator->sort('foreign_key'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($acos AS $aco) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $aco['AclAco']['id'])); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $aco['AclAco']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $aco['AclAco']['id'], + $aco['AclAco']['parent_id'], + $aco['AclAco']['model'], + $aco['AclAco']['foreign_key'], + $aco['AclAco']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
+ +
numbers(); ?>
+
counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_acos/admin_add.ctp b/app/plugins/acl/views/acl_acos/admin_add.ctp new file mode 100644 index 0000000..03b1151 --- /dev/null +++ b/app/plugins/acl/views/acl_acos/admin_add.ctp @@ -0,0 +1,13 @@ +
+

+ create('AclAco', array('url' => array('action' => 'add')));?> +
+ input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_acos/admin_edit.ctp b/app/plugins/acl/views/acl_acos/admin_edit.ctp new file mode 100644 index 0000000..1f382f6 --- /dev/null +++ b/app/plugins/acl/views/acl_acos/admin_edit.ctp @@ -0,0 +1,14 @@ +
+

+ create('AclAco', array('url' => array('action' => 'edit')));?> +
+ input('id'); + echo $form->input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_acos/admin_index.ctp b/app/plugins/acl/views/acl_acos/admin_index.ctp new file mode 100644 index 0000000..4c713d2 --- /dev/null +++ b/app/plugins/acl/views/acl_acos/admin_index.ctp @@ -0,0 +1,48 @@ +
+

+ +
+
    +
  • link(__('New Aco', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('parent_id'), + $paginator->sort('model'), + $paginator->sort('foreign_key'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($acos AS $aco) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $aco['AclAco']['id'])); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $aco['AclAco']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $aco['AclAco']['id'], + $aco['AclAco']['parent_id'], + $aco['AclAco']['model'], + $aco['AclAco']['foreign_key'], + $aco['AclAco']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
+ +
numbers(); ?>
+
counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/.svn/entries b/app/plugins/acl/views/acl_actions/.svn/entries new file mode 100644 index 0000000..f7b4ad1 --- /dev/null +++ b/app/plugins/acl/views/acl_actions/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/views/acl_actions +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +8e88741d7fb6d784e57ad13d919d2a29 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +601 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +555d5c27ab5964627c6c9afd83c0924e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2260 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +8bab92d07b875049588924883fa54f4e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +562 + diff --git a/app/plugins/acl/views/acl_actions/.svn/text-base/admin_add.ctp.svn-base b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..9e02a91 --- /dev/null +++ b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,15 @@ +
+

+ create('Aco', array('url' => array('controller' => 'acl_actions', 'action' => 'add'))); ?> +
+ input('parent_id', array( + 'options' => $acos, + 'empty' => true, + 'rel' => __('Choose none if the Aco is a controller.', true), + )); + echo $form->input('alias', array()); + ?> +
+ end('Submit'); ?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/.svn/text-base/admin_edit.ctp.svn-base b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..17c7948 --- /dev/null +++ b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,17 @@ +
+

+ + create('Aco', array('url' => array('controller' => 'acl_actions', 'action' => 'edit'))); ?> +
+ input('id'); + echo $form->input('parent_id', array( + 'options' => $acos, + 'empty' => true, + 'rel' => __('Choose none if the Aco is a controller.', true), + )); + echo $form->input('alias', array()); + ?> +
+ end('Submit'); ?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..21a19d4 --- /dev/null +++ b/app/plugins/acl/views/acl_actions/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,61 @@ +script('/acl/js/acl_permissions.js', false); + $html->scriptBlock("$(document).ready(function(){ AclPermissions.documentReady(); });", array('inline' => false)); +?> +
+

+ +
+
    +
  • link(__('New Action', true), array('action'=>'add')); ?>
  • +
  • link(__('Generate Actions', true), array('action'=>'generate')); ?>
  • +
+
+ + + tableHeaders(array( + __('Id', true), + __('Alias', true), + __('Actions', true), + )); + echo $tableHeaders; + + $currentController = ''; + foreach ($acos AS $id => $alias) { + $class = ''; + if(substr($alias, 0, 1) == '_') { + $level = 1; + $class .= 'level-'.$level; + $oddOptions = array('class' => 'hidden controller-'.$currentController); + $evenOptions = array('class' => 'hidden controller-'.$currentController); + $alias = substr_replace($alias, '', 0, 1); + } else { + $level = 0; + $class .= ' controller expand'; + $oddOptions = array(); + $evenOptions = array(); + $currentController = $alias; + } + + $actions = $html->link(__('Edit', true), array('action' => 'edit', $id)); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $id, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + $actions .= ' ' . $html->link(__('Move up', true), array('action' => 'move', $id, 'up')); + $actions .= ' ' . $html->link(__('Move down', true), array('action' => 'move', $id, 'down')); + + $row = array( + $id, + $html->div($class, $alias), + $actions, + ); + + echo $html->tableCells(array($row), $oddOptions, $evenOptions); + } + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/admin_add.ctp b/app/plugins/acl/views/acl_actions/admin_add.ctp new file mode 100644 index 0000000..9621314 --- /dev/null +++ b/app/plugins/acl/views/acl_actions/admin_add.ctp @@ -0,0 +1,15 @@ +
+

+ Form->create('Aco', array('url' => array('controller' => 'acl_actions', 'action' => 'add'))); ?> +
+ Form->input('parent_id', array( + 'options' => $acos, + 'empty' => true, + 'rel' => __('Choose none if the Aco is a controller.', true), + )); + echo $this->Form->input('alias', array()); + ?> +
+ Form->end('Submit'); ?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/admin_edit.ctp b/app/plugins/acl/views/acl_actions/admin_edit.ctp new file mode 100644 index 0000000..890694b --- /dev/null +++ b/app/plugins/acl/views/acl_actions/admin_edit.ctp @@ -0,0 +1,17 @@ +
+

+ + Form->create('Aco', array('url' => array('controller' => 'acl_actions', 'action' => 'edit'))); ?> +
+ Form->input('id'); + echo $this->Form->input('parent_id', array( + 'options' => $acos, + 'empty' => true, + 'rel' => __('Choose none if the Aco is a controller.', true), + )); + echo $this->Form->input('alias', array()); + ?> +
+ Form->end('Submit'); ?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_actions/admin_index.ctp b/app/plugins/acl/views/acl_actions/admin_index.ctp new file mode 100644 index 0000000..3c1685f --- /dev/null +++ b/app/plugins/acl/views/acl_actions/admin_index.ctp @@ -0,0 +1,61 @@ +Html->script('/acl/js/acl_permissions.js', false); + $this->Html->scriptBlock("$(document).ready(function(){ AclPermissions.documentReady(); });", array('inline' => false)); +?> +
+

+ +
+
    +
  • Html->link(__('New Action', true), array('action'=>'add')); ?>
  • +
  • Html->link(__('Generate Actions', true), array('action'=>'generate')); ?>
  • +
+
+ + + Html->tableHeaders(array( + __('Id', true), + __('Alias', true), + __('Actions', true), + )); + echo $tableHeaders; + + $currentController = ''; + foreach ($acos AS $id => $alias) { + $class = ''; + if(substr($alias, 0, 1) == '_') { + $level = 1; + $class .= 'level-'.$level; + $oddOptions = array('class' => 'hidden controller-'.$currentController); + $evenOptions = array('class' => 'hidden controller-'.$currentController); + $alias = substr_replace($alias, '', 0, 1); + } else { + $level = 0; + $class .= ' controller expand'; + $oddOptions = array(); + $evenOptions = array(); + $currentController = $alias; + } + + $actions = $this->Html->link(__('Edit', true), array('action' => 'edit', $id)); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $id, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + $actions .= ' ' . $this->Html->link(__('Move up', true), array('action' => 'move', $id, 'up')); + $actions .= ' ' . $this->Html->link(__('Move down', true), array('action' => 'move', $id, 'down')); + + $row = array( + $id, + $this->Html->div($class, $alias), + $actions, + ); + + echo $this->Html->tableCells(array($row), $oddOptions, $evenOptions); + } + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/.svn/entries b/app/plugins/acl/views/acl_aros/.svn/entries new file mode 100644 index 0000000..02fa9f1 --- /dev/null +++ b/app/plugins/acl/views/acl_aros/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/views/acl_aros +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c87547c3eff4989dce9b50d6197c6593 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +585 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +45a40745b44c2855786262261b1b2ff3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1840 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +db25a0cfa3ab4877fe187bfa41746249 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +547 + diff --git a/app/plugins/acl/views/acl_aros/.svn/text-base/admin_add.ctp.svn-base b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..759f0dc --- /dev/null +++ b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,13 @@ +
+

+ create('AclAro', array('url' => array('action' => 'add')));?> +
+ input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/.svn/text-base/admin_edit.ctp.svn-base b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..245225f --- /dev/null +++ b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,14 @@ +
+

+ create('AclAro', array('url' => array('action' => 'edit')));?> +
+ input('id'); + echo $form->input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..9eb0edd --- /dev/null +++ b/app/plugins/acl/views/acl_aros/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,48 @@ +
+

+ +
+
    +
  • link(__('New Aro', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('parent_id'), + $paginator->sort('model'), + $paginator->sort('foreign_key'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($aros AS $aro) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $aro['AclAro']['id'])); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $aro['AclAro']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $aro['AclAro']['id'], + $aro['AclAro']['parent_id'], + $aro['AclAro']['model'], + $html->link($aro['AclAro']['foreign_key'], array('plugin' => 0, 'controller' => Inflector::pluralize(strtolower($aro['AclAro']['model'])), 'action' => 'edit', $aro['AclAro']['foreign_key'])), + $aro['AclAro']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
+ +
numbers(); ?>
+
counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/admin_add.ctp b/app/plugins/acl/views/acl_aros/admin_add.ctp new file mode 100644 index 0000000..759f0dc --- /dev/null +++ b/app/plugins/acl/views/acl_aros/admin_add.ctp @@ -0,0 +1,13 @@ +
+

+ create('AclAro', array('url' => array('action' => 'add')));?> +
+ input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/admin_edit.ctp b/app/plugins/acl/views/acl_aros/admin_edit.ctp new file mode 100644 index 0000000..245225f --- /dev/null +++ b/app/plugins/acl/views/acl_aros/admin_edit.ctp @@ -0,0 +1,14 @@ +
+

+ create('AclAro', array('url' => array('action' => 'edit')));?> +
+ input('id'); + echo $form->input('parent_id', array('between' => '
')); + echo $form->input('model', array('between' => '
')); + echo $form->input('foreign_key', array('between' => '
')); + echo $form->input('alias', array('between' => '
')); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_aros/admin_index.ctp b/app/plugins/acl/views/acl_aros/admin_index.ctp new file mode 100644 index 0000000..9eb0edd --- /dev/null +++ b/app/plugins/acl/views/acl_aros/admin_index.ctp @@ -0,0 +1,48 @@ +
+

+ +
+
    +
  • link(__('New Aro', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('parent_id'), + $paginator->sort('model'), + $paginator->sort('foreign_key'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($aros AS $aro) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $aro['AclAro']['id'])); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $aro['AclAro']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $aro['AclAro']['id'], + $aro['AclAro']['parent_id'], + $aro['AclAro']['model'], + $html->link($aro['AclAro']['foreign_key'], array('plugin' => 0, 'controller' => Inflector::pluralize(strtolower($aro['AclAro']['model'])), 'action' => 'edit', $aro['AclAro']['foreign_key'])), + $aro['AclAro']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
+ +
numbers(); ?>
+
counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_permissions/.svn/entries b/app/plugins/acl/views/acl_permissions/.svn/entries new file mode 100644 index 0000000..275a406 --- /dev/null +++ b/app/plugins/acl/views/acl_permissions/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/views/acl_permissions +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +4cfa3155ec3391eddbcda2595c020ced +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2688 + +admin_toggle.ctp +file + + + + +2010-09-04T08:55:28.000000Z +eca5c02a9756f35b55530a9972fac93e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +409 + diff --git a/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..7f92cc3 --- /dev/null +++ b/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,71 @@ +script('/acl/js/acl_permissions.js', false); +?> +
+

+ +
+
    +
  • link(__('Generate Actions', true), array('controller' => 'acl_actions', 'action'=>'generate', 'permissions' => 1)); ?>
  • +
  • link(__('Edit Actions', true), array('controller' => 'acl_actions', 'action'=>'index', 'permissions' => 1)); ?>
  • +
+
+ + + tableHeaders($tableHeaders); + echo $tableHeaders; + + $currentController = ''; + foreach ($acos AS $id => $alias) { + $class = ''; + if(substr($alias, 0, 1) == '_') { + $level = 1; + $class .= 'level-'.$level; + $oddOptions = array('class' => 'hidden controller-'.$currentController); + $evenOptions = array('class' => 'hidden controller-'.$currentController); + $alias = substr_replace($alias, '', 0, 1); + } else { + $level = 0; + $class .= ' controller expand'; + $oddOptions = array(); + $evenOptions = array(); + $currentController = $alias; + } + + $row = array( + $id, + $html->div($class, $alias), + ); + + foreach ($roles AS $roleId => $roleTitle) { + if ($level != 0) { + if ($roleId != 1) { + if ($permissions[$id][$roleId] == 1) { + $row[] = $html->image('/img/icons/tick.png', array('class' => 'permission-toggle', 'rel' => $id.'-'.$rolesAros[$roleId])); + } else { + $row[] = $html->image('/img/icons/cross.png', array('class' => 'permission-toggle', 'rel' => $id.'-'.$rolesAros[$roleId])); + } + } else { + $row[] = $html->image('/img/icons/tick_disabled.png', array('class' => 'permission-disabled')); + } + } else { + $row[] = ''; + } + } + + echo $html->tableCells(array($row), $oddOptions, $evenOptions); + } + + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_toggle.ctp.svn-base b/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_toggle.ctp.svn-base new file mode 100644 index 0000000..d70b266 --- /dev/null +++ b/app/plugins/acl/views/acl_permissions/.svn/text-base/admin_toggle.ctp.svn-base @@ -0,0 +1,13 @@ +image('/img/icons/tick.png', array('class' => 'permission-toggle', 'rel' => $acoId.'-'.$aroId)); + } else { + echo $html->image('/img/icons/cross.png', array('class' => 'permission-toggle', 'rel' => $acoId.'-'.$aroId)); + } + } else { + __('error'); + } + + Configure::write('debug', 0); +?> \ No newline at end of file diff --git a/app/plugins/acl/views/acl_permissions/admin_index.ctp b/app/plugins/acl/views/acl_permissions/admin_index.ctp new file mode 100644 index 0000000..92ab1da --- /dev/null +++ b/app/plugins/acl/views/acl_permissions/admin_index.ctp @@ -0,0 +1,71 @@ +Html->script('/acl/js/acl_permissions.js', false); +?> +
+

+ +
+
    +
  • Html->link(__('Generate Actions', true), array('controller' => 'acl_actions', 'action'=>'generate', 'permissions' => 1)); ?>
  • +
  • Html->link(__('Edit Actions', true), array('controller' => 'acl_actions', 'action'=>'index', 'permissions' => 1)); ?>
  • +
+
+ + + Html->tableHeaders($tableHeaders); + echo $tableHeaders; + + $currentController = ''; + foreach ($acos AS $id => $alias) { + $class = ''; + if(substr($alias, 0, 1) == '_') { + $level = 1; + $class .= 'level-'.$level; + $oddOptions = array('class' => 'hidden controller-'.$currentController); + $evenOptions = array('class' => 'hidden controller-'.$currentController); + $alias = substr_replace($alias, '', 0, 1); + } else { + $level = 0; + $class .= ' controller expand'; + $oddOptions = array(); + $evenOptions = array(); + $currentController = $alias; + } + + $row = array( + $id, + $this->Html->div($class, $alias), + ); + + foreach ($roles AS $roleId => $roleTitle) { + if ($level != 0) { + if ($roleId != 1) { + if ($permissions[$id][$roleId] == 1) { + $row[] = $this->Html->image('/img/icons/tick.png', array('class' => 'permission-toggle', 'rel' => $id.'-'.$rolesAros[$roleId])); + } else { + $row[] = $this->Html->image('/img/icons/cross.png', array('class' => 'permission-toggle', 'rel' => $id.'-'.$rolesAros[$roleId])); + } + } else { + $row[] = $this->Html->image('/img/icons/tick_disabled.png', array('class' => 'permission-disabled')); + } + } else { + $row[] = ''; + } + } + + echo $this->Html->tableCells(array($row), $oddOptions, $evenOptions); + } + + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/acl/views/acl_permissions/admin_toggle.ctp b/app/plugins/acl/views/acl_permissions/admin_toggle.ctp new file mode 100644 index 0000000..2f1be2f --- /dev/null +++ b/app/plugins/acl/views/acl_permissions/admin_toggle.ctp @@ -0,0 +1,13 @@ +Html->image('/img/icons/tick.png', array('class' => 'permission-toggle', 'rel' => $acoId.'-'.$aroId)); + } else { + echo $this->Html->image('/img/icons/cross.png', array('class' => 'permission-toggle', 'rel' => $acoId.'-'.$aroId)); + } + } else { + __('error'); + } + + Configure::write('debug', 0); +?> \ No newline at end of file diff --git a/app/plugins/acl/webroot/.svn/entries b/app/plugins/acl/webroot/.svn/entries new file mode 100644 index 0000000..a9e4ded --- /dev/null +++ b/app/plugins/acl/webroot/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +js +dir + diff --git a/app/plugins/acl/webroot/js/.svn/entries b/app/plugins/acl/webroot/js/.svn/entries new file mode 100644 index 0000000..0b881a1 --- /dev/null +++ b/app/plugins/acl/webroot/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/acl/webroot/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +acl_permissions.js +file + + + + +2010-09-04T08:55:28.000000Z +9f7c5aa07d0d3a6ec62a8a495aad32a9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1741 + diff --git a/app/plugins/acl/webroot/js/.svn/text-base/acl_permissions.js.svn-base b/app/plugins/acl/webroot/js/.svn/text-base/acl_permissions.js.svn-base new file mode 100644 index 0000000..17c662f --- /dev/null +++ b/app/plugins/acl/webroot/js/.svn/text-base/acl_permissions.js.svn-base @@ -0,0 +1,75 @@ +/** + * AclPermissions + * + * for AclPermissionsController (acl plugin) + */ +var AclPermissions = {}; + +/** + * functions to execute when document is ready + * + * @return void + */ +AclPermissions.documentReady = function() { + AclPermissions.permissionToggle(); + AclPermissions.tableToggle(); + $('tr:has(div.controller)').addClass('controller-row'); +} + +/** + * Toggle permissions (enable/disable) + * + * @return void + */ +AclPermissions.permissionToggle = function() { + $('img.permission-toggle').unbind(); + $('img.permission-toggle').click(function() { + var rel = $(this).attr('rel'); + var rel_e = rel.split('-'); + var acoId = rel_e[0]; + var aroId = rel_e[1]; + + // show loader + $(this).attr('src', Croogo.basePath+'img/ajax/circle_ball.gif'); + + // prepare loadUrl + var loadUrl = Croogo.basePath+'admin/acl/acl_permissions/toggle/'; + loadUrl += acoId+'/'+aroId+'/'; + + // now load it + $(this).parent().load(loadUrl, function() { + AclPermissions.permissionToggle(); + }); + + return false; + }); +} + +/** + * Toggle table rows (collapsible) + * + * @return void + */ +AclPermissions.tableToggle = function() { + $('table div.controller').click(function() { + $('.controller-'+$(this).text()).toggle(); + if ($(this).hasClass('expand')) { + $(this).removeClass('expand'); + $(this).addClass('collapse'); + } else { + $(this).removeClass('collapse'); + $(this).addClass('expand'); + } + }); +} + +/** + * document ready + * + * @return void + */ +$(document).ready(function() { + if (Croogo.params.controller == 'acl_permissions') { + AclPermissions.documentReady(); + } +}); \ No newline at end of file diff --git a/app/plugins/acl/webroot/js/acl_permissions.js b/app/plugins/acl/webroot/js/acl_permissions.js new file mode 100644 index 0000000..17c662f --- /dev/null +++ b/app/plugins/acl/webroot/js/acl_permissions.js @@ -0,0 +1,75 @@ +/** + * AclPermissions + * + * for AclPermissionsController (acl plugin) + */ +var AclPermissions = {}; + +/** + * functions to execute when document is ready + * + * @return void + */ +AclPermissions.documentReady = function() { + AclPermissions.permissionToggle(); + AclPermissions.tableToggle(); + $('tr:has(div.controller)').addClass('controller-row'); +} + +/** + * Toggle permissions (enable/disable) + * + * @return void + */ +AclPermissions.permissionToggle = function() { + $('img.permission-toggle').unbind(); + $('img.permission-toggle').click(function() { + var rel = $(this).attr('rel'); + var rel_e = rel.split('-'); + var acoId = rel_e[0]; + var aroId = rel_e[1]; + + // show loader + $(this).attr('src', Croogo.basePath+'img/ajax/circle_ball.gif'); + + // prepare loadUrl + var loadUrl = Croogo.basePath+'admin/acl/acl_permissions/toggle/'; + loadUrl += acoId+'/'+aroId+'/'; + + // now load it + $(this).parent().load(loadUrl, function() { + AclPermissions.permissionToggle(); + }); + + return false; + }); +} + +/** + * Toggle table rows (collapsible) + * + * @return void + */ +AclPermissions.tableToggle = function() { + $('table div.controller').click(function() { + $('.controller-'+$(this).text()).toggle(); + if ($(this).hasClass('expand')) { + $(this).removeClass('expand'); + $(this).addClass('collapse'); + } else { + $(this).removeClass('collapse'); + $(this).addClass('expand'); + } + }); +} + +/** + * document ready + * + * @return void + */ +$(document).ready(function() { + if (Croogo.params.controller == 'acl_permissions') { + AclPermissions.documentReady(); + } +}); \ No newline at end of file diff --git a/app/plugins/block-bot/block_bot_app_controller.php b/app/plugins/block-bot/block_bot_app_controller.php new file mode 100644 index 0000000..7142779 --- /dev/null +++ b/app/plugins/block-bot/block_bot_app_controller.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/plugins/block-bot/config/block_bot_bootstrap.php b/app/plugins/block-bot/config/block_bot_bootstrap.php new file mode 100644 index 0000000..ff81810 --- /dev/null +++ b/app/plugins/block-bot/config/block_bot_bootstrap.php @@ -0,0 +1,161 @@ +'\"mozilla'), + array('nome'=>'''acquia-crawler'), + array('nome'=>'adultsvisitus'), + array('nome'=>'alexa'), + array('nome'=>'ant'), + array('nome'=>'atrax'), + array('nome'=>'baiduspider'), + array('nome'=>'bdfetch'), + array('nome'=>'betabot'), + array('nome'=>'bitlybot'), + array('nome'=>'biz360'), + array('nome'=>'blogblogs'), + array('nome'=>'blogcop'), + array('nome'=>'blogsearch'), + array('nome'=>'blogshares.com'), + array('nome'=>'boardreader'), + array('nome'=>'btwebclient'), + array('nome'=>'buzzzy.com'), + array('nome'=>'camontspider'), + array('nome'=>'casper'), + array('nome'=>'ccbot'), + array('nome'=>'cfnetwork'), + array('nome'=>'chen'), + array('nome'=>'cityreview'), + array('nome'=>'comodospider'), + array('nome'=>'core-project'), + array('nome'=>'curl'), + array('nome'=>'cyberpatrol'), + array('nome'=>'czxt2s'), + array('nome'=>'davclnt'), + array('nome'=>'description:'), + array('nome'=>'docomo'), + array('nome'=>'duckduckpreview;'), + array('nome'=>'ecairn-grabber'), + array('nome'=>'elinks'), + array('nome'=>'exactsearch'), + array('nome'=>'explorer'), + array('nome'=>'facebookexternalhit'), + array('nome'=>'fdm'), + array('nome'=>'finly'), + array('nome'=>'firebat'), + array('nome'=>'fj'), + array('nome'=>'gaisbot'), + array('nome'=>'gbplugin'), + array('nome'=>'geohasher'), + array('nome'=>'gigabot'), + array('nome'=>'http://networktools'), + array('nome'=>'http::lite'), + array('nome'=>'ia_archiver'), + array('nome'=>'internet'), + array('nome'=>'jakarta'), + array('nome'=>'java'), + array('nome'=>'jayde'), + array('nome'=>'jigsaw'), + array('nome'=>'jomjaibot'), + array('nome'=>'kmccrew'), + array('nome'=>'lexxebot'), + array('nome'=>'libwww-perl'), + array('nome'=>'linkedinbot'), + array('nome'=>'linkwithin'), + array('nome'=>'loadimpactpageanalyzer'), + array('nome'=>'longurl'), + array('nome'=>'lwp-request'), + array('nome'=>'lwp-trivial'), + array('nome'=>'lynx'), + array('nome'=>'magent'), + array('nome'=>'magpie-crawler'), + array('nome'=>'mail.ru'), + array('nome'=>'mama'), + array('nome'=>'maui'), + array('nome'=>'metauri'), + array('nome'=>'mlbot'), + array('nome'=>'moreoverbot'), + array('nome'=>'motorokr'), + array('nome'=>'msft_bi'), + array('nome'=>'msie'), + array('nome'=>'msproxy'), + array('nome'=>'msr-isrccrawler'), + array('nome'=>'myapp'), + array('nome'=>'netestate'), + array('nome'=>'noopsis'), + array('nome'=>'orbitscripts.com'), + array('nome'=>'ossproxy'), + array('nome'=>'page_test'), + array('nome'=>'panscient.com'), + array('nome'=>'pear'), + array('nome'=>'php'), + array('nome'=>'pirst;'), + array('nome'=>'plagger'), + array('nome'=>'planetwork'), + array('nome'=>'ppc;'), + array('nome'=>'psbot'), + array('nome'=>'puxarapido'), + array('nome'=>'python-urllib'), + array('nome'=>'r6_commentreader'), + array('nome'=>'r6_feedfetcher'), + array('nome'=>'research-scan-bot'), + array('nome'=>'rt240x320'), + array('nome'=>'s2bot'), + array('nome'=>'sch-u450'), + array('nome'=>'semtobot'), + array('nome'=>'sheenbot'), + array('nome'=>'simplepie'), + array('nome'=>'slimbrowser'), + array('nome'=>'snapbot'), + array('nome'=>'snk'), + array('nome'=>'soap::lite/perl'), + array('nome'=>'sogou'), + array('nome'=>'sogou+web+robot'), + array('nome'=>'sogou-test-spider'), + array('nome'=>'sosospider'), + array('nome'=>'space'), + array('nome'=>'sphider'), + array('nome'=>'statoolsbot'), + array('nome'=>'str:\'mozilla/5.0'), + array('nome'=>'survey'), + array('nome'=>'teleca'), + array('nome'=>'teoma'), + array('nome'=>'test.buzzz'), + array('nome'=>'testbot'), + array('nome'=>'the'), + array('nome'=>'twengabot-discover'), + array('nome'=>'twitturly'), + array('nome'=>'typhoeus'), + array('nome'=>'udmsearch'), + array('nome'=>'untiny'), + array('nome'=>'url_test'), + array('nome'=>'user-agent:'), + array('nome'=>'vb'), + array('nome'=>'voyager'), + array('nome'=>'w3c_validator'), + array('nome'=>'webcollage'), + array('nome'=>'webcorp'), + array('nome'=>'webmoney.advisor'), + array('nome'=>'website'), + array('nome'=>'webvox'), + //array('nome'=>'wget/1.10.2'), // verificar se ao bloquear os acessos do cron job param de funcionar + array('nome'=>'wordpress.com'), + array('nome'=>'wtabot'), + array('nome'=>'www-mechanize'), + array('nome'=>'yahoo'), + array('nome'=>'yandex'), + array('nome'=>'yeti'), + array('nome'=>'ytunnelpro'), + array('nome'=>'zschobot'), + array('nome'=>'zte-g-n290-base') +); + + + + Configure::write('BlockBot.users', $useragents ); + + + Croogo::hookRoutes('BlockBot'); +?> \ No newline at end of file diff --git a/app/plugins/block-bot/config/block_bot_routes.php b/app/plugins/block-bot/config/block_bot_routes.php new file mode 100644 index 0000000..fa16d32 --- /dev/null +++ b/app/plugins/block-bot/config/block_bot_routes.php @@ -0,0 +1,3 @@ + 'block_bot', 'controller' => 'produtos', 'action' => 'index')); +?> \ No newline at end of file diff --git a/app/plugins/block-bot/config/plugin.yml b/app/plugins/block-bot/config/plugin.yml new file mode 100644 index 0000000..0a2963a --- /dev/null +++ b/app/plugins/block-bot/config/plugin.yml @@ -0,0 +1,8 @@ +name: Block bot plugin +description: Plugin para bloquear user agents. Compativel com Coogo 1.3+, os user agents a serem bloqueados estão localizados em plugins/config/bootstrap.php + +author: John-Henrique +authorEmail: john@midianegocios.com.br +authorUrl: http://midianegocios.com.br + +dependencies: diff --git a/app/plugins/block-bot/models/behaviors/block_bot.php b/app/plugins/block-bot/models/behaviors/block_bot.php new file mode 100644 index 0000000..ee92af4 --- /dev/null +++ b/app/plugins/block-bot/models/behaviors/block_bot.php @@ -0,0 +1,53 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class BlockBotBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + if (isset($results[$i][$model->alias]['body'])) { + $results[$i][$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + } elseif (isset($results[$model->alias])) { + if (isset($results[$model->alias]['body'])) { + $results[$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + + return $results; + } + +} +?> \ No newline at end of file diff --git a/app/plugins/block-bot/views/helpers/block_bot_hook.php b/app/plugins/block-bot/views/helpers/block_bot_hook.php new file mode 100644 index 0000000..3e1b9ca --- /dev/null +++ b/app/plugins/block-bot/views/helpers/block_bot_hook.php @@ -0,0 +1,327 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class BlockBotHookHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Layout', + ); +/** + * Called after activating the hook in ExtensionsHooksController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onActivate(&$controller) { + } +/** + * Called after deactivating the hook in ExtensionsHooksController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onDeactivate(&$controller) { + } +/** + * Before render callback. Called before the view file is rendered. + * Antes do arquivo view ser processado é realizado o bloqueio + * + * @return void + */ + public function beforeRender() + { + + // Recebe os user agents proibidos + $userAgents = Configure::read( 'BlockBot.users' ); + + print_r( $userAgents ); + + if( isset( $_SERVER['HTTP_USER_AGENT'] ) ) + { + + // identifica o user agent atual + $userAgent = $_SERVER['HTTP_USER_AGENT']; + + +$userAgents = array( + array('nome'=>'\"mozilla'), + array('nome'=>'''acquia-crawler'), + array('nome'=>'adultsvisitus'), + array('nome'=>'alexa'), + array('nome'=>'ant'), + array('nome'=>'atrax'), + array('nome'=>'baiduspider'), + array('nome'=>'bdfetch'), + array('nome'=>'betabot'), + array('nome'=>'bitlybot'), + array('nome'=>'biz360'), + array('nome'=>'blogblogs'), + array('nome'=>'blogcop'), + array('nome'=>'blogsearch'), + array('nome'=>'blogshares.com'), + array('nome'=>'boardreader'), + array('nome'=>'btwebclient'), + array('nome'=>'buzzzy.com'), + array('nome'=>'camontspider'), + array('nome'=>'casper'), + array('nome'=>'ccbot'), + array('nome'=>'cfnetwork'), + array('nome'=>'chen'), + array('nome'=>'cityreview'), + array('nome'=>'comodospider'), + array('nome'=>'core-project'), + array('nome'=>'curl'), + array('nome'=>'cyberpatrol'), + array('nome'=>'czxt2s'), + array('nome'=>'davclnt'), + array('nome'=>'description:'), + array('nome'=>'docomo'), + array('nome'=>'duckduckpreview;'), + array('nome'=>'ecairn-grabber'), + array('nome'=>'elinks'), + array('nome'=>'exactsearch'), + array('nome'=>'explorer'), + array('nome'=>'facebookexternalhit'), + array('nome'=>'fdm'), + array('nome'=>'finly'), + array('nome'=>'firebat'), + array('nome'=>'fj'), + array('nome'=>'gaisbot'), + array('nome'=>'gbplugin'), + array('nome'=>'geohasher'), + array('nome'=>'gigabot'), + array('nome'=>'http://networktools'), + array('nome'=>'http::lite'), + array('nome'=>'ia_archiver'), + array('nome'=>'internet'), + array('nome'=>'jakarta'), + array('nome'=>'java'), + array('nome'=>'jayde'), + array('nome'=>'jigsaw'), + array('nome'=>'jomjaibot'), + array('nome'=>'kmccrew'), + array('nome'=>'lexxebot'), + array('nome'=>'libwww-perl'), + array('nome'=>'linkedinbot'), + array('nome'=>'linkwithin'), + array('nome'=>'loadimpactpageanalyzer'), + array('nome'=>'longurl'), + array('nome'=>'lwp-request'), + array('nome'=>'lwp-trivial'), + array('nome'=>'lynx'), + array('nome'=>'magent'), + array('nome'=>'magpie-crawler'), + array('nome'=>'mail.ru'), + array('nome'=>'mama'), + array('nome'=>'maui'), + array('nome'=>'metauri'), + array('nome'=>'mlbot'), + array('nome'=>'moreoverbot'), + array('nome'=>'motorokr'), + array('nome'=>'msft_bi'), + array('nome'=>'msie'), + array('nome'=>'msproxy'), + array('nome'=>'msr-isrccrawler'), + array('nome'=>'myapp'), + array('nome'=>'netestate'), + array('nome'=>'noopsis'), + array('nome'=>'orbitscripts.com'), + array('nome'=>'ossproxy'), + array('nome'=>'page_test'), + array('nome'=>'panscient.com'), + array('nome'=>'pear'), + array('nome'=>'php'), + array('nome'=>'pirst;'), + array('nome'=>'plagger'), + array('nome'=>'planetwork'), + array('nome'=>'ppc;'), + array('nome'=>'psbot'), + array('nome'=>'puxarapido'), + array('nome'=>'python-urllib'), + array('nome'=>'r6_commentreader'), + array('nome'=>'r6_feedfetcher'), + array('nome'=>'research-scan-bot'), + array('nome'=>'rt240x320'), + array('nome'=>'s2bot'), + array('nome'=>'sch-u450'), + array('nome'=>'semtobot'), + array('nome'=>'sheenbot'), + array('nome'=>'simplepie'), + array('nome'=>'slimbrowser'), + array('nome'=>'snapbot'), + array('nome'=>'snk'), + array('nome'=>'soap::lite/perl'), + array('nome'=>'sogou'), + array('nome'=>'sogou+web+robot'), + array('nome'=>'sogou-test-spider'), + array('nome'=>'sosospider'), + array('nome'=>'space'), + array('nome'=>'sphider'), + array('nome'=>'statoolsbot'), + array('nome'=>'str:\'mozilla/5.0'), + array('nome'=>'survey'), + array('nome'=>'teleca'), + array('nome'=>'teoma'), + array('nome'=>'test.buzzz'), + array('nome'=>'testbot'), + array('nome'=>'the'), + array('nome'=>'twengabot-discover'), + array('nome'=>'twitturly'), + array('nome'=>'typhoeus'), + array('nome'=>'udmsearch'), + array('nome'=>'untiny'), + array('nome'=>'url_test'), + array('nome'=>'user-agent:'), + array('nome'=>'vb'), + array('nome'=>'voyager'), + array('nome'=>'w3c_validator'), + array('nome'=>'webcollage'), + array('nome'=>'webcorp'), + array('nome'=>'webmoney.advisor'), + array('nome'=>'website'), + array('nome'=>'webvox'), + //array('nome'=>'wget/1.10.2'), // verificar se ao bloquear os acessos do cron job param de funcionar + array('nome'=>'wordpress.com'), + array('nome'=>'wtabot'), + array('nome'=>'www-mechanize'), + array('nome'=>'yahoo'), + array('nome'=>'yandex'), + array('nome'=>'yeti'), + array('nome'=>'ytunnelpro'), + array('nome'=>'zschobot'), + array('nome'=>'zte-g-n290-base') +); + + $userAgent = strtolower( reset( explode( '/', reset( explode( ' ', $userAgent ) ) ) ) ); + //echo $userAgent; + + + foreach ( $userAgents as $userAgentBlock ): + + + // verificando se o user agent existe no indice + if( $userAgent == $userAgentBlock['nome'] ) + //if( preg_match( "/$userAgent/", $userAgentBlock['nome'] ) ) + { + + + /** + * Retorna um erro 401 "não autorizado" + * Teoricamente o bot não deverá continuar na página + */ + header( "HTTP/1.0 401 Unauthorized" ); + + + /** + * Mata o processamento do script + * desta forma não será apresentado o conteúdo + * apenas uma mensagem de erro será exibida ao bot + */ + die( 0 ); + } + + endforeach; + } + + + } +/** + * After render callback. Called after the view file is rendered + * but before the layout has been rendered. + * + * @return void + */ + public function afterRender() + { + } +/** + * Before layout callback. Called before the layout is rendered. + * + * @return void + */ + public function beforeLayout() { + } +/** + * After layout callback. Called after the layout has rendered. + * + * @return void + */ + public function afterLayout() { + } +/** + * Called after LayoutHelper::setNode() + * + * @return void + */ + public function afterSetNode() { + // field values can be changed from hooks + $this->Layout->setNodeField('title', $this->Layout->node('title') ); + } +/** + * Called before LayoutHelper::nodeInfo() + * + * @return string + */ + public function beforeNodeInfo() { + //return '

beforeNodeInfo

'; + } +/** + * Called after LayoutHelper::nodeInfo() + * + * @return string + */ + public function afterNodeInfo() { + //return '

afterNodeInfo

'; + } +/** + * Called before LayoutHelper::nodeBody() + * + * @return string + */ + public function beforeNodeBody() { + //return '

beforeNodeBody

'; + } +/** + * Called after LayoutHelper::nodeBody() + * + * @return string + */ + public function afterNodeBody() { + //return '

afterNodeBody

'; + } +/** + * Called before LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function beforeNodeMoreInfo() { + //return '

beforeNodeMoreInfo

'; + } +/** + * Called after LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function afterNodeMoreInfo() { + //return '

afterNodeMoreInfo

'; + } +} +?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/.gitignore b/app/plugins/cake_ptbr/.gitignore new file mode 100644 index 0000000..2a8b28c --- /dev/null +++ b/app/plugins/cake_ptbr/.gitignore @@ -0,0 +1 @@ +**.mo diff --git a/app/plugins/cake_ptbr/README.textile b/app/plugins/cake_ptbr/README.textile new file mode 100644 index 0000000..e045d33 --- /dev/null +++ b/app/plugins/cake_ptbr/README.textile @@ -0,0 +1,10 @@ +h1. CakePHP em português + +Caso você tenha dúvidas, elogios, reclamações, sugestões, etc., acesse o +"Grupo de discursão CakePHP-PT":http://groups.google.com/group/cakephp-pt e envie uma mensagem. + +Este plugin foi desenvolvido para a versão 1.3 do CakePHP. + +Sobre a utilização deste plugin, consulte a documentação no GitHub:http://wiki.github.com/jrbasso/cake_ptbr/ + +Se você usa o Ohloh, diga que usa o projeto: http://www.ohloh.net/p/cake_ptbr diff --git a/app/plugins/cake_ptbr/config/bootstrap.php b/app/plugins/cake_ptbr/config/bootstrap.php new file mode 100644 index 0000000..2697f15 --- /dev/null +++ b/app/plugins/cake_ptbr/config/bootstrap.php @@ -0,0 +1,17 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +// Tradução das mensagens do core +include dirname(__FILE__) . DS . 'traducao_core.php'; + +// Alteração das regras de inflections +include dirname(__FILE__) . DS . 'inflections.php'; diff --git a/app/plugins/cake_ptbr/config/inflections.php b/app/plugins/cake_ptbr/config/inflections.php new file mode 100644 index 0000000..cee9ab7 --- /dev/null +++ b/app/plugins/cake_ptbr/config/inflections.php @@ -0,0 +1,110 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://wiki.github.com/jrbasso/cake_ptbr/inflections + */ + +// Alteração do inflector +$_uninflected = array('atlas', 'lapis', 'onibus', 'pires', 'virus', '.*x', 'status'); +$_pluralIrregular = array( + 'abdomens' => 'abdomen', + 'alemao' => 'alemaes', + 'artesa' => 'artesaos', + 'as' => 'ases', + 'bencao' => 'bencaos', + 'cao' => 'caes', + 'capelao' => 'capelaes', + 'capitao' => 'capitaes', + 'chao' => 'chaos', + 'charlatao' => 'charlataes', + 'cidadao' => 'cidadaos', + 'consul' => 'consules', + 'cristao' => 'cristaos', + 'dificil' => 'dificeis', + 'email' => 'emails', + 'escrivao' => 'escrivaes', + 'fossel' => 'fosseis', + 'germens' => 'germen', + 'grao' => 'graos', + 'hifens' => 'hifen', + 'irmao' => 'irmaos', + 'liquens' => 'liquen', + 'mal' => 'males', + 'mao' => 'maos', + 'orfao' => 'orfaos', + 'pais' => 'paises', + 'pai' => 'pais', + 'pao' => 'paes', + 'perfil' => 'perfis', + 'projetil' => 'projeteis', + 'reptil' => 'repteis', + 'sacristao' => 'sacristaes', + 'sotao' => 'sotaos', + 'tabeliao' => 'tabeliaes' +); + +Inflector::rules('singular', array( + 'rules' => array( + '/^(.*)(oes|aes|aos)$/i' => '\1ao', + '/^(.*)(a|e|o|u)is$/i' => '\1\2l', + '/^(.*)e?is$/i' => '\1il', + '/^(.*)(r|s|z)es$/i' => '\1\2', + '/^(.*)ns$/i' => '\1m', + '/^(.*)s$/i' => '\1', + ), + 'uninflected' => $_uninflected, + 'irregular' => array_flip($_pluralIrregular) +), true); + +Inflector::rules('plural', array( + 'rules' => array( + '/^(.*)ao$/i' => '\1oes', + '/^(.*)(r|s|z)$/i' => '\1\2es', + '/^(.*)(a|e|o|u)l$/i' => '\1\2is', + '/^(.*)il$/i' => '\1is', + '/^(.*)(m|n)$/i' => '\1ns', + '/^(.*)$/i' => '\1s' + ), + 'uninflected' => $_uninflected, + 'irregular' => $_pluralIrregular +), true); + +Inflector::rules('transliteration', array( + '/À|Á|Â|Ã|Ä|Å/' => 'A', + '/È|É|Ê|Ë/' => 'E', + '/Ì|Í|Î|Ï/' => 'I', + '/Ò|Ó|Ô|Õ|Ö|Ø/' => 'O', + '/Ù|Ú|Û|Ü/' => 'U', + '/Ç/' => 'C', + '/Ð/' => 'D', + '/Ñ/' => 'N', + '/Š/' => 'S', + '/Ý|Ÿ/' => 'Y', + '/Ž/' => 'Z', + '/Æ/' => 'AE', + '/ß/'=> 'ss', + '/Œ/' => 'OE', + '/à|á|â|ã|ä|å|ª/' => 'a', + '/è|é|ê|ë|&/' => 'e', + '/ì|í|î|ï/' => 'i', + '/ò|ó|ô|õ|ö|ø|º/' => 'o', + '/ù|ú|û|ü/' => 'u', + '/ç/' => 'c', + '/ð/' => 'd', + '/ñ/' => 'n', + '/š/' => 's', + '/ý|ÿ/' => 'y', + '/ž/' => 'z', + '/æ/' => 'ae', + '/œ/' => 'oe', + '/ƒ/' => 'f' +)); + +unset($_uninflected, $_pluralIrregular); diff --git a/app/plugins/cake_ptbr/config/traducao_core.php b/app/plugins/cake_ptbr/config/traducao_core.php new file mode 100644 index 0000000..a1edd8b --- /dev/null +++ b/app/plugins/cake_ptbr/config/traducao_core.php @@ -0,0 +1,18 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://wiki.github.com/jrbasso/cake_ptbr/traduzir-as-mensagens-do-core + */ + +// Definindo idioma da aplicação +Configure::write('Config.language', 'pt-br'); + +// Adicionando o caminho do locale +App::build(array('locales' => dirname(dirname(__FILE__)) . DS . 'locale' . DS)); diff --git a/app/plugins/cake_ptbr/locale/pt_br/LC_MESSAGES/core.po b/app/plugins/cake_ptbr/locale/pt_br/LC_MESSAGES/core.po new file mode 100644 index 0000000..fce8c2f --- /dev/null +++ b/app/plugins/cake_ptbr/locale/pt_br/LC_MESSAGES/core.po @@ -0,0 +1,3071 @@ +# translation of core.po to +# Portuguese translation of CakePHP Application +# Copyright 2008 Gabriel Gilini +# Generated from files: +# Revision: 7296 /app/webroot/test.php +# Revision: 7296 /cake/console/libs/templates/skel/webroot/test.php +# Revision: 7118 /cake/console/error.php +# Revision: 7118 /cake/libs/view/errors/error404.ctp +# Revision: 7118 /cake/console/libs/acl.php +# Revision: 7125 /cake/console/libs/bake.php +# Revision: 7118 /cake/console/libs/i18n.php +# Revision: 7118 /cake/console/libs/api.php +# Revision: 7296 /cake/libs/folder.php +# Revision: 7118 /cake/console/libs/tasks/plugin.php +# Revision: 7296 /cake/console/libs/schema.php +# Revision: 7296 /cake/console/libs/shell.php +# Revision: 7296 /cake/console/libs/tasks/controller.php +# Revision: 7296 /cake/console/libs/tasks/model.php +# Revision: 7296 /cake/console/libs/tasks/project.php +# Revision: 7118 /cake/console/libs/tasks/test.php +# Revision: 7296 /cake/console/libs/tasks/view.php +# Revision: 7118 /cake/console/libs/templates/skel/views/layouts/default.ctp +# Revision: 7118 /cake/libs/view/layouts/default.ctp +# Revision: 7118 /cake/tests/test_app/views/layouts/default.ctp +# Revision: 7296 /cake/libs/cache.php +# Revision: 7296 /cake/libs/class_registry.php +# Revision: 7296 /cake/libs/configure.php +# Revision: 7296 /cake/libs/debugger.php +# Revision: 7296 /cake/libs/error.php +# Revision: 6311 /cake/libs/view/errors/missing_controller.ctp +# Revision: 6311 /cake/libs/view/errors/missing_table.ctp +# Revision: 6311 /cake/libs/view/errors/missing_view.ctp +# Revision: 6311 /cake/libs/view/errors/missing_layout.ctp +# Revision: 6311 /cake/libs/view/errors/missing_connection.ctp +# Revision: 6311 /cake/libs/view/errors/missing_scaffolddb.ctp +# Revision: 6311 /cake/libs/view/errors/missing_helper_file.ctp +# Revision: 6311 /cake/libs/view/errors/missing_helper_class.ctp +# Revision: 6311 /cake/libs/view/errors/missing_component_file.ctp +# Revision: 6311 /cake/libs/view/errors/missing_component_class.ctp +# Revision: 6311 /cake/libs/view/errors/missing_model.ctp +# Revision: 7296 /cake/libs/http_socket.php +# Revision: 6311 /cake/libs/overloadable_php4.php +# Revision: 6311 /cake/libs/overloadable_php5.php +# Revision: 7296 /cake/libs/security.php +# Revision: 7296 /cake/libs/session.php +# Revision: 7296 /cake/libs/validation.php +# Revision: 7296 /cake/libs/cache/file.php +# Revision: 7296 /cake/libs/controller/controller.php +# Revision: 7118 /cake/libs/controller/components/auth.php +# Revision: 7296 /cake/libs/controller/scaffold.php +# Revision: 7296 /cake/libs/controller/components/acl.php +# Revision: 7118 /cake/libs/controller/components/security.php +# Revision: 6311 /cake/libs/model/connection_manager.php +# Revision: 7296 /cake/libs/model/model.php +# Revision: 7296 /cake/libs/model/behaviors/containable.php +# Revision: 7296 /cake/libs/model/behaviors/tree.php +# Revision: 7296 /cake/libs/model/datasources/dbo_source.php +# Revision: 7296 /cake/libs/model/datasources/dbo/dbo_oracle.php +# Revision: 7296 /cake/libs/model/datasources/dbo/dbo_mysql.php +# Revision: 7296 /cake/libs/view/helper.php +# Revision: 7296 /cake/libs/view/view.php +# Revision: 6311 /cake/libs/view/elements/dump.ctp +# Revision: 6311 /cake/libs/view/errors/missing_action.ctp +# Revision: 6311 /cake/libs/view/errors/private_action.ctp +# Revision: 6311 /cake/libs/view/errors/scaffold_error.ctp +# Revision: 7296 /cake/libs/view/helpers/form.php +# Revision: 7296 /cake/libs/view/scaffolds/edit.ctp +# Revision: 7296 /cake/libs/view/scaffolds/index.ctp +# Revision: 7296 /cake/libs/view/scaffolds/view.ctp +# Revision: 7296 /cake/libs/view/helpers/session.php +# Revision: 7296 /cake/libs/view/helpers/text.php +# Revision: 7118 /cake/libs/view/pages/home.ctp +# Revision: 7296 /cake/tests/test_app/views/posts/test_nocache_tags.ctp +# Revision: 7296 /cake/tests/cases/libs/file.test.php +# Revision: 7296 /cake/tests/cases/libs/i18n.test.php +# Algumas strings de erro foram deixadas em inglês a fim de facilitar a busca pelo problema no google +# Por exemplo: linha 449 do arquivo http_socket.php +msgid "" +msgstr "" +"Project-Id-Version: CakePHP 1.2.x.x\n" +"POT-Creation-Date: 2010-02-11 20:20-0200\n" +"PO-Revision-Date: 2010-11-17 23:15-0300\n" +"Last-Translator: Juan Basso \n" +"Language-Team: CakePHP I18N & I10N Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n>1;\n" +"X-Generator: KBabel 1.11.4\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: \console\cake.php:327 +#, fuzzy +msgid "Error: Class %s could not be loaded." +msgstr "%s não pode ser carregado" + +#: \console\cake.php:379 +msgid "Error: Unknown %1$s command %2$s." +msgstr "Erro: Desconhecido %1$s comando %2$s." + +#: \console\cake.php:380 +msgid "For usage try `cake %s help`" +msgstr "Para usar, tente `cake %s help`" + +#: \console\error.php:83 +#: \libs\view\errors\error404.ctp:23 +msgid "The requested address %s was not found on this server." +msgstr "O endereço requisitado %s não foi encontrado neste servidor." + +#: \console\error.php:96 +msgid "Missing Controller '%s'" +msgstr "Controller '%s' não encontrado" + +#: \console\error.php:108 +msgid "Missing Method '%s' in '%s'" +msgstr "Método '%s' não encontrado em '%s'" + +#: \console\error.php:120 +msgid "Trying to access private method '%s' in '%s'" +msgstr "Tentando acessar o método privado '%s' em '%s'" + +#: \console\error.php:132 +msgid "Missing database table '%s' for model '%s'" +msgstr "Tabela '%s' não encontrada para o model '%s'" + +#: \console\error.php:143 +msgid "Missing Database" +msgstr "Database não encontrado" + +#: \console\error.php:155 +msgid "Missing View '%s' for '%s' in '%s'" +msgstr "View '%s' para '%s' em '%s' não encontrada" + +#: \console\error.php:167 +msgid "Missing Layout '%s'" +msgstr "Layout '%s' não encontrado" + +#: \console\error.php:179 +msgid "Missing Database Connection. Try 'cake bake'" +msgstr "Conexão com o banco de dados não detectada. Tente 'cake bake'" + +#: \console\error.php:191 +msgid "Missing Helper file '%s' for '%s'" +msgstr "Arquivo de Helper '%s' para '%s' não encontrado" + +#: \console\error.php:203 +msgid "Missing Helper class '%s' in '%s'" +msgstr "Classe Helper '%s' em '%s' não encontrada" + +#: \console\error.php:215 +msgid "Missing Component file '%s' for '%s'" +msgstr "Arquivo de Component '%s' para '%s' não encontrado" + +#: \console\error.php:227 +msgid "Missing Component class '%s' in '%s'" +msgstr "Classe Component '%s' em '%s' não encontrada" + +#: \console\error.php:239 +msgid "Missing model '%s'" +msgstr "Model '%s' não encontrado" + +#: \console\libs\acl.php:75 +msgid "Error: Your current Cake configuration is set to" +msgstr "Erro: Sua configuração atual do Cake está setada para" + +#: \console\libs\acl.php:76 +msgid "an ACL implementation other than DB. Please change" +msgstr "uma implementação ACL diferente de DB. Por favor modifique" + +#: \console\libs\acl.php:77 +msgid "your core config to reflect your decision to use" +msgstr "sua configuração do core para refletir sua decisão de usar" + +#: \console\libs\acl.php:78 +msgid "DbAcl before attempting to use this script" +msgstr "DbAcl antes de tentar usar este script" + +#: \console\libs\acl.php:80 +msgid "Current ACL Classname: %s" +msgstr "Nome de classe ACL atual: %s" + +#: \console\libs\acl.php:88 +#: \console\libs\bake.php:89 +#: \console\libs\i18n.php:58 +msgid "Your database configuration was not found. Take a moment to create one." +msgstr "Sua configuração de banco de dados não foi encontrada. Tire alguns minutos para criar uma." + +#: \console\libs\acl.php:108 +msgid "Available ACL commands:" +msgstr "Comandos ACL disponíveis:" + +#: \console\libs\acl.php:120 +msgid "For help, run the 'help' command. For help on a specific command, run 'help '" +msgstr "Para ajuda, execute o comando 'help'. Para ajuda em um comando específico, execute 'help '" + +#: \console\libs\acl.php:147 +msgid "/ can not be used as an alias!" +msgstr "/ não pode ser usado como um alias!" + +#: \console\libs\acl.php:147 +#, fuzzy +msgid "\t/ is the root, please supply a sub alias" +msgstr "\\t/ é a raiz, por favor forneça um sub alias" + +#: \console\libs\acl.php:153 +msgid "New %s '%s' created.\n" +msgstr "Novo %s '%s' criado.\n" + +#: \console\libs\acl.php:155 +msgid "There was a problem creating a new %s '%s'." +msgstr "Houve um problema ao criar um novo %s '%s'." + +#: \console\libs\acl.php:173 +msgid "Node Not Deleted" +msgstr "Nó não excluído" + +#: \console\libs\acl.php:173 +msgid "There was an error deleting the %s. Check that the node exists" +msgstr "Houve um erro ao deletar o %s. Cheque se o nó existe" + +#: \console\libs\acl.php:175 +msgid "%s deleted" +msgstr "%s excluído" + +#: \console\libs\acl.php:198 +msgid "Error in setting new parent. Please make sure the parent node exists, and is not a descendant of the node specified." +msgstr "Erro ao definir novo pai. Por favor certifique-se que o nó pai existe, e não é um descendente do nó especificado." + +#: \console\libs\acl.php:200 +msgid "Node parent set to %s" +msgstr "Nó pai setado para %s" + +#: \console\libs\acl.php:220 +msgid "Supplied Node '%s' not found" +msgstr "Nó '%s' informado não encontrado" + +#: \console\libs\acl.php:221;344;346;513 +msgid "No tree returned." +msgstr "Nenhuma árvore retornada." + +#: \console\libs\acl.php:224 +msgid "Path:" +msgstr "Caminho:" + +#: \console\libs\acl.php:260 +msgid "%s is allowed." +msgstr "%s é permitido." + +#: \console\libs\acl.php:262 +msgid "%s is not allowed." +msgstr "%s não é permitido." + +#: \console\libs\acl.php:276 +msgid "Permission granted." +msgstr "Permissão concedida." + +#: \console\libs\acl.php:278 +msgid "Permission was not granted." +msgstr "Permissão não foi concedida." + +#: \console\libs\acl.php:292 +msgid "Permission denied." +msgstr "Permissão negada." + +#: \console\libs\acl.php:294 +msgid "Permission was not denied." +msgstr "Permissão não foi negada." + +#: \console\libs\acl.php:308 +msgid "Permission inherited." +msgstr "Permissão herdada." + +#: \console\libs\acl.php:310 +msgid "Permission was not inherited." +msgstr "Permissão não foi herdada." + +#: \console\libs\acl.php:344;346;513 +#: \console\libs\api.php:92 +#: \console\libs\testsuite.php:232 +#: \libs\folder.php:628 +msgid "%s not found" +msgstr "%s não encontrado" + +#: \console\libs\acl.php:393 +msgid "Usage: cake acl ..." +msgstr "Uso: cake acl ..." + +#: \console\libs\acl.php:395 +#: \console\libs\tasks\extract.php:203 +msgid "Commands:" +msgstr "Comandos:" + +#: \console\libs\acl.php:399 +#, fuzzy +msgid "Creates a new ACL object under the parent" +msgstr "Cria um novo objeto ACL sob o pai especificado por , um id/alias." + +#: \console\libs\acl.php:400 +#, fuzzy +msgid "specified by , an id/alias." +msgstr "Especifique um alias alternativo." + +#: \console\libs\acl.php:401 +#, fuzzy +msgid "The and references can be" +msgstr "As referências e podem ser em um dos seguintes formatos:" + +#: \console\libs\acl.php:402 +#, fuzzy +msgid "in one of the following formats:" +msgstr "Por favor confirme as seguintes associações:" + +#: \console\libs\acl.php:403 +#, fuzzy +msgid ". - The node will be bound to a" +msgstr ". - O nó vai ser vinculado a uma gravação específica do modelo dado" + +#: \console\libs\acl.php:404 +#, fuzzy +msgid "specific record of the given model." +msgstr ". - O nó vai ser vinculado a uma gravação específica do modelo dado" + +#: \console\libs\acl.php:405 +#, fuzzy +msgid " - The node will be given a string alias," +msgstr " - Será dado ao nó uma string de apelido - alias - (ou caminho, no caso de )," + +#: \console\libs\acl.php:406 +msgid " (or path, in the case of )" +msgstr " (ou caminho, no caso de )" + +#: \console\libs\acl.php:407 +#, fuzzy +msgid "i.e. 'John'. When used with ," +msgstr "por exemplo 'João'. Quando usado com , toma a forma de um caminho de apelidos," + +#: \console\libs\acl.php:408 +#, fuzzy +msgid "this takes the form of an alias path," +msgstr "por exemplo 'João'. Quando usado com , toma a forma de um caminho de apelidos," + +#: \console\libs\acl.php:409 +msgid "i.e. //." +msgstr "por exemplo //." + +#: \console\libs\acl.php:410 +msgid "To add a node at the root level," +msgstr "Para incluir um nó no nível raiz," + +#: \console\libs\acl.php:411 +#, fuzzy +msgid "enter 'root' or '/' as the parameter." +msgstr "Para adicionar um nó no nível raiz, digite 'root' ou '/' como parâmtro ." + +#: \console\libs\acl.php:414 +#, fuzzy +msgid "Deletes the ACL object with the given reference" +msgstr "Exclui o objeto ACL com a referência dada (veja 'create' para informação sobre referências de nós)." + +#: \console\libs\acl.php:415;421;428;433;440;447;453;460 +#, fuzzy +msgid "For more detailed parameter usage info," +msgstr "Para uma informação sobre uso de parâmetros mais detalhada, veja o help para o comando 'create'." + +#: \console\libs\acl.php:416;422;429;434;441;448;454;461 +#, fuzzy +msgid "see help for the 'create' command." +msgstr "Para uma informação sobre uso de parâmetros mais detalhada, veja o help para o comando 'create'." + +#: \console\libs\acl.php:419 +#, fuzzy +msgid "Moves the ACL object specified by beneath" +msgstr "Move o objeto ACL especificado por abaixo do objeto ACL pai especificado por ." + +#: \console\libs\acl.php:420 +#, fuzzy +msgid "the parent ACL object specified by ." +msgstr "Retorna o caminho para o objeto ACL especificado por . Este comando" + +#: \console\libs\acl.php:425 +msgid "Returns the path to the ACL object specified by . This command" +msgstr "Retorna o caminho para o objeto ACL especificado por . Este comando" + +#: \console\libs\acl.php:426 +msgid "is useful in determining the inhertiance of permissions for a certain" +msgstr "é útil para determinar a hernaça de permissões para um certo" + +#: \console\libs\acl.php:427 +msgid "object in the tree." +msgstr "objeto na árvore." + +#: \console\libs\acl.php:431;436;443;450 +msgid "or" +msgstr "ou" + +#: \console\libs\acl.php:432 +msgid "Use this command to check ACL permissions." +msgstr "Use este comando para checar permissões ACL." + +#: \console\libs\acl.php:437 +msgid "Use this command to grant ACL permissions. Once executed, the ARO" +msgstr "Use este comando para ceder permissões ACL. Uma vez executado, o ARO" + +#: \console\libs\acl.php:438 +msgid "specified (and its children, if any) will have ALLOW access to the" +msgstr "especificado (e seus filhos, se existir algum) terão permissão de acesso (ALLOW) para a" + +#: \console\libs\acl.php:439;446 +msgid "specified ACO action (and the ACO's children, if any)." +msgstr " ação ACO específicado (e as filhas de ACO, se existir alguma)." + +#: \console\libs\acl.php:444 +msgid "Use this command to deny ACL permissions. Once executed, the ARO" +msgstr "Use este comando para negar pemissões ACL. Uma vez executado, o ARO" + +#: \console\libs\acl.php:445 +msgid "specified (and its children, if any) will have DENY access to the" +msgstr "especificado (e seus filhos, se existir algum) terão acesso negado (DENY) para a" + +#: \console\libs\acl.php:451 +msgid "Use this command to force a child ARO object to inherit its" +msgstr "Use este comando para forçar um objeto ARO filho a herdar suas" + +#: \console\libs\acl.php:452 +msgid "permissions settings from its parent." +msgstr "configurações de permissões de seu pai." + +#: \console\libs\acl.php:457 +#, fuzzy +msgid "The view command will return the ARO or ACO tree." +msgstr "O comando view retornará a árvore ARO ou ACO. O parâmetro" + +#: \console\libs\acl.php:458 +msgid "The optional node parameter allows you to return" +msgstr "O parâmetro opcional do nó permite você retornar" + +#: \console\libs\acl.php:459 +#, fuzzy +msgid "only a portion of the requested tree." +msgstr "id/alias opcional permite que você retorne apenas uma porção da árvore requisitada." + +#: \console\libs\acl.php:464 +msgid "Uses this command : cake schema run create DbAcl" +msgstr "Usa este comando : cake schema run create DbAcl" + +#: \console\libs\acl.php:467 +msgid "Displays this help message, or a message on a specific command." +msgstr "Exibe esta mensagem de ajuda, ou uma mensagem sobre um comando específico." + +#: \console\libs\acl.php:478 +msgid "Command '%s' not found" +msgstr "Comando '%s' não encontrado" + +#: \console\libs\acl.php:492 +msgid "Missing/Unknown node type: '%s'" +msgstr "Tipo de nó desconhecido/não encontrado: '%s'" + +#: \console\libs\acl.php:492 +#, fuzzy +msgid "Please specify which ACL object type you wish to create. Either \"aro\" or \"aco\"" +msgstr "Por favor especifique qual tipo de objeto ACL você deseja criar." + +#: \console\libs\acl.php:549 +#, fuzzy +msgid "Could not find node using reference \"%s\"" +msgstr "Nó pai não encontrado utilizando a referência \"%s\"" + +#: \console\libs\api.php:101 +msgid "%s::%s() could not be found" +msgstr "%s::%s() não pôde ser encontrado" + +#: \console\libs\api.php:118 +msgid "Select a number to see the more information about a specific method. q to quit. l to list." +msgstr "Selecione um número para ver mais informações sobre um método específico. q para sair. l para listar." + +#: \console\libs\api.php:120 +msgid "Done" +msgstr "Feito" + +#: \console\libs\api.php:191 +msgid "%s could not be found" +msgstr "%s não pôde ser encontrado" + +#: \console\libs\bake.php:68 +#: \console\libs\tasks\plugin.php:91 +msgid "" +"%s directory could not be found.\n" +"Be sure you have created %s" +msgstr "" +"Diretório %s não pôde ser encontrado.\n" +"Certifique-se que você criou %s" + +#: \console\libs\bake.php:104 +msgid "What would you like to Bake?" +msgstr "O que você gostaria de assar?" + +#: \console\libs\bake.php:131 +#, fuzzy +msgid "You have made an invalid selection. Please choose a type of class to Bake by entering D, M, V, F, T, or C." +msgstr "Você fez uma seleção inválida. Por favor escolha um tipo de classe para pôr no forno digitando D, M, V, ou C." + +#: \console\libs\bake.php:178 +msgid "%s Model was baked." +msgstr "Model %s saiu do forno." + +#: \console\libs\bake.php:189 +msgid "%s Controller was baked." +msgstr "Controller %s saiu do forno." + +#: \console\libs\bake.php:197 +#, fuzzy +msgid "%s Views were baked." +msgstr "Model %s saiu do forno." + +#: \console\libs\bake.php:199 +msgid "Bake All complete" +msgstr "Bake All completado" + +#: \console\libs\bake.php:202 +msgid "Bake All could not continue without a valid model" +msgstr "Bake All não pôde continuar sem um Model válido" + +#: \console\libs\i18n.php:70 +msgid "I18n Shell" +msgstr "I18n Shell" + +#: \console\libs\i18n.php:72 +msgid "[E]xtract POT file from sources" +msgstr "[E]xtrair arquivos POT dos fontes" + +#: \console\libs\i18n.php:73 +msgid "[I]nitialize i18n database table" +msgstr "[I]nicializar tabela i18n do banco de dados" + +#: \console\libs\i18n.php:74 +msgid "[H]elp" +msgstr "[H]elp" + +#: \console\libs\i18n.php:75 +msgid "[Q]uit" +msgstr "[Q]uit" + +#: \console\libs\i18n.php:77 +msgid "What would you like to do?" +msgstr "O que você gostaria de fazer?" + +#: \console\libs\i18n.php:92 +msgid "You have made an invalid selection. Please choose a command to execute by entering E, I, H, or Q." +msgstr "Você fez uma seleção inválida. Por favor escolha um comando para executar digitando E, I, H, ou Q." + +#: \console\libs\i18n.php:115 +msgid "I18n Shell:" +msgstr "I18n Shell:" + +#: \console\libs\i18n.php:117 +msgid "I18n Shell initializes i18n database table for your application" +msgstr "I18n Shell inicializa a tabela i18n para sua aplicação" + +#: \console\libs\i18n.php:118 +msgid "and generates .pot file(s) with translations." +msgstr "e gera arquivo(s) .pot com traduções." + +#: \console\libs\i18n.php:120 +msgid "usage:" +msgstr "uso:" + +#: \console\libs\schema.php:119 +#, fuzzy +msgid "Schema file (%s) could not be found." +msgstr "Schema não encontrado" + +#: \console\libs\schema.php:131 +msgid "Generating Schema..." +msgstr "Gerando esquema..." + +#: \console\libs\schema.php:185;188 +msgid "Schema file: %s generated" +msgstr "Schema: %s gerado" + +#: \console\libs\schema.php:206 +msgid "Schema could not be loaded" +msgstr "Schema não pôde ser carregado" + +#: \console\libs\schema.php:231 +msgid "SQL dump file created in %s" +msgstr "Arquivo de SQL dump criado em %s" + +#: \console\libs\schema.php:234 +msgid "SQL dump could not be created" +msgstr "SQL dump não pôde ser criado" + +#: \console\libs\schema.php:278 +msgid "Performing a dry run." +msgstr "Executando dry run." + +#: \console\libs\schema.php:290 +msgid "%s could not be loaded" +msgstr "%s não pode ser carregado" + +#: \console\libs\schema.php:321;371 +msgid "Schema is up to date." +msgstr "Schema está atualizado." + +#: \console\libs\schema.php:325 +msgid "The following table(s) will be dropped." +msgstr "A(s) seguinte(s) tabela(s) será(ão) removida(s)." + +#: \console\libs\schema.php:328 +msgid "Are you sure you want to drop the table(s)?" +msgstr "Você tem certeza que quer remover a(s) tabela(s)?s" + +#: \console\libs\schema.php:329 +msgid "Dropping table(s)." +msgstr "Excluindo tabela(s)." + +#: \console\libs\schema.php:333 +msgid "The following table(s) will be created." +msgstr "A(s) seguinte(s) tabela(s) será(ão) criada(s)." + +#: \console\libs\schema.php:336 +msgid "Are you sure you want to create the table(s)?" +msgstr "Você tem certeza que quer criar a(s) tabela(s)?" + +#: \console\libs\schema.php:337 +#, fuzzy +msgid "Creating table(s)." +msgstr "Criando arquivo %s" + +#: \console\libs\schema.php:340 +msgid "End create." +msgstr "Fim da criação." + +#: \console\libs\schema.php:352 +#, fuzzy +msgid "Comparing Database to Schema..." +msgstr "Atualizando banco de dados..." + +#: \console\libs\schema.php:375 +msgid "The following statements will run." +msgstr "As seguintes declarações serão executadas." + +#: \console\libs\schema.php:377 +msgid "Are you sure you want to alter the tables?" +msgstr "Você tem certeza que deseja alterar as tabelas?" + +#: \console\libs\schema.php:379 +msgid "Updating Database..." +msgstr "Atualizando banco de dados..." + +#: \console\libs\schema.php:383 +msgid "End update." +msgstr "Fim da atualização." + +#: \console\libs\schema.php:393 +msgid "Sql could not be run" +msgstr "Sql não pôde ser executado" + +#: \console\libs\schema.php:401 +msgid "%s is up to date." +msgstr "%s está atualizado." + +#: \console\libs\schema.php:404 +msgid "Dry run for %s :" +msgstr "Dry run para %s :" + +#: \console\libs\schema.php:420 +msgid "%s updated." +msgstr "%s atualizado." + +#: \console\libs\shell.php:422 +#, fuzzy +msgid "Error: %s" +msgstr "Erro:" + +#: \console\libs\shell.php:462 +msgid "Creating file %s" +msgstr "Criando arquivo %s" + +#: \console\libs\shell.php:465 +#, fuzzy +msgid "File `%s` exists, overwrite?" +msgstr "Arquivo existe, sobrescrever?" + +#: \console\libs\shell.php:469 +msgid "Quitting." +msgstr "Saindo." + +#: \console\libs\shell.php:472 +#, fuzzy +msgid "Skip `%s`" +msgstr "Pular" + +#: \console\libs\shell.php:483 +#, fuzzy +msgid "Wrote `%s`" +msgstr "Escreveu" + +#: \console\libs\shell.php:486 +#, fuzzy +msgid "Could not write to `%s`." +msgstr "Erro! Não pôde escrever em" + +#: \console\libs\testsuite.php:152 +#, fuzzy +msgid "CakePHP Test Shell" +msgstr "CakePHP Trac" + +#: \console\libs\testsuite.php:156 +msgid "Sorry, you did not pass any arguments!" +msgstr "Desculpe, você não pasosu nenhum argumento!" + +#: \console\libs\testsuite.php:160 +msgid "Running %s %s %s" +msgstr "Executando %s %s %s" + +#: \console\libs\testsuite.php:169 +#, fuzzy +msgid "Sorry, the tests could not be found." +msgstr "%s não pôde ser encontrado." + +#: \console\libs\testsuite.php:223 +msgid "%s is an invalid test category (either \"app\", \"core\" or name of a plugin)" +msgstr "" + +#: \console\libs\testsuite.php:237 +msgid "%s is invalid. Should be case, group or all" +msgstr "" + +#: \console\libs\testsuite.php:247 +msgid "%s %s %s is an invalid test identifier" +msgstr "" + +#: \console\libs\testsuite.php:273 +msgid "You must install Xdebug to use the CakePHP(tm) Code Coverage Analyzation. Download it from http://www.xdebug.org/docs/install" +msgstr "Você deve instalar o Xdebug para usar o CakePHP(tm) Code Coverage Analyzation. Baixe em from http://www.xdebug.org/docs/install" + +#: \console\libs\testsuite.php:366 +msgid "Sorry, Simpletest could not be found. Download it from http://simpletest.org and install it to your vendors directory." +msgstr "Desculpe, Simpletest não pode ser encontrado. Baixe em http://simpletest.org e instale no diretório vendors." + +#: \console\libs\tasks\controller.php:83 +msgid "Baking basic crud methods for " +msgstr "Criando o CRUD dos métodos para " + +#: \console\libs\tasks\controller.php:88;96 +msgid "Adding %s methods" +msgstr "Incluindo %s métodos" + +#: \console\libs\tasks\controller.php:140 +msgid "" +"Bake Controller\n" +"Path: %s" +msgstr "" + +#: \console\libs\tasks\controller.php:149 +#, fuzzy +msgid "Baking %sController" +msgstr "Controller não encontrado" + +#: \console\libs\tasks\controller.php:161 +msgid "Would you like to build your controller interactively?" +msgstr "Você gostaria de construir seu controller interativamente?" + +#: \console\libs\tasks\controller.php:163 +msgid "Warning: Choosing no will overwrite the %sController." +msgstr "Aviso: Escolher não sobrescreverá o %sController." + +#: \console\libs\tasks\controller.php:170 +#, fuzzy +msgid "Would you like to use dynamic scaffolding?" +msgstr "Você gostaria de usar scaffolding?" + +#: \console\libs\tasks\controller.php:183 +#, fuzzy +msgid "Would you like to use Session flash messages?" +msgstr "Você gostaria de usar Sessions?" + +#: \console\libs\tasks\controller.php:200 +#: \console\libs\tasks\model.php:242 +#: \console\libs\tasks\plugin.php:134 +#: \console\libs\tasks\project.php:152 +#: \console\libs\tasks\view.php:339 +msgid "Look okay?" +msgstr "Tudo certo?" + +#: \console\libs\tasks\controller.php:224 +#, fuzzy +msgid "The following controller will be created:" +msgstr "O seguinte Model será criado:" + +#: \console\libs\tasks\controller.php:226 +#, fuzzy +msgid "" +"Controller Name:\n" +"\t%s" +msgstr "Dump do controller:" + +#: \console\libs\tasks\controller.php:233 +msgid "Helpers:" +msgstr "Helpers:" + +#: \console\libs\tasks\controller.php:234 +#, fuzzy +msgid "Components:" +msgstr "Comandos:" + +#: \console\libs\tasks\controller.php:261 +#, fuzzy +msgid "" +"Would you like to create some basic class methods \n" +"(index(), add(), view(), edit())?" +msgstr "Você gostaria de incluir alguns métodos básicos (index(), add(), view(), edit())?" + +#: \console\libs\tasks\controller.php:265 +msgid "Would you like to create the basic class methods for admin routing?" +msgstr "Você gostaria de criar métodos para admin routing?" + +#: \console\libs\tasks\controller.php:286 +#, fuzzy +msgid "You must have a model for this class to build basic methods. Please try again." +msgstr "Você deve ter um model para esta classe para construir métodos de scaffold. Por favor tente novamente." + +#: \console\libs\tasks\controller.php:352 +#, fuzzy +msgid "" +"Would you like this controller to use other helpers\n" +"besides HtmlHelper and FormHelper?" +msgstr "Você deseja que este controller use outros helpers além de HtmlHelper e FormHelper?" + +#: \console\libs\tasks\controller.php:353 +#, fuzzy +msgid "" +"Please provide a comma separated list of the other\n" +"helper names you'd like to use.\n" +"Example: 'Ajax, Javascript, Time'" +msgstr "" +"Por favor entre com uma lista separada por vírgulas de outros nomes de helpers que você gostaria de usar.\n" +"Exemplo: 'Ajax, Javascript, Time'" + +#: \console\libs\tasks\controller.php:364 +msgid "Would you like this controller to use any components?" +msgstr "Você deseja que este controller use algum componente?" + +#: \console\libs\tasks\controller.php:365 +msgid "" +"Please provide a comma separated list of the component names you'd like to use.\n" +"Example: 'Acl, Security, RequestHandler'" +msgstr "" +"Por favor entre com uma lista separada por vírgulas com os nomes dos componentes que você gostaria de usar.\n" +"Exemplo: 'Acl, Security, RequestHandler'" + +#: \console\libs\tasks\controller.php:402 +#, fuzzy +msgid "Possible Controllers based on your current database:" +msgstr "Possíveis Models baseado em seu atual banco de dados:" + +#: \console\libs\tasks\controller.php:426 +#, fuzzy +msgid "" +"Enter a number from the list above,\n" +"type in the name of another controller, or 'q' to exit" +msgstr "Entre com um número da lista acima, digite o nome de outro controller, ou 'q' para sair" + +#: \console\libs\tasks\controller.php:429 +#: \console\libs\tasks\model.php:857 +msgid "Exit" +msgstr "Sair" + +#: \console\libs\tasks\controller.php:434 +#, fuzzy +msgid "" +"The Controller name you supplied was empty,\n" +"or the number you selected was not an option. Please try again." +msgstr "" +"O nome de Controller que você forneceu estava vazio, ou o número \n" +"que você selecionou não era uma opção. Por favor tente novamente." + +#: \console\libs\tasks\db_config.php:364 +msgid "Use Database Config" +msgstr "Usar Database Config" + +#: \console\libs\tasks\extract.php:107 +msgid "" +"What is the full path you would like to extract?\n" +"Example: %s\n" +"[Q]uit [D]one" +msgstr "" +"Qual o caminho completo que você deseja extrair?\n" +"Exemplo: %s\n" +"[Q]Sair [D]Continuar" + +#: \console\libs\tasks\extract.php:111;133 +msgid "Extract Aborted" +msgstr "Extração Abortada" + +#: \console\libs\tasks\extract.php:120;139 +#, fuzzy +msgid "The directory path you supplied was not found. Please try again." +msgstr "O caminho de diretório que você forneceu estava vazio. Por favor tente novamente." + +#: \console\libs\tasks\extract.php:129 +#, fuzzy +msgid "" +"What is the full path you would like to output?\n" +"Example: %s\n" +"[Q]uit" +msgstr "" +"Qual o caminho para o layout de diretório que você deseja copiar?\n" +"Exemplo: %s" + +#: \console\libs\tasks\extract.php:149 +msgid "Would you like to merge all domains strings into the default.pot file?" +msgstr "Você gostaria de misturar todos as string de domínios no arquivo default.pot?" + +#: \console\libs\tasks\extract.php:168 +msgid "Extracting..." +msgstr "Extraindo..." + +#: \console\libs\tasks\extract.php:170 +msgid "Paths:" +msgstr "Caminhos:" + +#: \console\libs\tasks\extract.php:174 +msgid "Output Directory: " +msgstr "" + +#: \console\libs\tasks\extract.php:186 +#, fuzzy +msgid "CakePHP Language String Extraction:" +msgstr "Documentação CakePHP" + +#: \console\libs\tasks\extract.php:188 +#, fuzzy +msgid "The Extract script generates .pot file(s) with translations" +msgstr "e gera arquivo(s) .pot com traduções." + +#: \console\libs\tasks\extract.php:189 +msgid "By default the .pot file(s) will be place in the locale directory of -app" +msgstr "" + +#: \console\libs\tasks\extract.php:190 +msgid "By default -app is ROOT/app" +msgstr "" + +#: \console\libs\tasks\extract.php:192 +#, fuzzy +msgid "Usage: cake i18n extract ..." +msgstr "Uso: cake acl ..." + +#: \console\libs\tasks\extract.php:194 +msgid "Params:" +msgstr "Parâmetros:" + +#: \console\libs\tasks\extract.php:195 +msgid " -app [path...]: directory where your application is located" +msgstr "" + +#: \console\libs\tasks\extract.php:196 +msgid " -root [path...]: path to install" +msgstr "" + +#: \console\libs\tasks\extract.php:197 +msgid " -core [path...]: path to cake directory" +msgstr "" + +#: \console\libs\tasks\extract.php:198 +msgid " -paths [comma separated list of paths, full path is needed]" +msgstr "" + +#: \console\libs\tasks\extract.php:199 +msgid " -merge [yes|no]: Merge all domains strings into the default.pot file" +msgstr "" + +#: \console\libs\tasks\extract.php:200 +msgid " -output [path...]: Full path to output directory" +msgstr "" + +#: \console\libs\tasks\extract.php:201 +msgid " -files: [comma separated list of files, full path to file is needed]" +msgstr "" + +#: \console\libs\tasks\extract.php:204 +msgid " cake i18n extract help: Shows this help message." +msgstr "" + +#: \console\libs\tasks\extract.php:217 +msgid "Processing %s..." +msgstr "Processando %s..." + +#: \console\libs\tasks\extract.php:250 +#, fuzzy +msgid "Done." +msgstr "Feito" + +#: \console\libs\tasks\extract.php:384 +msgid "Error: %s already exists in this location. Overwrite?" +msgstr "" + +#: \console\libs\tasks\extract.php:388 +#, fuzzy +msgid "" +"What would you like to name this file?\n" +"Example: %s" +msgstr "O que você gostaria de assar?" + +#: \console\libs\tasks\extract.php:454 +msgid "" +"Invalid marker content in %s:%s\n" +"* %s(" +msgstr "" + +#: \console\libs\tasks\fixture.php:149 +msgid "Would you like to import schema for this fixture?" +msgstr "Você gostaria de importar o schema para esta fixture?" + +#: \console\libs\tasks\fixture.php:153 +#, fuzzy +msgid "Would you like to use record importing for this fixture?" +msgstr "Você gostaria de usar scaffolding?" + +#: \console\libs\tasks\fixture.php:158 +msgid "Would you like to build this fixture with data from %s's table?" +msgstr "" + +#: \console\libs\tasks\fixture.php:374 +msgid "" +"Please provide a SQL fragment to use as conditions\n" +"Example: WHERE 1=1 LIMIT 10" +msgstr "" + +#: \console\libs\tasks\model.php:116 +msgid "Baking %s" +msgstr "Cozinhando %s" + +#: \console\libs\tasks\model.php:155 +msgid "Make a selection from the choices above" +msgstr "Faça a seleção das opções abaixo" + +#: \console\libs\tasks\model.php:194 +msgid "Table %s does not exist, cannot bake a model without a table." +msgstr "A tabela %s não existe. Não é possível cozinhar um model sem a tabela." + +#: \console\libs\tasks\model.php:203 +#, fuzzy +msgid "" +"Would you like to supply validation criteria \n" +"for the fields in your model?" +msgstr "Você deseja fornecer critérios de validação para os campos de seu model?" + +#: \console\libs\tasks\model.php:209 +#, fuzzy +msgid "" +"Would you like to define model associations\n" +"(hasMany, hasOne, belongsTo, etc.)?" +msgstr "Você gostaria de definir model associations (hasMany, hasOne, belongsTo, etc.)?" + +#: \console\libs\tasks\model.php:217 +msgid "The following Model will be created:" +msgstr "O seguinte Model será criado:" + +#: \console\libs\tasks\model.php:222 +msgid "DB Config: %s" +msgstr "Configuração do DB: %s" + +#: \console\libs\tasks\model.php:225 +msgid "DB Table: %s" +msgstr "Tabela: %s" + +#: \console\libs\tasks\model.php:228 +msgid "Primary Key: %s" +msgstr "Chave primária: %s" + +#: \console\libs\tasks\model.php:231 +msgid "Validation: %s" +msgstr "Validação: %s" + +#: \console\libs\tasks\model.php:234 +#, fuzzy +msgid "Associations:" +msgstr "Ações" + +#: \console\libs\tasks\model.php:289 +msgid "What is the primaryKey?" +msgstr "Qual é a primaryKey?" + +#: \console\libs\tasks\model.php:300 +msgid "" +"A displayField could not be automatically detected\n" +"would you like to choose one?" +msgstr "" + +#: \console\libs\tasks\model.php:305 +msgid "Choose a field from the options above:" +msgstr "" + +#: \console\libs\tasks\model.php:376 +#, fuzzy +msgid "Field: %s" +msgstr "Relacionado %s" + +#: \console\libs\tasks\model.php:377 +msgid "Type: %s" +msgstr "Tipo: %s" + +#: \console\libs\tasks\model.php:379 +#, fuzzy +msgid "Please select one of the following validation options:" +msgstr "Por favor confirme as seguintes associações:" + +#: \console\libs\tasks\model.php:387 +msgid "%s - Do not do any validation on this field.\n" +msgstr "" + +#: \console\libs\tasks\model.php:388 +msgid "... or enter in a valid regex validation string.\n" +msgstr "" + +#: \console\libs\tasks\model.php:411 +msgid "" +"You have already chosen that validation rule,\n" +"please choose again" +msgstr "" + +#: \console\libs\tasks\model.php:427 +msgid "Would you like to add another validation rule?" +msgstr "Você gostaria de incluir uma nova regra de validação?" + +#: \console\libs\tasks\model.php:447 +msgid "One moment while the associations are detected." +msgstr "Um momento enquanto as associações são detectadas." + +#: \console\libs\tasks\model.php:471 +msgid "None found." +msgstr "Nenhuma encontrada." + +#: \console\libs\tasks\model.php:473 +msgid "Please confirm the following associations:" +msgstr "Por favor confirme as seguintes associações:" + +#: \console\libs\tasks\model.php:630 +msgid "Would you like to define some additional model associations?" +msgstr "Você deseja definir alguma associação adicional?" + +#: \console\libs\tasks\model.php:635 +msgid "What is the association type?" +msgstr "Qual é o tipo de associação?" + +#: \console\libs\tasks\model.php:636 +msgid "Enter a number" +msgstr "Digite um número" + +#: \console\libs\tasks\model.php:638 +#, fuzzy +msgid "" +"For the following options be very careful to match your setup exactly.\n" +"Any spelling mistakes will cause errors." +msgstr "Para as seguintes opções seja muito cuidadoso para igualar exatamente suas configurações. Qualquer erro de digitação causará erros." + +#: \console\libs\tasks\model.php:641 +msgid "What is the alias for this association?" +msgstr "Qual é o alias para essa associação?" + +#: \console\libs\tasks\model.php:642 +msgid "What className will %s use?" +msgstr "Qual className %s usará?" + +#: \console\libs\tasks\model.php:657 +msgid "What is the table for this model?" +msgstr "Qual é a tabela para este model?" + +#: \console\libs\tasks\model.php:663 +msgid "A helpful List of possible keys" +msgstr "Uma lista útil das possíveis keys" + +#: \console\libs\tasks\model.php:664 +msgid "What is the foreignKey?" +msgstr "Qual é a foreignKey?" + +#: \console\libs\tasks\model.php:668 +msgid "What is the foreignKey? Specify your own." +msgstr "Qual é a foreignKey? Especifique sua própria." + +#: \console\libs\tasks\model.php:671 +msgid "What is the associationForeignKey?" +msgstr "Qual é a associationForeignKey?" + +#: \console\libs\tasks\model.php:672 +msgid "What is the joinTable?" +msgstr "Qual e a joinTable?" + +#: \console\libs\tasks\model.php:684 +msgid "Define another association?" +msgstr "Definir outra associação?" + +#: \console\libs\tasks\model.php:769 +msgid "Possible Models based on your current database:" +msgstr "Possíveis Models baseado em seu atual banco de dados:" + +#: \console\libs\tasks\model.php:800 +#, fuzzy +msgid "" +"Given your model named '%s',\n" +"Cake would expect a database table named '%s'" +msgstr "Dado seu model chamado '%s', o Cake espera uma tabela chamada %s" + +#: \console\libs\tasks\model.php:801 +msgid "Do you want to use this table?" +msgstr "Você quer usar essa tabela?" + +#: \console\libs\tasks\model.php:804 +#, fuzzy +msgid "What is the name of the table?" +msgstr "Qual é a tabela para este model?" + +#: \console\libs\tasks\model.php:836 +msgid "Your database does not have any tables." +msgstr "Seu banco de dados não tem nenhuma tabela." + +#: \console\libs\tasks\model.php:854 +#, fuzzy +msgid "" +"Enter a number from the list above,\n" +"type in the name of another model, or 'q' to exit" +msgstr "Entre com um número da lista acima, digite o nome de outro model, ou 'q' para sair" + +#: \console\libs\tasks\model.php:862 +#, fuzzy +msgid "" +"The model name you supplied was empty,\n" +"or the number you selected was not an option. Please try again." +msgstr "O nome de model que você forneceu estava vazio, ou o número que você selecionou não era uma opção. Por favor tente novamente." + +#: \console\libs\tasks\plugin.php:71 +msgid "Plugin: %s" +msgstr "Plugin: %s" + +#: \console\libs\tasks\plugin.php:72 +#: \console\libs\tasks\test.php:107 +msgid "Path: %s" +msgstr "Caminho: %s" + +#: \console\libs\tasks\plugin.php:74 +#, fuzzy +msgid "%s in path %s not found." +msgstr "%s não encontrado" + +#: \console\libs\tasks\plugin.php:107 +msgid "Enter the name of the plugin in CamelCase format" +msgstr "Digite o nome do plugin no formato CamelCase" + +#: \console\libs\tasks\plugin.php:111 +msgid "An error occured trying to bake: %s in %s" +msgstr "Ocorreu um erro tentando assar: %s em %s" + +#: \console\libs\tasks\plugin.php:130 +msgid "Plugin Name: %s" +msgstr "Nome do plugin: %s" + +#: \console\libs\tasks\plugin.php:131 +msgid "Plugin Directory: %s" +msgstr "Diretório do plugin: %s" + +#: \console\libs\tasks\plugin.php:137 +#: \console\libs\tasks\project.php:155 +msgid "Do you want verbose output?" +msgstr "Você quer saída verbose?" + +#: \console\libs\tasks\plugin.php:193 +#: \console\libs\tasks\project.php:163 +msgid "Created: %s in %s" +msgstr "Criado: %s em %s" + +#: \console\libs\tasks\plugin.php:212 +msgid "Choose a plugin path from the paths above." +msgstr "" + +#: \console\libs\tasks\project.php:63 +msgid "" +"What is the full path for this app including the app directory name?\n" +" Example:" +msgstr "" + +#: \console\libs\tasks\project.php:71 +msgid "A project already exists in this location: %s Overwrite?" +msgstr "" + +#: \console\libs\tasks\project.php:82 +msgid "Welcome page created" +msgstr "Página de boas-vindas criada" + +#: \console\libs\tasks\project.php:84 +msgid "The Welcome page was NOT created" +msgstr "A página de boas-vindas não foi criada" + +#: \console\libs\tasks\project.php:88 +msgid "Random hash key created for 'Security.salt'" +msgstr "Hash key randômica criada para 'Security.salt'" + +#: \console\libs\tasks\project.php:90 +msgid "Unable to generate random hash for 'Security.salt', you should change it in %s" +msgstr "Incapaz de gerar hash randômica para 'Security.salt', você deveria alterá-la em %s" + +#: \console\libs\tasks\project.php:94 +#, fuzzy +msgid "Random seed created for 'Security.cipherSeed'" +msgstr "Hash key randômica criada para 'Security.salt'" + +#: \console\libs\tasks\project.php:96 +#, fuzzy +msgid "Unable to generate random seed for 'Security.cipherSeed', you should change it in %s" +msgstr "Incapaz de gerar hash randômica para 'Security.salt', você deveria alterá-la em %s" + +#: \console\libs\tasks\project.php:101 +msgid "CAKE_CORE_INCLUDE_PATH set to %s in webroot/index.php" +msgstr "CAKE_CORE_INCLUDE_PATH setado para %s em webroot/index.php" + +#: \console\libs\tasks\project.php:102 +msgid "CAKE_CORE_INCLUDE_PATH set to %s in webroot/test.php" +msgstr "CAKE_CORE_INCLUDE_PATH setado para %s em webroot/test.php" + +#: \console\libs\tasks\project.php:103 +msgid "Remember to check these value after moving to production server" +msgstr "Lembre-se de checar esses valores após alterar o server para produção" + +#: \console\libs\tasks\project.php:105 +msgid "Unable to set CAKE_CORE_INCLUDE_PATH, you should change it in %s" +msgstr "Falha ao setar CAKE_CORE_INCLUDE_PATH, você deveria modificá-lo em %s" + +#: \console\libs\tasks\project.php:109 +msgid "Could not set permissions on %s" +msgstr "Impossível setar permissões em %s" + +#: \console\libs\tasks\project.php:110 +msgid "chmod -R 0777 %s" +msgstr "chmod -R 0777 %s" + +#: \console\libs\tasks\project.php:135 +msgid "" +"What is the path to the directory layout you wish to copy?\n" +"Example: %s" +msgstr "" +"Qual o caminho para o layout de diretório que você deseja copiar?\n" +"Exemplo: %s" + +#: \console\libs\tasks\project.php:137 +msgid "The directory path you supplied was empty. Please try again." +msgstr "O caminho de diretório que você forneceu estava vazio. Por favor tente novamente." + +#: \console\libs\tasks\project.php:140 +msgid "Directory path does not exist please choose another:" +msgstr "Diretório não existente, por favor selecione outro:" + +#: \console\libs\tasks\project.php:147 +msgid "Bake Project" +msgstr "Projeto Bake" + +#: \console\libs\tasks\project.php:148 +msgid "Skel Directory: " +msgstr "Diretório Skel:" + +#: \console\libs\tasks\project.php:149 +#, fuzzy +msgid "Will be copied to: " +msgstr "%s copiado para %s" + +#: \console\libs\tasks\project.php:166 +#, fuzzy +msgid " '%s' could not be created properly" +msgstr "SQL dump não pôde ser criado" + +#: \console\libs\tasks\project.php:178 +#: \console\libs\tasks\view.php:344 +#, fuzzy +msgid "Bake Aborted." +msgstr "Bake All completado" + +#: \console\libs\tasks\project.php:319 +msgid "You have more than one routing prefix configured" +msgstr "" + +#: \console\libs\tasks\project.php:331 +msgid "Please choose a prefix to bake with." +msgstr "" + +#: \console\libs\tasks\project.php:337 +#, fuzzy +msgid "What would you like the prefix route to be?" +msgstr "O que você gostaria de fazer?" + +#: \console\libs\tasks\project.php:338 +msgid "Example: www.example.com/admin/controller" +msgstr "" + +#: \console\libs\tasks\project.php:340 +msgid "Enter a routing prefix:" +msgstr "" + +#: \console\libs\tasks\project.php:343 +msgid "Unable to write to /app/config/core.php." +msgstr "" + +#: \console\libs\tasks\template.php:170 +msgid "You have more than one set of templates installed." +msgstr "" + +#: \console\libs\tasks\template.php:171 +msgid "Please choose the template set you wish to use:" +msgstr "" + +#: \console\libs\tasks\template.php:181 +#, fuzzy +msgid "Which bake theme would you like to use?" +msgstr "O que você gostaria de assar?" + +#: \console\libs\tasks\template.php:208 +#, fuzzy +msgid "Could not find template for %s" +msgstr "Não pude encontrar %s." + +#: \console\libs\tasks\test.php:106 +msgid "Bake Tests" +msgstr "" + +#: \console\libs\tasks\test.php:133 +msgid "Bake is detecting possible fixtures.." +msgstr "" + +#: \console\libs\tasks\test.php:174 +msgid "Select an object type:" +msgstr "" + +#: \console\libs\tasks\test.php:183 +#, fuzzy +msgid "Enter the type of object to bake a test for or (q)uit" +msgstr "Digite o nome para testar ou 'q' para sair" + +#: \console\libs\tasks\test.php:199 +msgid "Choose a %s class" +msgstr "" + +#: \console\libs\tasks\test.php:205 +msgid "Choose an existing class, or enter the name of a class that does not exist" +msgstr "" + +#: \console\libs\tasks\test.php:383 +msgid "Bake could not detect fixtures, would you like to add some?" +msgstr "" + +#: \console\libs\tasks\test.php:386 +#, fuzzy +msgid "" +"Please provide a comma separated list of the fixtures names you'd like to use.\n" +"Example: 'app.comment, app.post, plugin.forums.post'" +msgstr "" +"Por favor entre com uma lista separada por vírgulas de outros nomes de helpers que você gostaria de usar.\n" +"Exemplo: 'Ajax, Javascript, Time'" + +#: \console\libs\tasks\view.php:215 +msgid "" +"Would you like bake to build your views interactively?\n" +"Warning: Choosing no will overwrite %s views if it exist." +msgstr "" + +#: \console\libs\tasks\view.php:222 +msgid "" +"Would you like to create some CRUD views\n" +"(index, add, view, edit) for this controller?\n" +"NOTE: Before doing so, you'll need to create your controller\n" +"and model classes (including associated models)." +msgstr "" + +#: \console\libs\tasks\view.php:225 +#, fuzzy +msgid "Would you like to create the views for admin routing?" +msgstr "Você gostaria de criar métodos para admin routing?" + +#: \console\libs\tasks\view.php:244 +msgid "View Scaffolding Complete.\n" +msgstr "" + +#: \console\libs\tasks\view.php:262 +msgid "Controller not found" +msgstr "Controller não encontrado" + +#: \console\libs\tasks\view.php:272 +msgid "" +"The file '%s' could not be found.\n" +"In order to bake a view, you'll need to first create the controller." +msgstr "" +"O arquivo '%s' não pôde ser encontrado.\n" +"Para assar um view, você precisa primeiro criar o controller." + +#: \console\libs\tasks\view.php:326 +msgid "Action Name? (use lowercase_underscored function name)" +msgstr "" + +#: \console\libs\tasks\view.php:328 +#, fuzzy +msgid "The action name you supplied was empty. Please try again." +msgstr "O caminho de diretório que você forneceu estava vazio. Por favor tente novamente." + +#: \console\libs\tasks\view.php:333 +#, fuzzy +msgid "The following view will be created:" +msgstr "O seguinte Model será criado:" + +#: \console\libs\tasks\view.php:335 +#, fuzzy +msgid "Controller Name: %s" +msgstr "Dump do controller:" + +#: \console\libs\tasks\view.php:336 +msgid "Action Name: %s" +msgstr "" + +#: \console\libs\tasks\view.php:337 +msgid "Path: %s" +msgstr "Caminho: %s" + +#: \console\templates\skel\views\layouts\default.ctp:25 +#: \libs\view\layouts\default.ctp:25 +#: \tests\test_app\views\layouts\default.ctp:25 +msgid "CakePHP: the rapid development php framework:" +msgstr "CakePHP: o framework php de desenvolvimento rápido:" + +#: \console\templates\skel\views\layouts\default.ctp:39;50 +#: \libs\view\layouts\default.ctp:39;50 +#: \tests\test_app\views\layouts\default.ctp:37;48 +msgid "CakePHP: the rapid development php framework" +msgstr "CakePHP: o framework php de desenvolvimento rápido" + +#: \console\templates\skel\webroot\test.php:88 +msgid "Debug setting does not allow access to this url." +msgstr "A configuração de debug não permite acesso a essa URL." + +#: \libs\cache.php:595 +msgid "Method write() not implemented in %s" +msgstr "Método write() não implementado em %s" + +#: \libs\cache.php:606 +msgid "Method read() not implemented in %s" +msgstr "Método read() não implementado em %s" + +#: \libs\cache.php:618 +#, fuzzy +msgid "Method increment() not implemented in %s" +msgstr "Método read() não implementado em %s" + +#: \libs\cache.php:629 +#, fuzzy +msgid "Method decrement() not implemented in %s" +msgstr "Método read() não implementado em %s" + +#: \libs\cake_log.php:101 +#, fuzzy +msgid "Missing logger classname" +msgstr "Classe Helper não encontrada" + +#: \libs\cake_log.php:133 +msgid "Could not load logger class %s" +msgstr "" + +#: \libs\cake_log.php:138 +msgid "logger class %s does not implement a write method." +msgstr "" + +#: \libs\cake_session.php:253 +msgid "Deleting session key {%s}" +msgstr "Excluindo chave da sessão {%s}" + +#: \libs\cake_session.php:258 +msgid "%s doesn't exist" +msgstr "%s não existe" + +#: \libs\cake_session.php:417 +msgid "Writing session key {%s}: %s" +msgstr "Escrevendo chave da sessão {%s}: %s" + +#: \libs\cake_session.php:487 +msgid "You must set the all Configure::write('Session.*') in core.php to use database storage" +msgstr "Você deve setar todos os Configure::write('Session.*') no core.php para usar armazenamento no banco de dados" + +#: \libs\cake_socket.php:237 +#: \tests\cases\libs\cake_socket.test.php:153 +msgid "Connection timed out" +msgstr "" + +#: \libs\class_registry.php:153 +msgid "(ClassRegistry::init() could not create instance of %1$s class %2$s " +msgstr "(ClassRegistry::init() não pôde criar instância de %1$s class %2$s " + +#: \libs\class_registry.php:163 +msgid "(ClassRegistry::init() Attempted to create instance of a class with a numeric name" +msgstr "(ClassRegistry::init() Tentativa de instanciar uma classe com nome numérico" + +#: \libs\configure.php:264 +msgid "Configure::load() - no variable $config found in %s.php" +msgstr "Configure::load() - variável $config não encontrada em %s.php" + +#: \libs\configure.php:393 +msgid "Can't find application core file. Please create %score.php, and make sure it is readable by PHP." +msgstr "Arquivo core da aplicação não encontrado. Por favor crie %score.php, e certifique-se que ele pode ser lido pelo PHP." + +#: \libs\configure.php:400 +#, fuzzy +msgid "Cache not configured properly. Please check Cache::config(); in APP/config/core.php" +msgstr "Seu cache NÃO está funcionando. Por favor verifique as configurações em APP/config/core.php" + +#: \libs\configure.php:434 +msgid "Can't find application bootstrap file. Please create %sbootstrap.php, and make sure it is readable by PHP." +msgstr "Arquivo bootstrap da aplicação não encontrado. Por favor crie %sbootstrap.php, e certifique-se que ele pode ser lido pelo PHP." + +#: \libs\debugger.php:674 +msgid "Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application" +msgstr "Por favor modifique o valor do 'Security.salt' em app/config/core.php para um valor específico para sua aplicação" + +#: \libs\debugger.php:678 +#, fuzzy +msgid "Please change the value of 'Security.cipherSeed' in app/config/core.php to a numeric (digits only) seed value specific to your application" +msgstr "Por favor modifique o valor do 'Security.salt' em app/config/core.php para um valor específico para sua aplicação" + +#: \libs\error.php:161 +msgid "Not Found" +msgstr "Não encontrado" + +#: \libs\error.php:184 +msgid "An Internal Error Has Occurred" +msgstr "" + +#: \libs\error.php:203 +#: \libs\view\errors\missing_controller.ctp:20 +msgid "Missing Controller" +msgstr "Controller não encontrado" + +#: \libs\error.php:222 +msgid "Missing Method in Controller" +msgstr "Método não encontrado no Controller" + +#: \libs\error.php:239 +msgid "Trying to access private method in class" +msgstr "Tentativa de acessar método privado na classe" + +#: \libs\error.php:258 +#: \libs\view\errors\missing_table.ctp:20 +msgid "Missing Database Table" +msgstr "Tabela não encontrada no banco de dados" + +#: \libs\error.php:273 +msgid "Scaffold Missing Database Connection" +msgstr "Scaffold não tem conexão com o banco de dados" + +#: \libs\error.php:291 +#: \libs\view\errors\missing_view.ctp:20 +msgid "Missing View" +msgstr "View não encontrada" + +#: \libs\error.php:308 +#: \libs\view\errors\missing_layout.ctp:20 +msgid "Missing Layout" +msgstr "Layout não encontrado" + +#: \libs\error.php:326 +#: \libs\view\errors\missing_connection.ctp:20 +#: \libs\view\errors\missing_scaffolddb.ctp:20 +msgid "Missing Database Connection" +msgstr "Não há conexão com o banco de dados" + +#: \libs\error.php:343 +#: \libs\view\errors\missing_helper_file.ctp:20 +msgid "Missing Helper File" +msgstr "Arquivo de Helper não encontrado" + +#: \libs\error.php:360 +#: \libs\view\errors\missing_helper_class.ctp:20 +msgid "Missing Helper Class" +msgstr "Classe Helper não encontrada" + +#: \libs\error.php:377 +#: \libs\view\errors\missing_behavior_file.ctp:20 +#, fuzzy +msgid "Missing Behavior File" +msgstr "Arquivo de Helper não encontrado" + +#: \libs\error.php:394 +#: \libs\view\errors\missing_behavior_class.ctp:20 +#, fuzzy +msgid "Missing Behavior Class" +msgstr "Classe Helper não encontrada" + +#: \libs\error.php:412 +#: \libs\view\errors\missing_component_file.ctp:20 +msgid "Missing Component File" +msgstr "Arquivo de Component não encontrado" + +#: \libs\error.php:430 +#: \libs\view\errors\missing_component_class.ctp:20 +msgid "Missing Component Class" +msgstr "Classe de component não encontrada" + +#: \libs\error.php:446 +#: \libs\view\errors\missing_model.ctp:20 +msgid "Missing Model" +msgstr "Model não encontrado" + +#: \libs\folder.php:379;400 +msgid "%s changed to %s" +msgstr "%s mudou para %s" + +#: \libs\folder.php:383;402 +msgid "%s NOT changed to %s" +msgstr "%s NÃO mudou para %s" + +#: \libs\folder.php:489 +msgid "%s is a file" +msgstr "%s é um arquivo" + +#: \libs\folder.php:499;664 +msgid "%s created" +msgstr "%s criado" + +#: \libs\folder.php:503 +msgid "%s NOT created" +msgstr "%s NÃO criado" + +#: \libs\folder.php:578;592 +msgid "%s removed" +msgstr "%s removido" + +#: \libs\folder.php:580;589 +msgid "%s NOT removed" +msgstr "%s NÃO removido" + +#: \libs\folder.php:637 +msgid "%s not writable" +msgstr "%s sem permissão de escrita" + +#: \libs\folder.php:651 +msgid "%s copied to %s" +msgstr "%s copiado para %s" + +#: \libs\folder.php:653 +msgid "%s NOT copied to %s" +msgstr "%s NÃO copiado para %s" + +#: \libs\folder.php:668 +msgid "%s not created" +msgstr "%s não criado" + +#: \libs\http_socket.php:517 +#, fuzzy +msgid "HttpSocket::_decodeBody - Unknown encoding: %s. Activate quirks mode to surpress error." +msgstr "" +"HttpSocket::decodeBody - Unknown encoding: %s. Activate quirks mode to surpress error.\n" +"HttpSocket::decodeBody - Encoding desconhecido." + +#: \libs\http_socket.php:543 +#, fuzzy +msgid "HttpSocket::_decodeChunkedBody - Could not parse malformed chunk. Activate quirks mode to do this." +msgstr "HttpSocket::decodeChunkedBody - Could not parse malformed chunk. Activate quirks mode to do this." + +#: \libs\http_socket.php:806 +#, fuzzy +msgid "HttpSocket::_buildRequestLine - Passed an invalid request line string. Activate quirks mode to do this." +msgstr "HttpSocket::buildRequestLine - Passed an invalid request line string. Activate quirks mode to do this." + +#: \libs\http_socket.php:821 +#, fuzzy +msgid "HttpSocket::_buildRequestLine - The \"*\" asterisk character is only allowed for the following methods: %s. Activate quirks mode to work outside of HTTP/1.1 specs." +msgstr "" +"HttpSocket::buildRequestLine - The \"*\" asterisk character is only allowed for the following methods: %s. Activate quirks mode to work outside of HTTP/1.1 specs.\n" +"O caractere \"*\" asterisco só aceito pelos métodos acima. Ative o quirks mode para trabalhar fora das especificações HTTP/1.1" + +#: \libs\overloadable_php4.php:73;133 +#: \libs\overloadable_php5.php:48;80 +msgid "Magic method handler call__ not defined in %s" +msgstr "Magic method handler call__ not defined in %s" + +#: \libs\router.php:281 +msgid "Route classes must extend CakeRoute" +msgstr "" + +#: \libs\security.php:173 +msgid "You cannot use an empty key for Security::cipher()" +msgstr "Você não pode usar uma chave vazia para Security::cipher()" + +#: \libs\set.php:816 +msgid "Set::isEqual() is deprecated. Please use standard comparison operators instead." +msgstr "" + +#: \libs\validation.php:342 +msgid "You must define the $operator parameter for Validation::comparison()" +msgstr "Você deve definir o parâmetro $operator para Validation::comparison()" + +#: \libs\validation.php:366 +msgid "You must define a regular expression for Validation::custom()" +msgstr "Você deve definir uma expressão regular para Validation::custom()" + +#: \libs\validation.php:927 +msgid "Could not find %s class, unable to complete validation." +msgstr "" + +#: \libs\validation.php:931 +msgid "Method %s does not exist on %s unable to complete validation." +msgstr "" + +#: \libs\xml.php:405 +msgid "Cannot append a node to itself." +msgstr "" + +#: \libs\xml.php:912 +msgid "XML cannot be read" +msgstr "XML não pode ser lido" + +#: \libs\cache\file.php:271 +msgid "%s is not writable" +msgstr "%s não tem permissão de escrita" + +#: \libs\cache\memcache.php:139 +#, fuzzy +msgid "Method increment() not implemented for compressed cache in %s" +msgstr "Método read() não implementado em %s" + +#: \libs\cache\memcache.php:155 +#, fuzzy +msgid "Method decrement() not implemented for compressed cache in %s" +msgstr "Método read() não implementado em %s" + +#: \libs\controller\controller.php:370 +msgid "Controller::__construct() : Can not get or parse my own class name, exiting." +msgstr "Controller::__construct() : Não pude ler ou validar meu próprio nome de classe, saindo." + +#: \libs\controller\controller.php:772 +#: \libs\controller\components\auth.php:546 +msgid "%s::isAuthorized() is not defined." +msgstr "%s::isAuthorized() não está definido." + +#: \libs\controller\controller.php:1066 +msgid "Controller::paginate() - can't find model %1$s in controller %2$sController" +msgstr "Controller::paginate() - não pude achar o model %1$s no controller %2$sController" + +#: \libs\controller\scaffold.php:180 +msgid "Scaffold :: " +msgstr "Scaffold :: " + +#: \libs\controller\scaffold.php:226 +msgid "No id set for %s::view()" +msgstr "Nenhuma id definido para %s::view()" + +#: \libs\controller\scaffold.php:293 +msgid "updated" +msgstr "atualizado" + +#: \libs\controller\scaffold.php:296 +msgid "saved" +msgstr "salvo" + +#: \libs\controller\scaffold.php:306 +msgid "Invalid id for %s::edit()" +msgstr "Id inválido para %s::edit()" + +#: \libs\controller\scaffold.php:324 +msgid "The %1$s has been %2$s" +msgstr "O %1$s foi %2$s" + +#: \libs\controller\scaffold.php:341 +msgid "Please correct errors below." +msgstr "Por favor corrija os erros abaixo." + +#: \libs\controller\scaffold.php:381 +msgid "No id set for %s::delete()" +msgstr "Nenhuma id definido para %s::delete()" + +#: \libs\controller\scaffold.php:394 +msgid "The %1$s with id: %2$d has been deleted." +msgstr "O %1$s com id: %2$d foi excluído." + +#: \libs\controller\scaffold.php:406 +msgid "There was an error deleting the %1$s with id: %2$d" +msgstr "Houve um erro ao deletar o %1$s com id: %2$d" + +#: \libs\controller\components\acl.php:52 +msgid "Could not find %s." +msgstr "Não pude encontrar %s." + +#: \libs\controller\components\acl.php:173 +msgid "[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration." +msgstr "[acl_base] O construtor da classe AclBase foi chamado, ou a classe foi instanciada. Esta classe deve permanecer abstrata. Por favor verifique a configuração do ACL na documentação do Cake." + +#: \libs\controller\components\acl.php:251 +msgid "" +"DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references:\n" +"Aro: " +msgstr "" + +#: \libs\controller\components\acl.php:256 +msgid "" +"DbAcl::check() - Failed ACO node lookup in permissions check. Node references:\n" +"Aro: " +msgstr "" + +#: \libs\controller\components\acl.php:264 +msgid "ACO permissions key %s does not exist in DbAcl::check()" +msgstr "A chave de permissões ACO %s não existe em DbAcl::check()" + +#: \libs\controller\components\acl.php:338 +msgid "DbAcl::allow() - Invalid node" +msgstr "DbAcl::allow() - Nó inválido" + +#: \libs\controller\components\auth.php:405 +msgid "Could not find AclComponent. Please include Acl in Controller::$components." +msgstr "Não pude encontrar o AclComponent. Por favor inclua Acl em Controller::$components." + +#: \libs\controller\components\auth.php:448 +msgid "Could not find $userModel. Please set AuthComponent::$userModel in beforeFilter()." +msgstr "Não pude encontrar o $userModel. Por favor defina AuthComponent::$userModel em beforeFilter()." + +#: \libs\controller\components\auth.php:458 +msgid "Login failed. Invalid username or password." +msgstr "Falha no login. Nome de usuário ou senha inválidos." + +#: \libs\controller\components\auth.php:459 +msgid "You are not authorized to access that location." +msgstr "Você não tem autorização para acessar aquele local." + +#: \libs\controller\components\auth.php:515 +msgid "Auth::startup() - Attempted access of un-mapped action \"%1$s\" in controller \"%2$s\"" +msgstr "Auth::startup() - Tentativa de acesso da action não mapeada \"%1$s\" no controller \"%2$s\"" + +#: \libs\controller\components\auth.php:540 +msgid "Could not find %s. Set AuthComponent::$object in beforeFilter() or pass a valid object" +msgstr "Não pude encontrar %s. Defina AuthComponent::$object no beforeFilter() ou passe um objeto válido" + +#: \libs\controller\components\auth.php:554 +msgid "Auth::isAuthorized() - $authorize is set to an incorrect value. Allowed settings are: \"actions\", \"crud\", \"model\" or null." +msgstr "Auth::isAuthorized() - $autorize está definido com um valor incorreto. Configurações permitidas são: \"actions\", \"crud\", \"model\" ou null." + +#: \libs\controller\components\auth.php:802 +msgid "Auth::getModel() - Model is not set or could not be found" +msgstr "Auth::getModel() - O Model não está definido ou não pôde ser encontrado" + +#: \libs\controller\components\email.php:684 +msgid "_lineLength cannot be accessed please use lineLength" +msgstr "" + +#: \libs\controller\components\security.php:331 +msgid "SecurityComponent::loginCredentials() - Server does not support digest authentication" +msgstr "SecurityComponent::loginCredentials() - O servidor não suporta autenticação Digest" + +#: \libs\model\cake_schema.php:548 +msgid "Schema generation error: invalid column type %s does not exist in DBO" +msgstr "" + +#: \libs\model\connection_manager.php:102 +msgid "ConnectionManager::getDataSource - Non-existent data source %s" +msgstr "ConnectionManager::getDataSource - Fonte de dados %s não existente" + +#: \libs\model\connection_manager.php:110 +#, fuzzy +msgid "ConnectionManager::getDataSource - Could not load class %s" +msgstr "ConnectionManager::getDataSource - Fonte de dados %s não existente" + +#: \libs\model\connection_manager.php:185 +#, fuzzy +msgid "ConnectionManager::loadDataSource - Unable to import DataSource class %s" +msgstr "ConnectionManager::getDataSource - Fonte de dados %s não existente" + +#: \libs\model\db_acl.php:145 +msgid "Model class '%s' not found in AclNode::node() when trying to bind %s object" +msgstr "" + +#: \libs\model\db_acl.php:190 +msgid "AclNode::node() - Couldn't find %s node identified by \"%s\"" +msgstr "" + +#: \libs\model\model.php:953 +msgid "(Model::getColumnTypes) Unable to build model field data. If you are using a model without a database table, try implementing schema()" +msgstr "(Model::getColumnTypes) Impossível construir dados de campos do model. Se você está usando um model sem uma tabela, tente implementar schema()" + +#: \libs\model\model.php:2518 +msgid "This field cannot be left blank" +msgstr "Este campo não pode ser deixado em branco" + +#: \libs\model\model.php:2566 +#, fuzzy +msgid "Could not find validation handler %s for %s" +msgstr "Nó pai não encontrado utilizando a referência \"%s\"" + +#: \libs\model\model.php:2875 +msgid "Invalid join model settings in %s" +msgstr "Configurações de join inválidas em %s" + +#: \libs\model\model_behavior.php:447 +msgid "BehaviorCollection::dispatchMethod() - Method %s not found in any attached behavior" +msgstr "" + +#: \libs\model\behaviors\acl.php:62 +#, fuzzy +msgid "Callback parentNode() not defined in %s" +msgstr "Magic method handler call__ not defined in %s" + +#: \libs\model\behaviors\containable.php:346 +msgid "Model \"%s\" is not associated with model \"%s\"" +msgstr "O model \"%s\" não está associado ao model \"%s\"" + +#: \libs\model\behaviors\translate.php:55 +msgid "Datasource %s for TranslateBehavior of model %s is not connected" +msgstr "Datasource %s para o TranslateBehavior do model %s não está conectado" + +#: \libs\model\behaviors\translate.php:440 +msgid "Association %s is already binded to model %s" +msgstr "Associação %s já está associada ao model %s" + +#: \libs\model\datasources\dbo_source.php:612 +#, fuzzy +msgid "SQL Error:" +msgstr "Erro:" + +#: \libs\model\datasources\dbo_source.php:614 +msgid "Aff:%s Num:%s Took:%sms" +msgstr "Afet:%s Num:%s Tempo:%sms" + +#: \libs\model\datasources\dbo_source.php:616 +msgid "Query:" +msgstr "Query:" + +#: \libs\model\datasources\dbo_source.php:847 +#: \libs\model\datasources\dbo\dbo_oracle.php:997 +msgid "SQL Error in model %s:" +msgstr "Erro SQL no model %s:" + +#: \libs\model\datasources\dbo_source.php:2423 +#, fuzzy +msgid "FIXME: Can't parse field: " +msgstr "CORRIJA-ME: Não é possível fazer o parser do campo: %s" + +#: \libs\model\datasources\dbo_source.php:2534;2596 +#: \libs\model\datasources\dbo\dbo_mysql.php:334 +#: \libs\model\datasources\dbo\dbo_oracle.php:1147 +msgid "Invalid schema object" +msgstr "Objeto de schema inválido" + +#: \libs\model\datasources\dbo_source.php:2622 +#: \libs\model\datasources\dbo\dbo_sqlite.php:493 +msgid "Column name or type not defined in schema" +msgstr "Nome ou tipo da coluna não definido no esquema" + +#: \libs\model\datasources\dbo_source.php:2627 +#: \libs\model\datasources\dbo\dbo_sqlite.php:498 +#, fuzzy +msgid "Column type %s does not exist" +msgstr "Método %1$s::%2$s não existe" + +#: \libs\model\datasources\dbo\dbo_mssql.php:114 +msgid "PHP SQL Server interface is not installed, cannot continue. For troubleshooting information, see http://php.net/mssql/" +msgstr "" + +#: \libs\model\datasources\dbo\dbo_oracle.php:586 +msgid "Must specify table to operate on constraints" +msgstr "Uma tabela deve ser especificada para operar em restrições (constraints)" + +#: \libs\model\datasources\dbo\dbo_oracle.php:644 +msgid "DboOracle::constraint() accepts only enable, disable, or list" +msgstr "DboOracle::constraint() aceita somente \"enable\", \"disable\", ou \"list\"" + +#: \libs\view\helper.php:154 +msgid "Method %1$s::%2$s does not exist" +msgstr "Método %1$s::%2$s não existe" + +#: \libs\view\view.php:442 +msgid "Error in view %s, got:
%s
" +msgstr "Erro na view %s:
%s
" + +#: \libs\view\view.php:486 +msgid "Error in layout %s, got:
%s
" +msgstr "Erro no layout %s:
%s
" + +#: \libs\view\errors\error404.ctp:22 +#: \libs\view\errors\error500.ctp:22 +#: \libs\view\errors\missing_action.ctp:22;26 +#: \libs\view\errors\missing_behavior_class.ctp:22;26 +#: \libs\view\errors\missing_behavior_file.ctp:22;26 +#: \libs\view\errors\missing_component_class.ctp:22;26 +#: \libs\view\errors\missing_component_file.ctp:22;26 +#: \libs\view\errors\missing_connection.ctp:22;26 +#: \libs\view\errors\missing_controller.ctp:22;26 +#: \libs\view\errors\missing_helper_class.ctp:22;26 +#: \libs\view\errors\missing_helper_file.ctp:22;26 +#: \libs\view\errors\missing_layout.ctp:22;26 +#: \libs\view\errors\missing_model.ctp:22;26 +#: \libs\view\errors\missing_scaffolddb.ctp:22;26 +#: \libs\view\errors\missing_table.ctp:22 +#: \libs\view\errors\missing_view.ctp:22;26 +#: \libs\view\errors\private_action.ctp:22 +#: \libs\view\errors\scaffold_error.ctp:22 +msgid "Error" +msgstr "Erro" + +#: \libs\view\errors\error500.ctp:23 +msgid "An Internal Error Has Occurred." +msgstr "Ocorreu um Erro Interno" + +#: \libs\view\errors\missing_action.ctp:20 +msgid "Missing Method in %s" +msgstr "Método não encontrado em %s" + +#: \libs\view\errors\missing_action.ctp:23 +msgid "The action %1$s is not defined in controller %2$s" +msgstr "A action %1$s não está definida no controller %2$s" + +#: \libs\view\errors\missing_action.ctp:27 +msgid "Create %1$s%2$s in file: %3$s." +msgstr "Crie %1$s%2$s no arquivo: %3$s." + +#: \libs\view\errors\missing_action.ctp:44 +#: \libs\view\errors\missing_behavior_class.ctp:37 +#: \libs\view\errors\missing_behavior_file.ctp:37 +#: \libs\view\errors\missing_component_class.ctp:37 +#: \libs\view\errors\missing_component_file.ctp:37 +#: \libs\view\errors\missing_connection.ctp:30 +#: \libs\view\errors\missing_controller.ctp:38 +#: \libs\view\errors\missing_helper_class.ctp:37 +#: \libs\view\errors\missing_helper_file.ctp:37 +#: \libs\view\errors\missing_layout.ctp:30 +#: \libs\view\errors\missing_model.ctp:39 +#: \libs\view\errors\missing_scaffolddb.ctp:30 +#: \libs\view\errors\missing_table.ctp:26 +#: \libs\view\errors\missing_view.ctp:30 +#: \libs\view\errors\private_action.ctp:26 +#: \libs\view\errors\scaffold_error.ctp:26 +msgid "Notice" +msgstr "Advertência" + +#: \libs\view\errors\missing_action.ctp:45 +#: \libs\view\errors\missing_connection.ctp:31 +msgid "If you want to customize this error message, create %s." +msgstr "Se você quer customizar esta mensagem de erro, crie %s." + +#: \libs\view\errors\missing_behavior_class.ctp:23 +#, fuzzy +msgid "The behavior class %s can not be found or does not exist." +msgstr "A classe helper %s não pode ser encontrada ou não existe." + +#: \libs\view\errors\missing_behavior_class.ctp:27 +#: \libs\view\errors\missing_behavior_file.ctp:27 +#: \libs\view\errors\missing_helper_class.ctp:27 +#: \libs\view\errors\missing_helper_file.ctp:27 +msgid "Create the class below in file: %s" +msgstr "Crie a classe abaixo no arquivo: %s" + +#: \libs\view\errors\missing_behavior_class.ctp:38 +#: \libs\view\errors\missing_behavior_file.ctp:38 +#: \libs\view\errors\missing_component_class.ctp:38 +#: \libs\view\errors\missing_component_file.ctp:38 +#: \libs\view\errors\missing_controller.ctp:39 +#: \libs\view\errors\missing_helper_class.ctp:38 +#: \libs\view\errors\missing_helper_file.ctp:38 +#: \libs\view\errors\missing_layout.ctp:31 +#: \libs\view\errors\missing_model.ctp:40 +#: \libs\view\errors\missing_scaffolddb.ctp:31 +#: \libs\view\errors\missing_table.ctp:27 +#: \libs\view\errors\missing_view.ctp:31 +#: \libs\view\errors\private_action.ctp:27 +#: \libs\view\errors\scaffold_error.ctp:27 +msgid "If you want to customize this error message, create %s" +msgstr "Se você quiser customizar esta mensagem de erro, crie %s" + +#: \libs\view\errors\missing_behavior_file.ctp:23 +#, fuzzy +msgid "The Behavior file %s can not be found or does not exist." +msgstr "O arquivo de helper %s não pode ser encontrado ou não existe." + +#: \libs\view\errors\missing_component_class.ctp:23 +msgid "Component class %1$s in %2$s was not found." +msgstr "Classe de component %1$s em %2$s não foi encontrada." + +#: \libs\view\errors\missing_component_class.ctp:27 +#: \libs\view\errors\missing_component_file.ctp:27 +#: \libs\view\errors\missing_model.ctp:27 +msgid "Create the class %s in file: %s" +msgstr "Crie a classe %s no arquivo: %s" + +#: \libs\view\errors\missing_component_file.ctp:23 +msgid "The component file was not found." +msgstr "O arquivo de component não foi encontrado." + +#: \libs\view\errors\missing_connection.ctp:23 +msgid "%s requires a database connection" +msgstr "%s necessita de uma conexão ao banco de dados" + +#: \libs\view\errors\missing_connection.ctp:27 +msgid "Confirm you have created the file : %s." +msgstr "Verifique que você criou o arquivo: %s" + +#: \libs\view\errors\missing_controller.ctp:23 +msgid "%s could not be found." +msgstr "%s não pôde ser encontrado." + +#: \libs\view\errors\missing_controller.ctp:27 +msgid "Create the class %s below in file: %s" +msgstr "Crie a classe %s abaixo no arquivo: %s" + +#: \libs\view\errors\missing_helper_class.ctp:23 +msgid "The helper class %s can not be found or does not exist." +msgstr "A classe helper %s não pode ser encontrada ou não existe." + +#: \libs\view\errors\missing_helper_file.ctp:23 +msgid "The helper file %s can not be found or does not exist." +msgstr "O arquivo de helper %s não pode ser encontrado ou não existe." + +#: \libs\view\errors\missing_layout.ctp:23 +msgid "The layout file %s can not be found or does not exist." +msgstr "O arquivo de layout %s não pode ser encontrado ou não existe." + +#: \libs\view\errors\missing_layout.ctp:27 +#: \libs\view\errors\missing_scaffolddb.ctp:27 +#: \libs\view\errors\missing_view.ctp:27 +msgid "Confirm you have created the file: %s" +msgstr "Verifique que você criou o arquivo: %s" + +#: \libs\view\errors\missing_model.ctp:23 +msgid "%s could not be found." +msgstr "%s não pôde ser encontrado." + +#: \libs\view\errors\missing_scaffolddb.ctp:23 +msgid "Scaffold requires a database connection" +msgstr "Scaffold necessita de uma conexão ao banco de dados" + +#: \libs\view\errors\missing_table.ctp:23 +msgid "Database table %1$s for model %2$s was not found." +msgstr "A tabela %1$s para o model %2$s não foi encontrada." + +#: \libs\view\errors\missing_view.ctp:23 +msgid "The view for %1$s%2$s was not found." +msgstr "O view para %1$s%2$s não foi encontrado." + +#: \libs\view\errors\private_action.ctp:20 +msgid "Private Method in %s" +msgstr "Método privado em %s" + +#: \libs\view\errors\private_action.ctp:23 +msgid "%s%s cannot be accessed directly." +msgstr "%s%s não pode ser acessado diretamente." + +#: \libs\view\errors\scaffold_error.ctp:20 +msgid "Scaffold Error" +msgstr "Erro de Scaffold" + +#: \libs\view\errors\scaffold_error.ctp:23 +msgid "Method _scaffoldError in was not found in the controller" +msgstr "Método _scaffoldError não foi encontrado no controller" + +#: \libs\view\helpers\form.php:340;1214 +#: \libs\view\scaffolds\edit.ctp:24 +msgid "Submit" +msgstr "Enviar" + +#: \libs\view\helpers\form.php:480 +msgid "Error in field %s" +msgstr "Erro no campo %s" + +#: \libs\view\helpers\form.php:589 +#: \libs\view\scaffolds\edit.ctp:40 +#: \libs\view\scaffolds\index.ctp:79;86 +#: \libs\view\scaffolds\view.ctp:56;63;155 +msgid "New %s" +msgstr "Adicionar %s" + +#: \libs\view\helpers\form.php:595 +#: \libs\view\scaffolds\view.ctp:53;94 +msgid "Edit %s" +msgstr "Editar %s" + +#: \libs\view\helpers\form.php:1974 +msgid "January" +msgstr "Janeiro" + +#: \libs\view\helpers\form.php:1975 +msgid "February" +msgstr "Fevereiro" + +#: \libs\view\helpers\form.php:1976 +msgid "March" +msgstr "Março" + +#: \libs\view\helpers\form.php:1977 +msgid "April" +msgstr "Abril" + +#: \libs\view\helpers\form.php:1978 +msgid "May" +msgstr "Maio" + +#: \libs\view\helpers\form.php:1979 +msgid "June" +msgstr "Junho" + +#: \libs\view\helpers\form.php:1980 +msgid "July" +msgstr "Julho" + +#: \libs\view\helpers\form.php:1981 +msgid "August" +msgstr "Agosto" + +#: \libs\view\helpers\form.php:1982 +msgid "September" +msgstr "Setembro" + +#: \libs\view\helpers\form.php:1983 +msgid "October" +msgstr "Outubro" + +#: \libs\view\helpers\form.php:1984 +msgid "November" +msgstr "Novembro" + +#: \libs\view\helpers\form.php:1985 +msgid "December" +msgstr "Dezembro" + +#: \libs\view\helpers\js.php:154 +msgid "JsHelper:: Missing Method %s is undefined" +msgstr "" + +#: \libs\view\helpers\js.php:770 +msgid "%s does not have get() implemented" +msgstr "%s não tem o método get() implementado" + +#: \libs\view\helpers\js.php:789 +msgid "%s does not have event() implemented" +msgstr "%s não tem o método event() implementado" + +#: \libs\view\helpers\js.php:800 +msgid "%s does not have domReady() implemented" +msgstr "%s não tem o método domReady() implementado" + +#: \libs\view\helpers\js.php:810 +msgid "%s does not have each() implemented" +msgstr "%s não tem o método each() implementado" + +#: \libs\view\helpers\js.php:838 +msgid "%s does not have effect() implemented" +msgstr "%s não tem o método effect() implementado" + +#: \libs\view\helpers\js.php:868 +msgid "%s does not have request() implemented" +msgstr "%s não tem o método request() implementado" + +#: \libs\view\helpers\js.php:892 +msgid "%s does not have drag() implemented" +msgstr "%s não tem o método drag() implementado" + +#: \libs\view\helpers\js.php:914 +msgid "%s does not have drop() implemented" +msgstr "%s não tem o método drop() implementado" + +#: \libs\view\helpers\js.php:940 +msgid "%s does not have sortable() implemented" +msgstr "%s não tem o método sortable() implementado" + +#: \libs\view\helpers\js.php:965 +msgid "%s does not have slider() implemented" +msgstr "%s não tem o método slider() implementado" + +#: \libs\view\helpers\js.php:985 +msgid "%s does not have serializeForm() implemented" +msgstr "%s não tem o método serializeForm() implementado" + +#: \libs\view\helpers\mootools_engine.php:310 +msgid "MootoolsEngine::drop() requires a \"drag\" option to properly function" +msgstr "MootoolsEngine::drop() requer a opção \"drag\" a funcionar corretamente" + +#: \libs\view\helpers\number.php:90 +msgid "%d KB" +msgstr "%d KB" + +#: \libs\view\helpers\number.php:92 +msgid "%.2f MB" +msgstr "%.2f MB" + +#: \libs\view\helpers\number.php:94 +msgid "%.2f GB" +msgstr "%.2f GB" + +#: \libs\view\helpers\number.php:96 +msgid "%.2f TB" +msgstr "%.2f TB" + +#: \libs\view\helpers\number.php:88 +msgid "%d Byte" +msgid_plural "%d Bytes" +msgstr[0] "%d Byte" +msgstr[1] "%d Bytes" + +#: \libs\view\helpers\paginator.php:97 +msgid "%s does not implement a link() method, it is incompatible with PaginatorHelper" +msgstr "" + +#: \libs\view\helpers\paginator.php:535 +msgid " of " +msgstr " de " + +#: \libs\view\helpers\session.php:176 +msgid "You can not write to a Session from the view" +msgstr "Você não pode escrever em Session da view " + +#: \libs\view\helpers\text.php:277 +msgid "TextHelper::trim() is deprecated. Use TextHelper::truncate() instead" +msgstr "" + +#: \libs\view\helpers\time.php:226 +msgid "Today, %s" +msgstr "Hoje, %s" + +#: \libs\view\helpers\time.php:228 +msgid "Yesterday, %s" +msgstr "Ontem, %s" + +#: \libs\view\helpers\time.php:562 +msgid "on %s" +msgstr "em %s" + +#: \libs\view\helpers\time.php:596 +msgid "%s ago" +msgstr "%s atrás" + +#: \libs\view\helpers\time.php:630 +msgid "days" +msgstr "dias" + +#: \libs\view\helpers\time.php:566 +msgid "year" +msgid_plural "years" +msgstr[0] "ano" +msgstr[1] "anos" + +#: \libs\view\helpers\time.php:567;572 +msgid "month" +msgid_plural "months" +msgstr[0] "mês" +msgstr[1] "meses" + +#: \libs\view\helpers\time.php:568;573;577 +msgid "week" +msgid_plural "weeks" +msgstr[0] "semana" +msgstr[1] "semanas" + +#: \libs\view\helpers\time.php:569;574;578;581 +msgid "day" +msgid_plural "days" +msgstr[0] "dia" +msgstr[1] "dias" + +#: \libs\view\helpers\time.php:582;585 +msgid "hour" +msgid_plural "hours" +msgstr[0] "hora" +msgstr[1] "horas" + +#: \libs\view\helpers\time.php:586;589 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuto" +msgstr[1] "minutos" + +#: \libs\view\helpers\time.php:592 +msgid "second" +msgid_plural "seconds" +msgstr[0] "segundo" +msgstr[1] "segundos" + +#: \libs\view\helpers\time.php:60 +#, fuzzy +msgid "abday" +msgstr "dia" + +#: \libs\view\helpers\time.php:72 +msgid "d_t_fmt" +msgstr "d_t_fmt" + +#: \libs\view\helpers\time.php:85 +#: \tests\cases\libs\i18n.test.php:2602 +#, fuzzy +msgid "abmon" +msgstr "mês" + +#: \libs\view\helpers\time.php:91 +#, fuzzy +msgid "mon" +msgstr "mês" + +#: \libs\view\helpers\time.php:102 +#: \tests\cases\libs\i18n.test.php:2598 +msgid "am_pm" +msgstr "am_pm" + +#: \libs\view\helpers\time.php:109 +msgid "t_fmt_ampm" +msgstr "t_fmt_ampm" + +#: \libs\view\helpers\time.php:123 +#: \tests\cases\libs\i18n.test.php:2594 +msgid "d_fmt" +msgstr "d_fmt" + +#: \libs\view\helpers\time.php:129 +msgid "t_fmt" +msgstr "t_fmt" + +#: \libs\view\pages\home.ctp:23 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:99 +msgid "Release Notes for CakePHP %s." +msgstr "Notas de Release para o CakePHP %s." + +#: \libs\view\pages\home.ctp:25 +msgid "Read the changelog" +msgstr "Leia o changelog" + +#: \libs\view\pages\home.ctp:35 +#: \tests\test_app\views\pages\home.ctp:12 +msgid "Your tmp directory is writable." +msgstr "Seu diretório tmp está com permissão de escrita" + +#: \libs\view\pages\home.ctp:39 +#: \tests\test_app\views\pages\home.ctp:16 +msgid "Your tmp directory is NOT writable." +msgstr "Seu diretório tmp NÃO está com permissão de escrita" + +#: \libs\view\pages\home.ctp:49 +#: \tests\test_app\views\pages\home.ctp:26 +msgid "The %s is being used for caching. To change the config edit APP/config/core.php " +msgstr "O %s está sendo usado para cache. Para mudar as configurações edite APP/config/core.php" + +#: \libs\view\pages\home.ctp:53 +#: \tests\test_app\views\pages\home.ctp:30 +msgid "Your cache is NOT working. Please check the settings in APP/config/core.php" +msgstr "Seu cache NÃO está funcionando. Por favor verifique as configurações em APP/config/core.php" + +#: \libs\view\pages\home.ctp:63 +#: \tests\test_app\views\pages\home.ctp:40 +msgid "Your database configuration file is present." +msgstr "Seu arquivo de configuração do banco de dados está presente." + +#: \libs\view\pages\home.ctp:68 +#: \tests\test_app\views\pages\home.ctp:45 +msgid "Your database configuration file is NOT present." +msgstr "Seu arquivo de configuração do banco de dados NÃO está presente." + +#: \libs\view\pages\home.ctp:70 +#: \tests\test_app\views\pages\home.ctp:47 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:72 +msgid "Rename config/database.php.default to config/database.php" +msgstr "Renomeie config/database.php.default para config/database.php" + +#: \libs\view\pages\home.ctp:87 +#: \tests\test_app\views\pages\home.ctp:64 +msgid "Cake is able to connect to the database." +msgstr "O Cake está apto a conectar ao banco de dados" + +#: \libs\view\pages\home.ctp:91 +#: \tests\test_app\views\pages\home.ctp:68 +msgid "Cake is NOT able to connect to the database." +msgstr "O Cake NÃO está apto a conectar ao banco de dados" + +#: \libs\view\pages\home.ctp:97 +#: \tests\test_app\views\pages\home.ctp:74 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:101 +msgid "Editing this Page" +msgstr "Editando esta página" + +#: \libs\view\pages\home.ctp:100 +msgid "" +"To change the content of this page, create: APP/views/pages/home.ctp.
\n" +"To change its layout, create: APP/views/layouts/default.ctp.
\n" +"You can also add some CSS styles for your pages at: APP/webroot/css." +msgstr "" +"Para alterar o conteúdo desta página, crie: APP/views/pages/home.ctp.
\n" +"Para alterar seu layout, crie: APP/views/layouts/default.ctp.
\n" +"Você também pode adicionar estilos CSS para suas páginas em: APP/webroot/css." + +#: \libs\view\pages\home.ctp:106 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:108 +msgid "Getting Started" +msgstr "Primeiros Passos" + +#: \libs\view\pages\home.ctp:110 +#, fuzzy +msgid "new" +msgstr "Adicionar" + +#: \libs\view\pages\home.ctp:110 +msgid "CakePHP 1.2 Docs" +msgstr "CakePHP 1.2 Docs" + +#: \libs\view\pages\home.ctp:119 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:110 +msgid "The 15 min Blog Tutorial" +msgstr "O tutorial do Blog de 15 minutos" + +#: \libs\view\pages\home.ctp:126 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:114 +msgid "More about Cake" +msgstr "Mais sobre Cake" + +#: \libs\view\pages\home.ctp:128 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:116 +msgid "CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Active Record, Association Data Mapping, Front Controller and MVC." +msgstr "CakePHP é um framework de desenvolvimento ágil para PHP que usa padrões de projeto comumente conhecidos como Active Record, Association Data Mapping, Front Controller e MVC." + +#: \libs\view\pages\home.ctp:131 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:119 +msgid "Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." +msgstr "Nosso objetivo principal é prover um framework estruturado que possibilite a usuários de PHP de todos os níveis a desenvolver aplicações web robustas rapidamente, sem nenhuma perda para flexibilidade." + +#: \libs\view\pages\home.ctp:135 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:122 +msgid "Cake Software Foundation" +msgstr "Cake Software Foundation" + +#: \libs\view\pages\home.ctp:136 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:123 +msgid "Promoting development related to CakePHP" +msgstr "Promovendo desenvolvimento relacionado a CakePHP" + +#: \libs\view\pages\home.ctp:137 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:130 +msgid "CakePHP" +msgstr "CakePHP" + +#: \libs\view\pages\home.ctp:138 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:131 +msgid "The Rapid Development Framework" +msgstr "O Framework de Desenvolvimento Ágil" + +#: \libs\view\pages\home.ctp:139 +msgid "CakePHP Documentation" +msgstr "Documentação CakePHP" + +#: \libs\view\pages\home.ctp:140 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:133 +msgid "Your Rapid Development Cookbook" +msgstr "Seu livro de receitas de desenvolvimento rápido" + +#: \libs\view\pages\home.ctp:141 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:134 +msgid "CakePHP API" +msgstr "API CakePHP" + +#: \libs\view\pages\home.ctp:142 +msgid "Quick Reference" +msgstr "Referência Rápida" + +#: \libs\view\pages\home.ctp:143 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:124 +msgid "The Bakery" +msgstr "The Bakery" + +#: \libs\view\pages\home.ctp:144 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:125 +msgid "Everything CakePHP" +msgstr "Tudo para CakePHP" + +#: \libs\view\pages\home.ctp:145 +msgid "The Show" +msgstr "The Show" + +#: \libs\view\pages\home.ctp:146 +msgid "The Show is a live and archived internet radio broadcast CakePHP-related topics and answer questions live via IRC, Skype, and telephone." +msgstr "The Show é uma rádio online ao vivo ou arquivada discutindo tópicos relacionados ao CakePHP e respondemos perguntas feitas ao vivo via IRC, Skype e telefone." + +#: \libs\view\pages\home.ctp:147 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:140 +msgid "CakePHP Google Group" +msgstr "CakePHP Google Group" + +#: \libs\view\pages\home.ctp:148 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:141 +msgid "Community mailing list" +msgstr "Grupo de discussão da comunidade" + +#: \libs\view\pages\home.ctp:150 +msgid "Live chat about CakePHP" +msgstr "Canal de IRC do CakePHP" + +#: \libs\view\pages\home.ctp:151 +msgid "CakePHP Code" +msgstr "CakePHP Code" + +#: \libs\view\pages\home.ctp:152 +#, fuzzy +msgid "For the Development of CakePHP (Tickets, Git browser, Roadmap, Changelogs)" +msgstr "Para o desenvolvimento do CakePHP (Tickets, SVN browser, Roadmap, Changelogs)" + +#: \libs\view\pages\home.ctp:153 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:136 +msgid "CakeForge" +msgstr "CakeForge" + +#: \libs\view\pages\home.ctp:154 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:137 +msgid "Open Development for CakePHP" +msgstr "Desenvolvimento Open para CakePHP" + +#: \libs\view\pages\home.ctp:155 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:126 +msgid "Book Store" +msgstr "Book Store" + +#: \libs\view\pages\home.ctp:156 +#: \tests\test_app\views\posts\test_nocache_tags.ctp:127 +msgid "Recommended Software Books" +msgstr "Livros recomendados" + +#: \libs\view\pages\home.ctp:157 +msgid "CakePHP gear" +msgstr "CakePHP gear" + +#: \libs\view\scaffolds\edit.ctp:28 +#: \libs\view\scaffolds\index.ctp:27;77 +#: \libs\view\scaffolds\view.ctp:50 +msgid "Actions" +msgstr "Ações" + +#: \libs\view\scaffolds\edit.ctp:31 +#: \libs\view\scaffolds\index.ctp:57 +#: \libs\view\scaffolds\view.ctp:146 +msgid "Delete" +msgstr "Excluir" + +#: \libs\view\scaffolds\edit.ctp:31 +#: \libs\view\scaffolds\index.ctp:57 +#: \libs\view\scaffolds\view.ctp:54;146 +msgid "Are you sure you want to delete" +msgstr "Você tem certeza que quer excluir" + +#: \libs\view\scaffolds\edit.ctp:33 +msgid "List" +msgstr "Listar" + +#: \libs\view\scaffolds\edit.ctp:39 +#: \libs\view\scaffolds\index.ctp:85 +#: \libs\view\scaffolds\view.ctp:55;62 +msgid "List %s" +msgstr "Listar %s" + +#: \libs\view\scaffolds\index.ctp:55 +#: \libs\view\scaffolds\view.ctp:144 +msgid "View" +msgstr "Visualizar" + +#: \libs\view\scaffolds\index.ctp:56 +#: \libs\view\scaffolds\view.ctp:145 +msgid "Edit" +msgstr "Editar" + +#: \libs\view\scaffolds\index.ctp:67 +msgid "Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%" +msgstr "" + +#: \libs\view\scaffolds\index.ctp:71 +msgid "previous" +msgstr "anterior" + +#: \libs\view\scaffolds\index.ctp:73 +msgid "next" +msgstr "próximo" + +#: \libs\view\scaffolds\view.ctp:21 +msgid "View %s" +msgstr "Visualizar %s" + +#: \libs\view\scaffolds\view.ctp:54 +msgid "Delete %s" +msgstr "Excluir %s" + +#: \libs\view\scaffolds\view.ctp:75;114 +msgid "Related %s" +msgstr "Relacionado %s" + +#: \tests\cases\basics.test.php:346;398;458;482 +#: \tests\cases\libs\i18n.test.php:2675;2664 +#: \tests\cases\basics.test.php:402;490 +msgid "Plural Rule 1" +msgstr "Plural Rule 1" + +#: \tests\cases\basics.test.php:350;355;462;467;486;499 +#: \tests\cases\libs\i18n.test.php:2700 +#: \tests\cases\basics.test.php:406;411;494 +msgid "Plural Rule 1 (from core)" +msgstr "Plural Rule 1 (from core)" + +#: \tests\cases\basics.test.php:370;374;426;438;514 +#: \tests\cases\libs\i18n.test.php:2535;2539;2543;2688 +#: \tests\cases\basics.test.php:430;522 +msgid "%d = 1" +msgid_plural "%d = 0 or > 1" +msgstr[0] "%d = 1" +msgstr[1] "%d = 0 or > 1" + +#: \tests\cases\basics.test.php:378;383;518;527 +#: \tests\cases\libs\i18n.test.php:2713 +#: \tests\cases\basics.test.php:434;443 +msgid "%d = 1 (from core)" +msgid_plural "%d = 0 or > 1 (from core)" +msgstr[0] "%d = 1 (from core)" +msgstr[1] "%d = 0 or > 1 (from core)" + +#: \tests\cases\libs\i18n.test.php:2511 +msgid "No Translation needed" +msgstr "No Translation needed" + +#: \tests\cases\libs\i18n.test.php:2523 +msgid "this is a \"quoted string\"" +msgstr "this is a \"quoted string\"" + +#: \tests\cases\libs\view\helpers\form.test.php:1752 +msgid "Le login doit contenir au moins 2 caractères" +msgstr "Le login doit contenir au moins 2 caractères" + +#: \tests\lib\cake_test_case.php:536 +msgid "Referenced fixture class %s not found" +msgstr "" + +#: \tests\lib\code_coverage_manager.php:104 +msgid "Xdebug supports no parallel coverage analysis - so this is not possible." +msgstr "" + +#: \tests\lib\code_coverage_manager.php:226;239 +msgid "This test object file is invalid: %s" +msgstr "" + +#: \tests\lib\code_coverage_manager.php:553 +msgid "This group file does not exist!" +msgstr "" + +#: \tests\lib\code_coverage_manager.php:740 +msgid "Sorry, you cannot have more covered lines than total lines!" +msgstr "" + +#: \tests\lib\test_manager.php:104 +msgid "All App Tests" +msgstr "" + +#: \tests\lib\test_manager.php:106 +msgid "All %s Plugin Tests" +msgstr "" + +#: \tests\lib\test_manager.php:108 +msgid "All Core Tests" +msgstr "" + +#: \tests\lib\test_manager.php:135 +#, fuzzy +msgid "Test case %s cannot be found" +msgstr "Template para %s não pôde ser encontrado" + +#: \tests\lib\test_manager.php:143 +msgid "Individual test case: %s" +msgstr "" + +#: \tests\lib\test_manager.php:160 +#, fuzzy +msgid "Group test %s cannot be found at %s" +msgstr "O arquivo de layout %s não pode ser encontrado ou não existe." + +#: \tests\lib\test_manager.php:164 +msgid "%s group test" +msgstr "" + +#: \tests\test_app\views\pages\extract.ctp:6 +msgid "You have %d new message." +msgid_plural "You have %d new messages." +msgstr[0] "" +msgstr[1] "" + +#: \tests\test_app\views\pages\extract.ctp:7 +msgid "You deleted %d message." +msgid_plural "You deleted %d messages." +msgstr[0] "" +msgstr[1] "" + +#: \tests\test_app\views\pages\home.ctp:77 +#, fuzzy +msgid "" +"To change the content of this page, edit: %s\n" +"\t\tTo change its layout, edit: %s\n" +"\t\tYou can also add some CSS styles for your pages at: %s" +msgstr "" +"Para alterar o conteúdo desta página, crie: APP/views/pages/home.ctp.
\n" +"Para alterar seu layout, crie: APP/views/layouts/default.ctp.
\n" +"Você também pode adicionar estilos CSS para suas páginas em: APP/webroot/css." + +#: \tests\test_app\views\posts\cache_form.ctp:5 +msgid "Add User" +msgstr "Adiconar Usuário" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:24 +#, fuzzy +msgid "Your tmp directory is " +msgstr "Seu diretório tmp está com permissão de escrita" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:26 +#, fuzzy +msgid "writable." +msgstr "%s sem permissão de escrita" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:28 +#, fuzzy +msgid "NOT writable." +msgstr "%s sem permissão de escrita" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:37 +msgid "Your cache is " +msgstr "Seu cache é " + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:39 +msgid "set up and initialized properly." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:42 +#, fuzzy +msgid " is being used to cache, to change this edit config/core.php " +msgstr "O %s está sendo usado para cache. Para mudar as configurações edite APP/config/core.php" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:52 +msgid "NOT working." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:55 +msgid "Edit: config/core.php to insure you have the newset version of this file and the variable $cakeCache set properly" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:64 +#, fuzzy +msgid "Your database configuration file is " +msgstr "Seu arquivo de configuração do banco de dados está presente." + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:67 +msgid "present." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:70 +msgid "NOT present." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:88 +msgid "Cake" +msgstr "Cake" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:90 +msgid " is able to " +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:92 +#, fuzzy +msgid " is NOT able to " +msgstr "%s NÃO mudou para %s" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:94 +#, fuzzy +msgid "connect to the database." +msgstr "O Cake está apto a conectar ao banco de dados" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:100 +msgid "Read the release notes and get the latest version" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:103 +msgid "To change the content of this page, create: /app/views/pages/home.ctp." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:104 +msgid "To change its layout, create: /app/views/layouts/default.ctp." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:105 +msgid "See the views section of the manual for more info." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:106 +msgid "You can also add some CSS styles for your pages at: app/webroot/css/." +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:111 +msgid "Cook up Web sites fast with CakePHP" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:112 +msgid "Create an interactive production wiki using PHP" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:128 +msgid "CakeSchwag" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:129 +msgid "Get your own CakePHP gear - Doughnate to Cake" +msgstr "Compre seus acessórios do CakePHP. Camisetas, bonés, cuecas(!) e mais. Ajude o desenvolvimento do Cake!" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:132 +msgid "CakePHP Manual" +msgstr "CakePHP Manual" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:135 +msgid "Docblock Your Best Friend" +msgstr "" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:138 +msgid "CakePHP Trac" +msgstr "CakePHP Trac" + +#: \tests\test_app\views\posts\test_nocache_tags.ctp:139 +msgid "For the Development of CakePHP (Tickets, SVN browser, Roadmap, Changelogs)" +msgstr "Para o desenvolvimento do CakePHP (Tickets, SVN browser, Roadmap, Changelogs)" + +#: \tests\test_app\views\pages\extract.ctp:10 +msgid "You have %d new message (domain)." +msgid_plural "You have %d new messages (domain)." +msgstr[0] "" +msgstr[1] "" + +#: \tests\test_app\views\pages\extract.ctp:11 +msgid "You deleted %d message (domain)." +msgid_plural "You deleted %d messages (domain)." +msgstr[0] "" +msgstr[1] "" + +#~ msgid "To identify the node and parent, use the row id." +#~ msgstr "Para identificar o nó e o pai, use a coluna id." + +#~ msgid "command not found" +#~ msgstr "comando não encontrado" + +#~ msgid "What is the name of the table (enter \"null\" to use NO table)?" +#~ msgstr "" +#~ "Qual o nome da tabela (digite \"null\" para NÃO usar tabela alguma)?" + +#~ msgid "This is a self join. Use %s as the alias" +#~ msgstr "Isto é um self join. Use %s como alias" + +#~ msgid "" +#~ "The selection you entered was invalid. Please enter a number between 1 " +#~ "and 4." +#~ msgstr "" +#~ "A seleção que você digitou é inválida. Por favor digite um número entre 1 " +#~ "e 4." + +#~ msgid "Enter the class to test or (q)uit" +#~ msgstr "Digite a classe para testar ou 'q' para sair" + +#~ msgid "Enter a test case or (q)uit" +#~ msgstr "Digite um test case ou 'q' para sair" + +#~ msgid "Test baked\n" +#~ msgstr "Test saindo do forno\n" + +#~ msgid "Is this correct?" +#~ msgstr "Isto está correto?" + +#~ msgid "Unable to load DataSource file %s.php" +#~ msgstr "Impossível carregar arquivo DataSource %s.php" + +#~ msgid "" +#~ "(TextHelper::flay) Deprecated: the Flay library is no longer supported " +#~ "and will be removed in a future version." +#~ msgstr "" +#~ "(TextHelper::flay) Descontinuado: a biblioteca Flay não é mais suportada " +#~ "e será removida em uma versão futura." diff --git a/app/plugins/cake_ptbr/locale/pt_br/LC_TIME b/app/plugins/cake_ptbr/locale/pt_br/LC_TIME new file mode 100644 index 0000000..ad562db --- /dev/null +++ b/app/plugins/cake_ptbr/locale/pt_br/LC_TIME @@ -0,0 +1,68 @@ +escape_char / +comment_char % +abday "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "" +day "";/ + "";/ + "<ç>";/ + "";/ + "";/ + "";/ + "<á>" + +week 7;19971130;7 +first_weekday 1 +first_workday 2 +abmon "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "" +mon "";/ + "";/ + "<ç>";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "";/ + "" +% Appropriate date and time representation (%c) +% "%a %d %b %Y %r %Z" +d_t_fmt "" +% +% Appropriate date representation (%x) +% "%d/%m/%Y" +d_fmt "" +% +% Appropriate time representation (%X) +% "%r" +t_fmt "" +% +% Appropriate AM/PM time representation (%r) +% "%I:%M:%S %p" +t_fmt_ampm "" +% +% Strings for AM/PM +% +am_pm "";"

" +% +% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y" +date_fmt "/ +/ +" diff --git a/app/plugins/cake_ptbr/models/behaviors/ajuste_data.php b/app/plugins/cake_ptbr/models/behaviors/ajuste_data.php new file mode 100644 index 0000000..0466445 --- /dev/null +++ b/app/plugins/cake_ptbr/models/behaviors/ajuste_data.php @@ -0,0 +1,113 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * AjusteDataBehavior + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/behavior-ajustedata + */ +class AjusteDataBehavior extends ModelBehavior { + +/** + * Configurao dos campos + * + * @var array + * @access public + */ + var $campos; + +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + * @access public + */ + function setup(&$model, $config = array()) { + if (empty($config)) { + // Caso no seja informado os campos, ele ir buscar no schema + $this->campos[$model->name] = $this->_buscaCamposDate($model); + } elseif (!is_array($config)) { + $this->campos[$model->name] = array($config); + } else { + $this->campos[$model->name] = $config; + } + } + +/** + * Before Validate + * + * @param object $model + * @return boolean + * @access public + */ + function beforeValidate(&$model) { + return $this->ajustarDatas($model); + } + +/** + * Before Save + * + * @param object $model + * @return boolean + * @access public + */ + function beforeSave(&$model) { + return $this->ajustarDatas($model); + } + +/** + * Corrigir as datas + * + * @param object $model + * @return boolean + * @access public + */ + function ajustarDatas(&$model) { + $data =& $model->data[$model->name]; + foreach ($this->campos[$model->name] as $campo) { + if (isset($data[$campo]) && preg_match('/\d{1,2}\/\d{1,2}\/\d{2,4}/', $data[$campo])) { + list($dia, $mes, $ano) = explode('/', $data[$campo]); + if (strlen($ano) == 2) { + if ($ano > 50) { + $ano += 1900; + } else { + $ano += 2000; + } + } + $data[$campo] = "$ano-$mes-$dia"; + } + } + return true; + } + +/** + * Buscar campos de data nos dados da model + * + * @param object $model + * @return array Lista dos campos + * @access protected + */ + function _buscaCamposDate(&$model) { + if (!is_array($model->_schema)) { + return array(); + } + $saida = array(); + foreach ($model->_schema as $campo => $infos) { + if ($infos['type'] == 'date' && !in_array($campo, array('created', 'updated', 'modified'))) { + $saida[] = $campo; + } + } + return $saida; + } +} diff --git a/app/plugins/cake_ptbr/models/behaviors/ajuste_float.php b/app/plugins/cake_ptbr/models/behaviors/ajuste_float.php new file mode 100644 index 0000000..cf80896 --- /dev/null +++ b/app/plugins/cake_ptbr/models/behaviors/ajuste_float.php @@ -0,0 +1,146 @@ + + * @author Daniel Pakuschewski + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * AjusteFloatBehavior + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/behavior-ajustefloat + */ +class AjusteFloatBehavior extends ModelBehavior { + +/** + * Campos do tipo float + * + * @var array + * @access public + */ + var $floatFields = array(); + +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + * @access public + */ + function setup(&$model, $config = array()) { + $this->floatFields[$model->alias] = array(); + foreach ($model->_schema as $field => $spec) { + if ($spec['type'] == 'float') { + $this->floatFields[$model->alias][] = $field; + } + } + } + +/** + * Before Find + * Transforma o valor de BRL para o formato SQL antes de executar uma query + * com conditions. + * + * @param object $model + * @return boolean + * @access public + */ + function beforeValidate(&$model) { + foreach($model->data[$model->alias] as $field => $value) { + if ($model->hasField($field) && $model->_schema[$field]['type'] == 'float') { + if (!is_string($value) || preg_match('/^[0-9]+(\.[0-9]+)?$/', $value)) { + continue; + } + $model->data[$model->alias][$field] = str_replace(array('.', ','), array('', '.'), $value); + } + } + return true; + } + +/** + * Before Find + * Transforma o valor de BRL para o formato SQL antes de executar uma query + * com conditions. + * + * @param object $model + * @return array + * @access public + */ + function beforeFind(&$model, $query) { + if (is_array($query['conditions'])) { + foreach ($query['conditions'] as $field => $value) { + if (strpos($field, '.') === false) { + $field = $model->alias . '.' . $field; + } + list($modelName, $field) = explode('.', $field); + $useModel = ($modelName != $model->alias) ? $model->{$modelName} : $model; + if ($useModel->hasField($field) && $useModel->_schema[$field]['type'] == 'float') { + if (!is_string($value) || preg_match('/^[0-9]+(\.[0-9]+)?$/', $value)) { + continue; + } + $value = str_replace(',', '.', str_replace('.', '', $value)); + if (isset($query['conditions'][$field])) { + $query['conditions'][$field] = $value; + } + if (isset($query['conditions'][$useModel->alias . '.' . $field])) { + $query['conditions'][$useModel->alias . '.' . $field] = $value; + } + } + } + } + return $query; + } + +/** + * Before Save + * + * @param object $model + * @return void + * @access public + */ + function beforeSave(&$model) { + $data =& $model->data[$model->alias]; + foreach ($data as $name => $value) { + if (in_array($name, $this->floatFields[$model->alias])) { + if (!is_string($value) || preg_match('/^[0-9]+(\.[0-9]+)?$/', $value)) { + continue; + } + $data[$name] = str_replace(array('.', ','), array('', '.'), $value); + } + } + + return true; + } + + + +/** + * After Find + * + * @param object $model + * @param array $results + * @param boolean $primary + * @return void + * @access public + * @deprecated Isto deve ser feito na view + */ + function afterFind(&$model, $results, $primary) { + foreach ($results as $key => $r) { + if (isset($r[$model->alias]) && is_array($r[$model->alias])) { + foreach (array_keys($r[$model->alias]) as $arrayKey) { + if (in_array($arrayKey, $this->floatFields[$model->alias]) && $r[$model->alias][$arrayKey] !== null) { + $results[$key][$model->alias][$arrayKey] = number_format($r[$model->alias][$arrayKey], 2, ',', '.'); + } + } + } + } + return $results; + } +} diff --git a/app/plugins/cake_ptbr/models/behaviors/correios.php b/app/plugins/cake_ptbr/models/behaviors/correios.php new file mode 100644 index 0000000..09f0a6d --- /dev/null +++ b/app/plugins/cake_ptbr/models/behaviors/correios.php @@ -0,0 +1,215 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +// Tipo de frete +define('CORREIOS_SEDEX', 40010); +define('CORREIOS_SEDEX_A_COBRAR', 40045); +define('CORREIOS_SEDEX_10', 40215); +define('CORREIOS_SEDEX_HOJE', 40290); +define('CORREIOS_E_SEDEX', 81019); +define('CORREIOS_ENCOMENDA_NORMAL', 41017); +define('CORREIOS_PAC', 41106); + +// Erros +define('ERRO_CORREIOS_PARAMETROS_INVALIDOS', -1000); +define('ERRO_CORREIOS_EXCESSO_PESO', -1001); +define('ERRO_CORREIOS_FALHA_COMUNICACAO', -1002); +define('ERRO_CORREIOS_CONTEUDO_INVALIDO', -1003); + +App::import('Core', array('HttpSocket', 'Xml')); + +/** + * CorreiosBehavior + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/behavior-correios + */ +class CorreiosBehavior extends ModelBehavior { + +/** + * Cálculo do valor do frete + * + * @param object $model + * @param integer $servico Código do serviço, ver as defines CORREIOS_* + * @param string $cepOrigem CEP de origem no formato XXXXX-XXX + * @param string $cepDestino CEP de destino no formato XXXXX-XXX + * @param float $peso Peso do pacote, em quilos + * @param boolean $maoPropria Usar recurso de mão própria? + * @param float $valorDeclarado Valor declarado do pacote + * @param boolean $avisoRecebimento Aviso de recebimento? + * @return mixed Array com os dados do frete ou integer com erro. Ver defines ERRO_CORREIOS_* para erros. + * @access public + */ + function valorFrete(&$model, $servico, $cepOrigem, $cepDestino, $peso, $maoPropria = false, $valorDeclarado = 0.0, $avisoRecebimento = false) { + // Validação dos parâmetros + $tipos = array(CORREIOS_SEDEX, CORREIOS_SEDEX_A_COBRAR, CORREIOS_SEDEX_10, CORREIOS_SEDEX_HOJE, CORREIOS_ENCOMENDA_NORMAL); + if (!in_array($servico, $tipos)) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + + if (!$this->_validaCep($cepOrigem) || !$this->_validaCep($cepDestino)) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + if (!is_numeric($peso) || !is_numeric($valorDeclarado)) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + if ($peso > 30.0) { + return ERRO_CORREIOS_EXCESSO_PESO; + } elseif ($peso < 0.0) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + if ($valorDeclarado < 0.0) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + + // Ajustes nos parâmetros + if ($maoPropria) { + $maoPropria = 'S'; + } else { + $maoPropria = 'N'; + } + if ($avisoRecebimento) { + $avisoRecebimento = 'S'; + } else { + $avisoRecebimento = 'N'; + } + + $query = array( + 'resposta' => 'xml', + 'servico' => $servico, + 'cepOrigem' => $cepOrigem, + 'cepDestino' => $cepDestino, + 'peso' => $peso, + 'MaoPropria' => $maoPropria, + 'valorDeclarado' => $valorDeclarado, + 'avisoRecebimento' => $avisoRecebimento + ); + $retornoCorreios = $this->_requisitaUrl('/encomendas/precos/calculo.cfm', 'get', $query); + if (is_integer($retornoCorreios)) { + return $retornoCorreios; + } + $Xml = new Xml($retornoCorreios); + $infoCorreios = $Xml->toArray(); + if (!isset($infoCorreios['CalculoPrecos']['DadosPostais'])) { + return ERRO_CORREIOS_CONTEUDO_INVALIDO; + } + extract($infoCorreios['CalculoPrecos']['DadosPostais']); + return array( + 'ufOrigem' => $uf_origem, + 'ufDestino' => $uf_destino, + 'capitalOrigem' => ($local_origem == 'Capital'), + 'capitalDestino' => ($local_destino == 'Capital'), + 'valorMaoPropria' => $mao_propria, + 'valorTarifaValorDeclarado' => $tarifa_valor_declarado, + 'valorFrete' => ($preco_postal - $tarifa_valor_declarado - $mao_propria), + 'valorTotal' => $preco_postal + ); + } + +/** + * Pegar o endereço de um CEP específico + * + * @param object $model + * @param string $cep CEP no format XXXXX-XXX + * @return mixed Array com os dados do endereço ou interger para erro. Ver defines ERRO_CORREIOS_* para os erros. + * @access public + */ + function endereco(&$model, $cep) { + if (!$this->_validaCep($cep, '-')) { + return ERRO_CORREIOS_PARAMETROS_INVALIDOS; + } + + $data = array( + 'resposta' => 'paginaCorreios', + 'servico' => CORREIOS_SEDEX, + 'cepOrigem' => $cep, + 'cepDestino' => $cep, + 'peso' => 1, + 'MaoPropria' => 'N', + 'valorDeclarado' => 0, + 'avisoRecebimento' => 'N', + 'Altura' => '', + 'Comprimento' => '', + 'Diametro' => '', + 'Formato' => 1, + 'Largura' => '', + 'embalagem' => 116600055, + 'valorD' => '' + ); + $retornoCorreios = $this->_requisitaUrl('/encomendas/prazo/prazo.cfm', 'post', $data); + if (is_integer($retornoCorreios)) { + return $retornoCorreios; + } + + // Convertendo para o encoding da aplicação. Isto só funciona se a extensão multibyte estiver ativa + $encoding = Configure::read('App.encoding'); + if (function_exists('mb_convert_encoding') && $encoding != null && strcasecmp($encoding, 'iso-8859-1') != 0) { + $retornoCorreios = mb_convert_encoding($retornoCorreios, $encoding, 'ISO-8859-1'); + } + // Checar se o conteúdo está lá e reduzir o escopo de busca dos valores + if (!preg_match('/\CEP:\<\/b\>(.*)\Prazo de Entrega/sm', $retornoCorreios, $matches)) { + return ERRO_CORREIOS_CONTEUDO_INVALIDO; + } + $escopoReduzido = $matches[1]; + // Logradouro + preg_match('/\Endereço:\<\/b\>\s*\<\/td\>\s*\]*>([^\<]*)\Bairro:\<\/b\>\s*\<\/td\>\s*\]*>([^\<]*)\Cidade\/UF:\<\/b\>\s*\<\/td\>\s*\]*>([^\<]*)\ 'http', + 'host' => 'www.correios.com.br', + 'port' => 80, + 'path' => $url + ); + if ($method === 'get') { + $uri['query'] = $query; + $retornoCorreios = trim($HttpSocket->get($uri)); + } else { + $retornoCorreios = $HttpSocket->post($uri, $query); + } + if ($HttpSocket->response['status']['code'] != 200) { + return ERRO_CORREIOS_FALHA_COMUNICACAO; + } + return $retornoCorreios; + } + +} diff --git a/app/plugins/cake_ptbr/models/estado_brasileiro.php b/app/plugins/cake_ptbr/models/estado_brasileiro.php new file mode 100644 index 0000000..489383e --- /dev/null +++ b/app/plugins/cake_ptbr/models/estado_brasileiro.php @@ -0,0 +1,216 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * EstadoBrasileiro + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/model-estadobrasileiro + */ +class EstadoBrasileiro extends AppModel { + +/** + * Nome do model + * + * @var string + * @access public + */ + var $name = 'EstadoBrasileiro'; + +/** + * Usar tabela? + * + * @var boolean + * @access public + */ + var $useTable = false; + +/** + * Schema do banco de dados + * + * @var array + * @access protected + */ + var $_schema = array(); + +/** + * Construtor + * + * @param mixed $id + * @param string $table + * @param string $ds + * @access private + */ + function __construct($id = false, $table = null, $ds = null) { + parent::__construct(); + + App::import('Vendor', 'CakePtbr.Estados'); + $this->_estados = Estados::lista(); + } + +/** + * Find + * + * @param array $conditions + * @param mixed $fields + * @param string $order + * @param integer $recursive + * @return array + * @access public + */ + + function find($conditions = null, $fields = array(), $order = null, $recursive = null) { + if (is_string($conditions)) { + switch ($conditions) { + case 'list': + return $this->listaEstados(); + case 'all': + return $this->todosEstados(); + } + } + return false; + } + +/** + * Lista dos estados na forma do list + * + * @param boolean $incluirDF Incluir Distrito Federal na lista? + * @return array Lista dos estados + * @access public + */ + function listaEstados($incluirDF = true) { + if ($incluirDF) { + return $this->_estados; + } + $estados = $this->_estados; + unset($estados['DF']); + return $estados; + } + +/** + * Lista dos estados na forma do find + * + * @param boolean $incluirDF Incluir Distrito Federal na lista? + * @return array Lista dos estados + * @access public + */ + function todosEstados($incluirDF = true) { + $estados = array('EstadoBrasileiro' => array()); + foreach ($this->_estados as $sigla => $nome) { + if (!$incluirDF && $sigla === 'DF') { + continue; + } + $estados['EstadoBrasileiro'][] = array( + 'sigla' => $sigla, + 'nome' => $nome + ); + } + return $estados; + } + +/** + * Nome do estado conforme a sigla + * + * @param string $sigla Sigla do estado + * @return string Nome do estado. False quando sigla for inválida + * @access public + */ + function estadoPorSigla($sigla) { + if (isset($this->_estados[$sigla])) { + return $this->_estados[$sigla]; + } + return false; + } + +/** + * Sigla do estado conforme o nome + * + * @param string $estado + * @return string Sigla do estado. False quando estado for inválido + * @access public + */ + function siglaPorEstado($estado) { + if ($sigla = array_search($estado, $this->_estados)) { + return $sigla; + } + return false; + } + +/** + * Lista dos estados do sul + * + * @return array Lista dos estados do sul + * @access public + */ + function estadosDoSul() { + return $this->_estadosPorRegiao(array('PR', 'RS', 'SC')); + } + +/** + * Lista dos estados do sudeste + * + * @return array Lista dos estados do sudeste + * @access public + */ + function estadosDoSudeste() { + return $this->_estadosPorRegiao(array('ES', 'MG', 'RJ', 'SP')); + } + +/** + * Lista dos estados do centro oeste + * + * @param boolean $incluirDF Incluir Distrito Federal? + * @return array Lista dos estados do centro oeste + * @access public + */ + function estadosDoCentroOeste($incluirDF = true) { + if ($incluirDF) { + return $this->_estadosPorRegiao(array('DF', 'GO', 'MT', 'MS')); + } + return $this->_estadosPorRegiao(array('GO', 'MT', 'MS')); + } + +/** + * Lista dos estados do norte + * + * @return array Lista dos estados do norte + * @access public + */ + function estadosDoNorte() { + return $this->_estadosPorRegiao(array('AC', 'AP', 'AM', 'PA', 'RO', 'RR', 'TO')); + } + +/** + * Lista dos estados do norteste + * + * @return array Lista dos estados do norteste + * @access public + */ + function estadosDoNordeste() { + return $this->_estadosPorRegiao(array('AL', 'BA', 'CE', 'MA', 'PB', 'PI', 'PE', 'RN', 'SE')); + } + +/** + * Método auxiliar para pegar os estados + * + * @param array $estados Listas dos estados que deseja filtrar + * @return array Lista dos estados + * @access protected + */ + function _estadosPorRegiao($estados) { + $retorno = array(); + foreach ($estados as $estado) { + $retorno[$estado] = $this->_estados[$estado]; + } + return $retorno; + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/config/i18n.test.php b/app/plugins/cake_ptbr/tests/cases/config/i18n.test.php new file mode 100644 index 0000000..125f410 --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/config/i18n.test.php @@ -0,0 +1,63 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +include dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'config' . DS . 'traducao_core.php'; + +/** + * I18n Test Case + * + */ +class CakePtbrI18nCase extends CakeTestCase { + +/** + * testCore + * + * @retun void + * @access public + */ + function testCore() { + $this->assertEqual(__('Missing Component File', true), 'Arquivo de Component não encontrado'); + $this->assertEqual(__d('default', 'Missing Database', true), 'Database não encontrado'); + } + +/** + * testTimeDefinition + * + * @retun void + * @access public + */ + function testTimeDefinition() { + $result = __c('abday', 5, true); + $expected = array('Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'); + $this->assertEqual($result, $expected); + + $result = __c('day', 5, true); + $expected = array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'); + $this->assertEqual($result, $expected); + + $result = __c('abmon', 5, true); + $expected = array('Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'); + $this->assertEqual($result, $expected); + + $result = __c('mon', 5, true); + $expected = array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); + $this->assertEqual($result, $expected); + + $result = __c('d_fmt', 5, true); + $expected = '%d/%m/%Y'; + $this->assertEqual($result, $expected); + + $result = __c('am_pm', 5, true); + $expected = array('AM', 'PM'); + $this->assertEqual($result, $expected); + } +} diff --git a/app/plugins/cake_ptbr/tests/cases/config/inflections.test.php b/app/plugins/cake_ptbr/tests/cases/config/inflections.test.php new file mode 100644 index 0000000..4363a88 --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/config/inflections.test.php @@ -0,0 +1,110 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +include dirname(dirname(dirname(dirname(__FILE__)))) . DS . 'config' . DS . 'inflections.php'; + +/** + * Inflections Test Case + * + */ +class CakePtbrInflectionsCase extends CakeTestCase { + +/** + * testPlural + * + * @retun void + * @access public + */ + function testPlural() { + $this->assertEqual(Inflector::pluralize('Compra'), 'Compras'); + $this->assertEqual(Inflector::pluralize('Caminhao'), 'Caminhoes'); + $this->assertEqual(Inflector::pluralize('Motor'), 'Motores'); + $this->assertEqual(Inflector::pluralize('Bordel'), 'Bordeis'); + $this->assertEqual(Inflector::pluralize('palavra_chave'), 'palavra_chaves'); + $this->assertEqual(Inflector::pluralize('Abril'), 'Abris'); + $this->assertEqual(Inflector::pluralize('Azul'), 'Azuis'); + $this->assertEqual(Inflector::pluralize('Alcool'), 'Alcoois'); + // irregulares + $this->assertEqual(Inflector::pluralize('Perfil'), 'Perfis'); + $this->assertEqual(Inflector::pluralize('Alemao'), 'Alemaes'); + $this->assertEqual(Inflector::pluralize('Mao'), 'Maos'); + $this->assertEqual(Inflector::pluralize('Cao'), 'Caes'); + $this->assertEqual(Inflector::pluralize('Reptil'), 'Repteis'); + $this->assertEqual(Inflector::pluralize('Sotao'), 'Sotaos'); + $this->assertEqual(Inflector::pluralize('Pais'), 'Paises'); + $this->assertEqual(Inflector::pluralize('Pai'), 'Pais'); + } + +/** + * testSingular + * + * @retun void + * @access public + */ + function testSingular() { + $this->assertEqual(Inflector::singularize('Compras'), 'Compra'); + $this->assertEqual(Inflector::singularize('Caminhoes'), 'Caminhao'); + $this->assertEqual(Inflector::singularize('Motores'), 'Motor'); + $this->assertEqual(Inflector::singularize('Bordeis'), 'Bordel'); + $this->assertEqual(Inflector::singularize('palavras_chaves'), 'palavras_chave'); + $this->assertEqual(Inflector::singularize('Abris'), 'Abril'); + $this->assertEqual(Inflector::singularize('Azuis'), 'Azul'); + $this->assertEqual(Inflector::singularize('Alcoois'), 'Alcool'); + // irregulares + $this->assertEqual(Inflector::singularize('Perfis'), 'Perfil'); + $this->assertEqual(Inflector::singularize('Alemaes'), 'Alemao'); + $this->assertEqual(Inflector::singularize('Maos'), 'Mao'); + $this->assertEqual(Inflector::singularize('Caes'), 'Cao'); + $this->assertEqual(Inflector::singularize('Repteis'), 'Reptil'); + $this->assertEqual(Inflector::singularize('Sotaos'), 'Sotao'); + $this->assertEqual(Inflector::singularize('Paises'), 'Pais'); + $this->assertEqual(Inflector::singularize('Pais'), 'Pai'); + } + +/** + * testNaoPluralizaveis + * + * @retun void + * @access public + */ + function testNaoPluralizaveis() { + // singularize + $this->assertEqual(Inflector::singularize('Atlas'), 'Atlas'); + $this->assertEqual(Inflector::singularize('Lapis'), 'Lapis'); + $this->assertEqual(Inflector::singularize('Onibus'), 'Onibus'); + $this->assertEqual(Inflector::singularize('Pires'), 'Pires'); + $this->assertEqual(Inflector::singularize('Virus'), 'Virus'); + $this->assertEqual(Inflector::singularize('Torax'), 'Torax'); + // pluralize + $this->assertEqual(Inflector::pluralize('Atlas'), 'Atlas'); + $this->assertEqual(Inflector::pluralize('Lapis'), 'Lapis'); + $this->assertEqual(Inflector::pluralize('Onibus'), 'Onibus'); + $this->assertEqual(Inflector::pluralize('Pires'), 'Pires'); + $this->assertEqual(Inflector::pluralize('Virus'), 'Virus'); + $this->assertEqual(Inflector::pluralize('Torax'), 'Torax'); + } + +/** + * testSlug + * + * @retun void + * @access public + */ + function testSlug() { + $this->assertEqual(Inflector::slug('João'), 'Joao'); + $this->assertEqual(Inflector::slug('Conseqüência'), 'Consequencia'); + $this->assertEqual(Inflector::slug('Linguiça não útil água'), 'Linguica_nao_util_agua'); + $this->assertEqual(Inflector::slug('ÃÓ&'), 'AOe'); + $this->assertEqual(Inflector::slug('äü au Sandoval'), 'au_au_Sandoval'); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_data.test.php b/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_data.test.php new file mode 100644 index 0000000..ec28ca9 --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_data.test.php @@ -0,0 +1,298 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Core', 'Model'); +App::import('Behavior', 'CakePtbr.AjusteData'); + +/** + * CakePtbrNoticia + * + */ +class CakePtbrNoticia extends Model { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'Noticia'; + +/** + * Usar tabela? + * + * @var boolean + * @access public + */ + var $useTable = false; + +/** + * Exists + * + * @return boolean + * @access public + */ + function exists() { + return true; + } +} + +/** + * CakePtbrNoticiaSemNada + * + */ +class CakePtbrNoticiaSemNada extends CakePtbrNoticia { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbrNoticiaSemNada'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteData'); + +} + +/** + * CakePtbrNoticiaString + * + */ +class CakePtbrNoticiaString extends CakePtbrNoticia { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbrNoticiaString'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteData' => 'data'); + +} + +/** + * CakePtbrNoticiaArrayVazio + * + */ +class CakePtbrNoticiaArrayVazio extends CakePtbrNoticia { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbrNoticiaArrayVazio'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteData' => array()); + +} + +/** + * CakePtbrNoticiaArrayComCampo + * + */ +class CakePtbrNoticiaArrayComCampo extends CakePtbrNoticia { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbrNoticiaArrayComCampo'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteData' => array('data')); + +} + +/** + * CakePtbrNoticiaArrayComCampos + * + */ +class CakePtbrNoticiaArrayComCampos extends CakePtbrNoticia { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbrNoticiaArrayComCampos'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteData' => array('data', 'publicado')); +} + +/** + * AjusteData Test Case + * + */ +class CakePtbrAjusteData extends CakeTestCase { + +/** + * Envio + * + * @var array + * @access protected + */ + var $_envio = array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '20/03/2009', + 'data_falsa' => '30/01/2009', + 'publicado' => '01/01/2010' + ); + +/** + * testSemNada + * + * @retun void + * @access public + */ + function testSemNada() { + $esperado = array( + 'CakePtbrNoticiaSemNada' => array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '20/03/2009', + 'data_falsa' => '30/01/2009', + 'publicado' => '01/01/2010' + ) + ); + $this->_testModel('CakePtbrNoticiaSemNada', $esperado); + } + +/** + * testString + * + * @retun void + * @access public + */ + function testString() { + $esperado = array( + 'CakePtbrNoticiaString' => array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '2009-03-20', + 'data_falsa' => '30/01/2009', + 'publicado' => '01/01/2010' + ) + ); + $this->_testModel('CakePtbrNoticiaString', $esperado); + } + +/** + * testArrayVazio + * + * @retun void + * @access public + */ + function testArrayVazio() { + $esperado = array( + 'CakePtbrNoticiaArrayVazio' => array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '20/03/2009', + 'data_falsa' => '30/01/2009', + 'publicado' => '01/01/2010' + ) + ); + $this->_testModel('CakePtbrNoticiaArrayVazio', $esperado); + } + +/** + * testArrayComCampo + * + * @retun void + * @access public + */ + function testArrayComCampo() { + $esperado = array( + 'CakePtbrNoticiaArrayComCampo' => array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '2009-03-20', + 'data_falsa' => '30/01/2009', + 'publicado' => '01/01/2010' + ) + ); + $this->_testModel('CakePtbrNoticiaArrayComCampo', $esperado); + } + +/** + * testArrayComCampos + * + * @retun void + * @access public + */ + function testArrayComCampos() { + $esperado = array( + 'CakePtbrNoticiaArrayComCampos' => array( + 'id' => 1, + 'nome' => 'Teste', + 'data' => '2009-03-20', + 'data_falsa' => '30/01/2009', + 'publicado' => '2010-01-01' + ) + ); + $this->_testModel('CakePtbrNoticiaArrayComCampos', $esperado); + } + +/** + * Método auxiliar para executar os testes + * + * @param string $nomeModel Nome da model + * @param array $esperado Valor esperado + * @retun void + * @access protected + */ + function _testModel($nomeModel, $esperado) { + $Model = new $nomeModel(); + $Model->create(); + $Model->save(array($nomeModel => $this->_envio)); + $this->assertEqual($Model->data, $esperado); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_float.test.php b/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_float.test.php new file mode 100644 index 0000000..4319efb --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/models/behaviors/ajuste_float.test.php @@ -0,0 +1,213 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Core', 'Model'); +App::import('Behavior', 'CakePtbr.AjusteFloat'); + +/** + * Produto + * + */ +class Produto extends CakeTestModel { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'Produto'; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.AjusteFloat'); + +/** + * Executa o beforeFind dos behaviors + * + * @param array $query + * @return mixed + * @access public + */ + function beforeFindBehaviors($query) { + return $this->Behaviors->trigger($this, 'beforeFind', array($query), array( + 'break' => true, 'breakOn' => false, 'modParams' => true + )); + } +} + +/** + * AjusteFloat Test Case + * + */ +class CakePtbrAjusteFloat extends CakeTestCase { + +/** + * Fixtures + * + * @var array + * @access public + */ + var $fixtures = array('plugin.cake_ptbr.produto'); + +/** + * Produto + * + * @var object + * @access public + */ + var $Produto = null; + +/** + * startTest + * + * @retun void + * @access public + */ + function startTest() { + $this->Produto =& ClassRegistry::init('Produto'); + } + +/** + * testFind + * + * @retun void + * @access public + */ + function testFind() { + $result = $this->Produto->find('all'); + $expected = array( + array( + 'Produto' => array( + 'id' => 1, + 'nome' => 'Produto 1', + 'valor' => '1,99' + ) + ), + array( + 'Produto' => array( + 'id' => 2, + 'nome' => 'Produto 2', + 'valor' => '1.000,20' + ) + ), + array( + 'Produto' => array( + 'id' => 3, + 'nome' => 'Produto 3', + 'valor' => '1.999.000,00' + ) + ) + ); + $this->assertEqual($result, $expected); + } + +/** + * testBeforeFind + * + * @return void + * @access public + */ + function testBeforeFind() { + $query = array( + 'conditions' => array( + 'Produto.nome' => '1.000,00', + 'Produto.valor' => '1.500,03' + ) + ); + $expected = array( + 'conditions' => array( + 'Produto.nome' => '1.000,00', + 'Produto.valor' => '1500.03' + ) + ); + $result = $this->Produto->beforeFindBehaviors($query); + $this->assertEqual($result, $expected); + + $query = array( + 'conditions' => array( + 'Produto.nome' => '1.000,00', + 'Produto.valor' => '1500.03' + ) + ); + $result = $this->Produto->beforeFindBehaviors($query); + $this->assertEqual($result, $expected); + + $query = array( + 'conditions' => array( + 'Produto.nome' => '1.000,00', + 'Produto.valor' => 1500.03 + ) + ); + $result = $this->Produto->beforeFindBehaviors($query); + $this->assertEqual($result, $expected); + } + +/** + * testeBeforeValidate + * + * @return void + * @access public + */ + function testBeforeValidate() { + $this->Produto->validate = array( + 'valor' => 'decimal' + ); + + $query = array('Produto' => array('valor' => 10.1)); + $this->Produto->set($query); + $this->assertTrue($this->Produto->validates()); + + $query = array('Produto' => array('valor' => '10.1')); + $this->Produto->set($query); + $this->assertTrue($this->Produto->validates()); + + $query = array('Produto' => array('valor' => '10.000,01')); + $this->Produto->set($query); + $this->assertTrue($this->Produto->validates()); + $this->assertEqual($this->Produto->data['Produto']['valor'], 10000.01); + + $this->Produto->validate = array(); + } + +/** + * testSave + * + * @retun void + * @access public + */ + function testSave() { + $data = array( + 'Produto' => array( + 'nome' => 'Produto 4', + 'valor' => '5.000,00' + ) + ); + $this->Produto->create(); + $this->assertTrue($this->Produto->save($data)); + + $id = $this->Produto->getInsertId(); + $data['Produto']['id'] = $id; + $result = $this->Produto->read(null, $id); + $this->assertEqual($data, $result); + + $result = $this->Produto->read(array('valor'), $id); + $this->assertEqual(array('Produto' => array('valor' => '5.000,00')), $result); + + $result = $this->Produto->read(array('nome'), $id); // Verificar se dá erro quando não vem o campo + $this->assertEqual(array('Produto' => array('nome' => 'Produto 4')), $result); + } +} diff --git a/app/plugins/cake_ptbr/tests/cases/models/behaviors/correios.test.php b/app/plugins/cake_ptbr/tests/cases/models/behaviors/correios.test.php new file mode 100644 index 0000000..4b3774d --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/models/behaviors/correios.test.php @@ -0,0 +1,266 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Core', 'Model'); +App::import('Behavior', 'CakePtbr.Correios'); + +Mock::generatePartial( + 'CorreiosBehavior', 'MockCorreiosBehavior', + array('_requisitaUrl') +); + +/** + * CakePtbr + * + */ +class CakePtbr extends Model { + +/** + * Nome da model + * + * @var string + * @access public + */ + var $name = 'CakePtbr'; + +/** + * Usar tabela? + * + * @var boolean + * @access public + */ + var $useTable = false; + +/** + * Lista de Behaviors + * + * @var array + * @access public + */ + var $actsAs = array('CakePtbr.Correios'); +} + +/** + * Correios Test Case + * + */ +class CakePtbrCorreiosCase extends CakeTestCase { + +/** + * Correios + * + * @var object + * @access public + */ + var $Correios = null; + +/** + * setUp + * + * @retun void + * @access public + */ + function setUp() { + parent::setUp(); + $this->Correios = new MockCorreiosBehavior(); + } + +/** + * testValorFrete + * + * @retun void + * @access public + */ + function testValorFrete() { + $model = null; + + $this->Correios->setReturnValueAt(0, '_requisitaUrl', ERRO_CORREIOS_FALHA_COMUNICACAO); + $this->assertNotEqual($this->Correios->valorFrete($model, CORREIOS_SEDEX, '88000-000', '88888-000', 10), ERRO_CORREIOS_PARAMETROS_INVALIDOS); + $this->assertEqual($this->Correios->valorFrete($model, 40000, '88000-000', '88888-000', 10), ERRO_CORREIOS_PARAMETROS_INVALIDOS); + $this->assertEqual($this->Correios->valorFrete($model, CORREIOS_SEDEX, '88000-000', '88888-000', 'peso'), ERRO_CORREIOS_PARAMETROS_INVALIDOS); + $this->assertEqual($this->Correios->valorFrete($model, CORREIOS_SEDEX, '88000-000', '88888-000', -12), ERRO_CORREIOS_PARAMETROS_INVALIDOS); + $this->assertEqual($this->Correios->valorFrete($model, CORREIOS_SEDEX, '88000-000', '88888-000', 10, true, -10), ERRO_CORREIOS_PARAMETROS_INVALIDOS); + $this->assertEqual($this->Correios->valorFrete($model, CORREIOS_SEDEX, '88000-000', '88888-000', 30.5), ERRO_CORREIOS_EXCESSO_PESO); + + $retorno = << + +1.0 + +40010 +SEDEX +SC +Capital +88037100 +SC +Capital +88037100 +10 +3.5 +0 +30 +0 +26.9 + + +0 + + + +EOF; + $this->Correios->setReturnValueAt(1, '_requisitaUrl', $retorno); + $correios = $this->Correios->valorFrete($model, CORREIOS_SEDEX, '88037-100', '88037-100', 10, true, 30, false); + $correto = array( + 'ufOrigem' => 'SC', + 'ufDestino' => 'SC', + 'capitalOrigem' => true, + 'capitalDestino' => true, + 'valorMaoPropria' => 3.5, + 'valorTarifaValorDeclarado' => 0, + 'valorFrete' => 23.4, + 'valorTotal' => 26.9 + ); + $this->assertEqual($correios, $correto); + } + +/** + * testEndereco + * + * @retun void + * @access public + */ + function testEndereco() { + $retorno = << + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 OrigemDestino
+CEP: +8803710088037100
+Endereço: +Rua Acadêmico Reinaldo ConsoniRua Acadêmico Reinaldo Consoni
+Bairro: +Santa MônicaSanta Mônica
+Cidade/UF: +Florianópolis/SCFlorianópolis/SC
+Prazo de Entrega: + +1 DIA ÚTIL   +
+Valor do Frete: + +R$ 11,80 +
+Serviços Opcionais + +Aviso de Recebimento
+Mão Própria
+Valor Declarado
+Caixa Encomenda 01 (18x13,5x9 cm): R$ 2,00 +
+Valor Total: + +R$ 13,80 +
+Localidade de origem com DISQUE COLETA. Clique aqui para solicitar a coleta de sua encomenda. +
+
+Clique aqui para saber mais sobre o SEDEX. +
+

+O preço desta pesquisa é meramente informativo, devendo ser confirmado no ato da postagem +

+
+ +
+ +EOF; + $this->Correios->setReturnValueAt(0, '_requisitaUrl', utf8_decode($retorno)); + $correios = $this->Correios->endereco($model, '88037-100'); + $correto = array( + 'logradouro' => 'Rua Acadêmico Reinaldo Consoni', + 'bairro' => 'Santa Mônica', + 'cidade' => 'Florianópolis', + 'uf' => 'SC' + ); + $this->assertEqual($correios, $correto); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/models/estado_brasileiro.test.php b/app/plugins/cake_ptbr/tests/cases/models/estado_brasileiro.test.php new file mode 100644 index 0000000..1dd4e27 --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/models/estado_brasileiro.test.php @@ -0,0 +1,232 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Model', 'CakePtbr.EstadoBrasileiro'); + +/** + * EstadoBrasileiro Test Case + * + */ +class EstadoBrasileiroTestCase extends CakeTestCase { + +/** + * EstadoBrasileiro + * + * @var object + * @access public + */ + var $EstadoBrasileiro = null; + +/** + * start + * + * @retun void + * @access public + */ + function start() { + parent::start(); + $this->EstadoBrasileiro = new EstadoBrasileiro(); + } + +/** + * testInstance + * + * @retun void + * @access public + */ + function testInstance() { + $this->assertTrue(is_a($this->EstadoBrasileiro, 'EstadoBrasileiro')); + } + +/** + * testFind + * + * @retun void + * @access public + */ + function testFind() { + $results = $this->EstadoBrasileiro->find('list'); + $this->assertEqual(count($results), 27); + + $results = $this->EstadoBrasileiro->find('all'); + $this->assertTrue(is_array($results['EstadoBrasileiro'])); + $this->assertEqual(count($results['EstadoBrasileiro']), 27); + + $results = $this->EstadoBrasileiro->find('first'); + $this->assertFalse($results); + } + +/** + * testListaEstados + * + * @retun void + * @access public + */ + function testListaEstados() { + $results = $this->EstadoBrasileiro->listaEstados(); + $this->assertEqual(count($results), 27); + $this->assertEqual($results, $this->EstadoBrasileiro->find('list')); + $this->assertTrue(isset($results['DF'])); + + $results = $this->EstadoBrasileiro->listaEstados(false); + $this->assertEqual(count($results), 26); + $this->assertFalse(isset($results['DF'])); + } + +/** + * testTodosEstados + * + * @retun void + * @access public + */ + function testTodosEstados() { + $results = $this->EstadoBrasileiro->todosEstados(); + $this->assertTrue(is_array($results['EstadoBrasileiro'])); + $this->assertEqual(count($results['EstadoBrasileiro']), 27); + $this->assertEqual($results, $this->EstadoBrasileiro->find('all')); + + $results = $this->EstadoBrasileiro->todosEstados(false); + $this->assertTrue(is_array($results['EstadoBrasileiro'])); + $this->assertEqual(count($results['EstadoBrasileiro']), 26); + } + +/** + * testEstadoPorSigla + * + * @retun void + * @access public + */ + function testEstadoPorSigla() { + $results = $this->EstadoBrasileiro->estadoPorSigla('SC'); + $this->assertEqual($results, 'Santa Catarina'); + + $results = $this->EstadoBrasileiro->estadoPorSigla('SP'); + $this->assertEqual($results, 'São Paulo'); + + $results = $this->EstadoBrasileiro->estadoPorSigla('XX'); + $this->assertIdentical($results, false); + } + +/** + * testSiglaPorEstado + * + * @retun void + * @access public + */ + function testSiglaPorEstado() { + $results = $this->EstadoBrasileiro->siglaPorEstado('Santa Catarina'); + $this->assertEqual($results, 'SC'); + + $results = $this->EstadoBrasileiro->siglaPorEstado('São Paulo'); + $this->assertEqual($results, 'SP'); + + $results = $this->EstadoBrasileiro->siglaPorEstado('Sao Paulo'); + $this->assertFalse($results); + } + +/** + * testEstadosDoSul + * + * @retun void + * @access public + */ + function testEstadosDoSul() { + $results = $this->EstadoBrasileiro->estadosDoSul(); + $expected = array( + 'PR' => 'Paraná', + 'RS' => 'Rio Grande do Sul', + 'SC' => 'Santa Catarina' + ); + $this->assertEqual($results, $expected); + } + +/** + * testEstadosDoSudeste + * + * @retun void + * @access public + */ + function testEstadosDoSudeste() { + $results = $this->EstadoBrasileiro->estadosDoSudeste(); + $expected = array( + 'ES' => 'Espírito Santo', + 'MG' => 'Minas Gerais', + 'RJ' => 'Rio de Janeiro', + 'SP' => 'São Paulo' + ); + $this->assertEqual($results, $expected); + } + +/** + * testEstadosDoCentroOeste + * + * @retun void + * @access public + */ + function testEstadosDoCentroOeste() { + $results = $this->EstadoBrasileiro->estadosDoCentroOeste(); + $expected = array( + 'DF' => 'Distrito Federal', + 'GO' => 'Goiás', + 'MT' => 'Mato Grosso', + 'MS' => 'Mato Grosso do Sul' + ); + $this->assertEqual($results, $expected); + + $results = $this->EstadoBrasileiro->estadosDoCentroOeste(false); + unset($expected['DF']); + $this->assertEqual($results, $expected); + } + +/** + * testEstadosDoNorte + * + * @retun void + * @access public + */ + function testEstadosDoNorte() { + $results = $this->EstadoBrasileiro->estadosDoNorte(); + $expected = array( + 'AC' => 'Acre', + 'AP' => 'Amapá', + 'AM' => 'Amazonas', + 'PA' => 'Pará', + 'RO' => 'Rondônia', + 'RR' => 'Roraima', + 'TO' => 'Tocantins' + ); + $this->assertEqual($results, $expected); + } + +/** + * testEstadosDoNordeste + * + * @retun void + * @access public + */ + function testEstadosDoNordeste() { + $results = $this->EstadoBrasileiro->estadosDoNordeste(); + $expected = array( + 'AL' => 'Alagoas', + 'BA' => 'Bahia', + 'CE' => 'Ceará', + 'MA' => 'Maranhão', + 'PB' => 'Paraíba', + 'PI' => 'Piauí', + 'PE' => 'Pernambuco', + 'RN' => 'Rio Grande do Norte', + 'SE' => 'Sergipe' + ); + $this->assertEqual($results, $expected); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/vendors/shells/templates/default/inflexao.test.php b/app/plugins/cake_ptbr/tests/cases/vendors/shells/templates/default/inflexao.test.php new file mode 100644 index 0000000..70806a2 --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/vendors/shells/templates/default/inflexao.test.php @@ -0,0 +1,39 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +require dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))) . DS . 'vendors' . DS . 'shells' . DS . 'templates' . DS . 'default' . DS . 'inflexao.php'; + +/** + * Inflexao + * + */ +class InflexaoTest extends CakeTestCase { + +/** + * testAcentos + * + * @retun void + * @access public + */ + function testAcentos() { + $this->assertEqual('caminhão', Inflexao::acentos('caminhao')); + $this->assertEqual('Pão', Inflexao::acentos('Pao')); + $this->assertEqual('canção', Inflexao::acentos('cancao')); + $this->assertEqual('canções', Inflexao::acentos('cancoes')); + $this->assertEqual('limões', Inflexao::acentos('limoes')); + $this->assertEqual('mães', Inflexao::acentos('maes')); + + $this->assertEqual('joão do caminhão', Inflexao::acentos('joao do caminhao')); + $this->assertEqual('joão_do_caminhão', Inflexao::acentos('joao_do_caminhao')); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/views/helpers/estados.test.php b/app/plugins/cake_ptbr/tests/cases/views/helpers/estados.test.php new file mode 100644 index 0000000..c70054f --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/views/helpers/estados.test.php @@ -0,0 +1,106 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Helper', array('CakePtbr.Estados', 'Form', 'Html')); +App::import('Vendor', 'CakePtbr.Estados'); + +/** + * Controller Test + * + */ +class ControllerTestController extends Controller { + +/** + * Nome do controller + * + * @var string + * @access public + */ + var $name = 'ControllerTest'; + +/** + * Uses + * + * @var array + * @access public + */ + var $uses = null; +} + +/** + * Estado Test Case + * + */ +class CakePtbrEstadosCase extends CakeTestCase { + +/** + * Estados + * + * @var object + * @access public + */ + var $Estados = null; + +/** + * Lista dos estados + * + * @var string + * @access public + */ + var $listaEstados; + +/** + * setUp + * + * @retun void + * @access public + */ + function setUp() { + parent::setUp(); + $this->Estados =& new EstadosHelper(); + $this->Estados->Form =& new FormHelper(); + $this->Estados->Form->Html =& new HtmlHelper(); + $this->Controller =& new ControllerTestController(); + $this->View =& new View($this->Controller); + + $this->listaEstados = Estados::lista(); + } + +/** + * testSelect + * + * @retun void + * @access public + */ + function testSelect() { + $expected = array('select' => array('name' => 'data[Model][uf]', 'id' => 'ModelUf')); + foreach ($this->listaEstados as $sigla => $nome) { + $expected[] = array('option' => array('value' => $sigla)); + $expected[] = $nome; + $expected[] = '/option'; + } + $expected[] = '/select'; + $result = $this->Estados->select('Model.uf'); + $this->assertTags($result, $expected); + + $expected = array('select' => array('name' => 'data[Model][uf]', 'id' => 'ModelUf')); + foreach ($this->listaEstados as $sigla => $nome) { + $expected[] = array('option' => array('value' => $sigla)); + $expected[] = $sigla; + $expected[] = '/option'; + } + $expected[] = '/select'; + $result = $this->Estados->select('Model.uf', null, array('uf' => true)); + $this->assertTags($result, $expected); + } + +} diff --git a/app/plugins/cake_ptbr/tests/cases/views/helpers/formatacao.test.php b/app/plugins/cake_ptbr/tests/cases/views/helpers/formatacao.test.php new file mode 100644 index 0000000..9d7fabb --- /dev/null +++ b/app/plugins/cake_ptbr/tests/cases/views/helpers/formatacao.test.php @@ -0,0 +1,172 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +App::import('Helper', array('CakePtbr.Formatacao', 'Time', 'Number')); + +/** + * Formatacao Test Case + * + */ +class CakePtbrFormatacaoCase extends CakeTestCase { + +/** + * Formatação + * + * @var object + * @access public + */ + var $Formatacao = null; + +/** + * setUp + * + * @retun void + * @access public + */ + function setUp() { + parent::setUp(); + $this->Formatacao = new FormatacaoHelper(); + $this->Formatacao->Time = new TimeHelper(); + $this->Formatacao->Number = new NumberHelper(); + } + +/** + * testData + * + * @retun void + * @access public + */ + function testData() { + $this->assertEqual($this->Formatacao->data(), date('d/m/Y')); + $this->assertEqual($this->Formatacao->data(strtotime('2009-04-21')), '21/04/2009'); + $this->assertEqual($this->Formatacao->data('2009-04-21'), '21/04/2009'); + $this->assertEqual($this->Formatacao->data('errado', array('invalid' => 'Inválido')), 'Inválido'); + $this->assertEqual($this->Formatacao->data(strtotime('2009-04-21 00:00:00 GMT'), array('userOffset' => '-1')), '20/04/2009'); + $this->assertEqual($this->Formatacao->data('2009-04-21 00:00:00 GMT', array('userOffset' => '-1')), '20/04/2009'); + } + +/** + * testDataHora + * + * @retun void + * @access public + */ + function testDataHora() { + $this->assertEqual($this->Formatacao->dataHora(), date('d/m/Y H:i:s')); + $this->assertEqual($this->Formatacao->dataHora(null, false), date('d/m/Y H:i')); + $this->assertEqual($this->Formatacao->dataHora(strtotime('2009-04-21 10:20:30')), '21/04/2009 10:20:30'); + $this->assertEqual($this->Formatacao->dataHora(strtotime('2009-04-21 10:20:30'), false), '21/04/2009 10:20'); + $this->assertEqual($this->Formatacao->dataHora('2009-04-21 10:20:30', false), '21/04/2009 10:20'); + $this->assertEqual($this->Formatacao->dataHora('errado', true, array('invalid' => 'Inválido')), 'Inválido'); + $this->assertEqual($this->Formatacao->dataHora(strtotime('2009-04-21 10:20:30 GMT'), false, array('userOffset' => '+2')), '21/04/2009 12:20'); + $this->assertEqual($this->Formatacao->dataHora(strtotime('2009-04-21 10:20:30 GMT'), false, array('userOffset' => '-2')), '21/04/2009 08:20'); + $this->assertEqual($this->Formatacao->dataHora('2009-04-21 10:20:30 GMT', false, array('userOffset' => '-2')), '21/04/2009 08:20'); + } + +/** + * testDataCompleta + * + * @retun void + * @access public + */ + function testDataCompleta() { + $this->assertEqual($this->Formatacao->dataCompleta(strtotime('2009-04-21 10:20:30')), 'Terça-feira, 21 de Abril de 2009, 10:20:30'); + $this->assertEqual($this->Formatacao->dataCompleta('2009-04-21 10:20:30'), 'Terça-feira, 21 de Abril de 2009, 10:20:30'); + } + +/** + * testTempo + * + * @return void + * @access public + */ + function testTempo() { + $this->assertEqual($this->Formatacao->tempo(), 'menos de 1 minuto'); + $this->assertEqual($this->Formatacao->tempo(strtotime('-1 hour')), '1 hora'); + $this->assertEqual($this->Formatacao->tempo('-1 hour'), '1 hora'); + } + +/** + * testPrecisao + * + * @retun void + * @access public + */ + function testPrecisao() { + $this->assertIdentical($this->Formatacao->precisao(-10), '-10,000'); + $this->assertIdentical($this->Formatacao->precisao(0), '0,000'); + $this->assertIdentical($this->Formatacao->precisao(10), '10,000'); + $this->assertIdentical($this->Formatacao->precisao(10.323), '10,323'); + $this->assertIdentical($this->Formatacao->precisao(10.56486), '10,565'); + $this->assertIdentical($this->Formatacao->precisao(10.56486, 2), '10,56'); + $this->assertIdentical($this->Formatacao->precisao(10.56486, 0), '11'); + } + +/** + * testPorcentagem + * + * @retun void + * @access public + */ + function testPorcentagem() { + $this->assertEqual($this->Formatacao->porcentagem(-10), '-10,00%'); + $this->assertEqual($this->Formatacao->porcentagem(0), '0,00%'); + $this->assertEqual($this->Formatacao->porcentagem(10), '10,00%'); + $this->assertEqual($this->Formatacao->porcentagem(10, 1), '10,0%'); + $this->assertEqual($this->Formatacao->porcentagem(10.123), '10,12%'); + $this->assertEqual($this->Formatacao->porcentagem(10, 0), '10%'); + } + +/** + * testMoeda + * + * @retun void + * @access public + */ + function testMoeda() { + $this->assertEqual($this->Formatacao->moeda(-10), '(R$ 10,00)'); + $this->assertEqual($this->Formatacao->moeda(-10.12), '(R$ 10,12)'); + $this->assertEqual($this->Formatacao->moeda(-0.12), '(R$ 0,12)'); + $this->assertEqual($this->Formatacao->moeda(-0.12, array('negative' => '-')), 'R$ -0,12'); + $this->assertEqual($this->Formatacao->moeda(0), 'R$ 0,00'); + $this->assertEqual($this->Formatacao->moeda(0.5), 'R$ 0,50'); + $this->assertEqual($this->Formatacao->moeda(0.52), 'R$ 0,52'); + $this->assertEqual($this->Formatacao->moeda(10), 'R$ 10,00'); + $this->assertEqual($this->Formatacao->moeda(10.12), 'R$ 10,12'); + } + +/** + * testMoedaPorExtenso + * + * @retun void + * @access public + */ + function testMoedaPorExtenso() { + $this->assertEqual($this->Formatacao->moedaPorExtenso(0), 'zero'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(0.52), 'cinquenta e dois centavos'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(1), 'um real'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(1.2), 'um real e vinte centavos'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(10), 'dez reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(15), 'quinze reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(25), 'vinte e cinco reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(40), 'quarenta reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(100), 'cem reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(105), 'cento e cinco reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(120), 'cento e vinte reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(210), 'duzentos e dez reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(322), 'trezentos e vinte e dois reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(1234), 'um mil duzentos e trinta e quatro reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(100000), 'cem mil reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(1000000), 'um milhão de reais'); + $this->assertEqual($this->Formatacao->moedaPorExtenso(1045763), 'um milhão, quarenta e cinco mil setecentos e sessenta e três reais'); + } +} diff --git a/app/plugins/cake_ptbr/tests/fixtures/produto_fixture.php b/app/plugins/cake_ptbr/tests/fixtures/produto_fixture.php new file mode 100644 index 0000000..b55ea6b --- /dev/null +++ b/app/plugins/cake_ptbr/tests/fixtures/produto_fixture.php @@ -0,0 +1,64 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * Produto Fixture + * + */ +class ProdutoFixture extends CakeTestFixture { + +/** + * Nome do fixture + * + * @var string + * @access public + */ + var $name = 'Produto'; + +/** + * Campos da tabela + * + * @var array + * @access public + */ + var $fields = array( + 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), + 'nome' => array('type' => 'string', 'null' => false, 'default' => NULL), + 'valor' => array('type' => 'float', 'null' => false, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB') + ); + +/** + * Registros + * + * @var array + * @access public + */ + var $records = array( + array( + 'id' => 1, + 'nome' => 'Produto 1', + 'valor' => 1.99 + ), + array( + 'id' => 2, + 'nome' => 'Produto 2', + 'valor' => 1000.20 + ), + array( + 'id' => 3, + 'nome' => 'Produto 3', + 'valor' => 1999000.00 + ) + ); +} diff --git a/app/plugins/cake_ptbr/vendors/estados.php b/app/plugins/cake_ptbr/vendors/estados.php new file mode 100644 index 0000000..2b38c6e --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/estados.php @@ -0,0 +1,57 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * Estados + * + */ +class Estados { + +/** + * Lista dos estados brasileiros + * + * @return array Lista dos estados + * @access public + */ + function lista() { + return array( + 'AC' => 'Acre', + 'AL' => 'Alagoas', + 'AP' => 'Amapá', + 'AM' => 'Amazonas', + 'BA' => 'Bahia', + 'CE' => 'Ceará', + 'DF' => 'Distrito Federal', + 'ES' => 'Espírito Santo', + 'GO' => 'Goiás', + 'PA' => 'Pará', + 'PB' => 'Paraíba', + 'PR' => 'Paraná', + 'PE' => 'Pernambuco', + 'PI' => 'Piauí', + 'MA' => 'Maranhão', + 'MT' => 'Mato Grosso', + 'MS' => 'Mato Grosso do Sul', + 'MG' => 'Minas Gerais', + 'RJ' => 'Rio de Janeiro', + 'RN' => 'Rio Grande do Norte', + 'RS' => 'Rio Grande do Sul', + 'RO' => 'Rondônia', + 'RR' => 'Roraima', + 'SC' => 'Santa Catarina', + 'SP' => 'São Paulo', + 'SE' => 'Sergipe', + 'TO' => 'Tocantins' + ); + } + +} diff --git a/app/plugins/cake_ptbr/vendors/shells/cake_ptbr_installer.php b/app/plugins/cake_ptbr/vendors/shells/cake_ptbr_installer.php new file mode 100644 index 0000000..723a551 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/cake_ptbr_installer.php @@ -0,0 +1,58 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +if (App::import('Vendor', 'PluginManager.Installer')) { +/** + * CakePtbrInstaller + * + */ + class CakePtbrInstaller extends InstallerPM { +/** + * Instala a aplicação + * + * @return void + * @access public + */ + function install() { + App::import('Core', 'File'); + $bootstrap = new File(CONFIGS . 'bootstrap.php'); + $conteudo = $bootstrap->read(); + // Caso o plugin já esteja instalado, ignora + if (strpos('cake_ptbr', $conteudo) !== false) { + return; + } + $conteudo = str_replace('?>', "require APP . 'plugins' . DS . 'cake_ptbr' . DS . 'config' . DS . 'bootstrap.php';\n?>", $conteudo); + $bootstrap->write($conteudo); + $bootstrap->close(); + } + } +} + +/** + * CakePtbrInstaller Shell + * + */ +class CakePtbrInstallerShell extends Shell { + +/** + * Main + * + * @return void + * @access public + */ + function main() { + $this->out('Este arquivo eh reservado para instalacao atraves do PluginManager.'); + $this->out('Mais informacoes sobre o PluginManager: http://kiss.souagil.com.br/2009/04/plugin-manager/'); + $this->out(''); + $this->out('Desculpe o transtorno.'); + } +} diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/actions/controller_actions.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/actions/controller_actions.ctp new file mode 100644 index 0000000..ce26143 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/actions/controller_actions.ctp @@ -0,0 +1,141 @@ + + + function index() { + $this->->recursive = 0; + $this->set('', $this->paginate()); + } + + function view($id = null) { + if (!$id) { + + $this->Session->setFlash(sprintf(__('%s inválido.', true), '')); + $this->redirect(array('action' => 'index')); + + $this->flash(sprintf(__('%s inválido.', true), ''), array('action' => 'index')); + + } + $this->set('', $this->->read(null, $id)); + } + + + function add() { + if (!empty($this->data)) { + $this->->create(); + if ($this->->save($this->data)) { + + $this->Session->setFlash(sprintf(__('O %s foi salvo.', true), '')); + $this->redirect(array('action' => 'index')); + + $this->flash(sprintf(__('%s salvo.', true), ''), array('action' => 'index')); + + } else { + + $this->Session->setFlash(sprintf(__('O %s não pode ser salvo. Por favor, tente novamente.', true), '')); + + } + } +{$assoc} as $associationName => $relation): + if (!empty($associationName)): + $otherModelName = $this->_modelName($associationName); + $otherPluralName = $this->_pluralName($associationName); + echo "\t\t\${$otherPluralName} = \$this->{$currentModelName}->{$otherModelName}->find('list');\n"; + $compact[] = "'{$otherPluralName}'"; + endif; + endforeach; + endforeach; + if (!empty($compact)): + echo "\t\t\$this->set(compact(".join(', ', $compact)."));\n"; + endif; +?> + } + + + function edit($id = null) { + if (!$id && empty($this->data)) { + + $this->Session->setFlash(sprintf(__('%s inválido.', true), '')); + $this->redirect(array('action' => 'index')); + + $this->flash(sprintf(__('%s inválido.', true), ''), array('action' => 'index')); + + } + if (!empty($this->data)) { + if ($this->->save($this->data)) { + + $this->Session->setFlash(sprintf(__('O %s foi salvo.', true), '')); + $this->redirect(array('action' => 'index')); + + $this->flash(sprintf(__('O %s foi salvo.', true), ''), array('action' => 'index')); + + } else { + + $this->Session->setFlash(sprintf(__('O %s não pode ser salvo. Por favor, tente novamente.', true), '')); + + } + } + if (empty($this->data)) { + $this->data = $this->->read(null, $id); + } +{$assoc} as $associationName => $relation): + if (!empty($associationName)): + $otherModelName = $this->_modelName($associationName); + $otherPluralName = $this->_pluralName($associationName); + echo "\t\t\${$otherPluralName} = \$this->{$currentModelName}->{$otherModelName}->find('list');\n"; + $compact[] = "'{$otherPluralName}'"; + endif; + endforeach; + endforeach; + if (!empty($compact)): + echo "\t\t\$this->set(compact(".join(', ', $compact)."));\n"; + endif; + ?> + } + + function delete($id = null) { + if (!$id) { + + $this->Session->setFlash(sprintf(__('ID inválido para %s.', true), '')); + $this->redirect(array('action'=>'index')); + + $this->flash(sprintf(__('%s inválido.', true), ''), array('action' => 'index')); + + } + if ($this->->delete($id)) { + + $this->Session->setFlash(sprintf(__('%s excluído.', true), '')); + $this->redirect(array('action'=>'index')); + + $this->flash(sprintf(__('%s excluído.', true), ''), array('action' => 'index')); + + } + + $this->Session->setFlash(sprintf(__('%s não pode ser excluído.', true), '')); + + $this->flash(sprintf(__('%s não pode ser excluído.', true), ''), array('action' => 'index')); + + $this->redirect(array('action' => 'index')); + } \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/controller.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/controller.ctp new file mode 100644 index 0000000..e727fc2 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/controller.ctp @@ -0,0 +1,61 @@ + +class Controller extends AppController { + + var $name = ''; + + var $scaffold; + + + +} +"; ?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/fixture.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/fixture.ctp new file mode 100644 index 0000000..0f516e1 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/fixture.ctp @@ -0,0 +1,42 @@ + + +/* Fixture generated on: */ +class Fixture extends CakeTestFixture { + var $name = ''; + + var $table = ''; + + + var $import = ; + + + + var $fields = ; + + + + var $records = ; + +} +'; ?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/model.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/model.ctp new file mode 100644 index 0000000..236990c --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/model.ctp @@ -0,0 +1,142 @@ + +class extends AppModel { + var $name = ''; + + var $useDbConfig = ''; + + + var $primaryKey = ''; + + var $displayField = ''; + $validations): + echo "\t\t'$field' => array(\n"; + foreach ($validations as $key => $validator): + echo "\t\t\t'$key' => array(\n"; + echo "\t\t\t\t'rule' => array('$validator'),\n"; + echo "\t\t\t\t//'message' => 'Sua mensagem de validação aqui',\n"; + echo "\t\t\t\t//'allowEmpty' => false,\n"; + echo "\t\t\t\t//'required' => false,\n"; + echo "\t\t\t\t//'last' => false, // Para a validação após esta regra\n"; + echo "\t\t\t\t//'on' => 'create', // Limitar a validação para as operações 'create' ou 'update'\n"; + echo "\t\t\t),\n"; + endforeach; + echo "\t\t),\n"; + endforeach; + echo "\t);\n"; +endif; + +foreach ($associations as $assoc): + if (!empty($assoc)): +?> + // As associações abaixo foram criadas com todas as chaves possíveis, então é possível remover as que não são necessárias + $relation): + $out = "\n\t\t'{$relation['alias']}' => array(\n"; + $out .= "\t\t\t'className' => '{$relation['className']}',\n"; + $out .= "\t\t\t'foreignKey' => '{$relation['foreignKey']}',\n"; + $out .= "\t\t\t'conditions' => '',\n"; + $out .= "\t\t\t'fields' => '',\n"; + $out .= "\t\t\t'order' => ''\n"; + $out .= "\t\t)"; + if ($i + 1 < $typeCount) { + $out .= ","; + } + echo $out; + endforeach; + echo "\n\t);\n"; + endif; +endforeach; + +if (!empty($associations['hasMany'])): + $belongsToCount = count($associations['hasMany']); + echo "\n\tvar \$hasMany = array("; + foreach ($associations['hasMany'] as $i => $relation): + $out = "\n\t\t'{$relation['alias']}' => array(\n"; + $out .= "\t\t\t'className' => '{$relation['className']}',\n"; + $out .= "\t\t\t'foreignKey' => '{$relation['foreignKey']}',\n"; + $out .= "\t\t\t'dependent' => false,\n"; + $out .= "\t\t\t'conditions' => '',\n"; + $out .= "\t\t\t'fields' => '',\n"; + $out .= "\t\t\t'order' => '',\n"; + $out .= "\t\t\t'limit' => '',\n"; + $out .= "\t\t\t'offset' => '',\n"; + $out .= "\t\t\t'exclusive' => '',\n"; + $out .= "\t\t\t'finderQuery' => '',\n"; + $out .= "\t\t\t'counterQuery' => ''\n"; + $out .= "\t\t)"; + if ($i + 1 < $belongsToCount) { + $out .= ","; + } + echo $out; + endforeach; + echo "\n\t);\n\n"; +endif; + +if (!empty($associations['hasAndBelongsToMany'])): + $habtmCount = count($associations['hasAndBelongsToMany']); + echo "\n\tvar \$hasAndBelongsToMany = array("; + foreach ($associations['hasAndBelongsToMany'] as $i => $relation): + $out = "\n\t\t'{$relation['alias']}' => array(\n"; + $out .= "\t\t\t'className' => '{$relation['className']}',\n"; + $out .= "\t\t\t'joinTable' => '{$relation['joinTable']}',\n"; + $out .= "\t\t\t'foreignKey' => '{$relation['foreignKey']}',\n"; + $out .= "\t\t\t'associationForeignKey' => '{$relation['associationForeignKey']}',\n"; + $out .= "\t\t\t'unique' => true,\n"; + $out .= "\t\t\t'conditions' => '',\n"; + $out .= "\t\t\t'fields' => '',\n"; + $out .= "\t\t\t'order' => '',\n"; + $out .= "\t\t\t'limit' => '',\n"; + $out .= "\t\t\t'offset' => '',\n"; + $out .= "\t\t\t'finderQuery' => '',\n"; + $out .= "\t\t\t'deleteQuery' => '',\n"; + $out .= "\t\t\t'insertQuery' => ''\n"; + $out .= "\t\t)"; + if ($i + 1 < $habtmCount) { + $out .= ","; + } + echo $out; + endforeach; + echo "\n\t);\n\n"; +endif; +?> +} +'; ?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/test.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/test.ctp new file mode 100644 index 0000000..a3f9693 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/classes/test.ctp @@ -0,0 +1,57 @@ + +App::import('', ''); + + +class Test extends { + var $autoRender = false; + + function redirect($url, $status = null, $exit = true) { + $this->redirectUrl = $url; + } +} + + +class TestCase extends CakeTestCase { + + var $fixtures = array(''); + + + function startTest() { + $this-> + } + + function endTest() { + unset($this->); + ClassRegistry::flush(); + } + + + function test() { + + } + + +} +'; ?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/inflexao.php b/app/plugins/cake_ptbr/vendors/shells/templates/default/inflexao.php new file mode 100644 index 0000000..70b9480 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/inflexao.php @@ -0,0 +1,56 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * Inflexao + * + */ +class Inflexao { + +/** + * Ajusta as palavras para por acentos + * + * @param string $palavra Palavra a ser modificada + * @return string Palavra com acento + * @access public + */ + function acentos($palavra) { + $espacamentos = array(' ', '_'); + foreach ($espacamentos as $espacamento) { + if (strpos($palavra, $espacamento) !== false) { + $palavra = explode($espacamento, $palavra); + $saida = ''; + foreach ($palavra as $pedaco) { + $saida .= Inflexao::acentos($pedaco) . $espacamento; + } + return rtrim($saida, $espacamento); + } + } + if (preg_match('/(.*)cao$/', $palavra, $matches)) { + return $matches[1] . 'ção'; + } + if (preg_match('/(.*)ao(s)?$/', $palavra, $matches)) { + return $matches[1] . 'ão' . (isset($matches[2]) ? $matches[2] : ''); + } + if (preg_match('/(.*)coes$/', $palavra, $matches)) { + return $matches[1] . 'ções'; + } + if (preg_match('/(.*)oes$/', $palavra, $matches)) { + return $matches[1] . 'ões'; + } + if (preg_match('/(.*)aes$/', $palavra, $matches)) { + return $matches[1] . 'ães'; + } + return $palavra; + } + +} diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/views/form.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/form.ctp new file mode 100644 index 0000000..a658bf3 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/form.ctp @@ -0,0 +1,74 @@ + +

+Form->create('{$modelClass}');?>\n";?> +
+ ";?> +Form->input('{$field}');\n"; + } + } + if (!empty($associations['hasAndBelongsToMany'])) { + foreach ($associations['hasAndBelongsToMany'] as $assocName => $assocData) { + echo "\t\techo \$this->Form->input('{$assocName}');\n"; + } + } + echo "\t?>\n"; +?> +
+Form->end(__('Enviar', true));?>\n"; +?> +
+
+

"; ?>

+
    + + +
  • Html->link(__('Excluir', true), array('action' => 'delete', \$this->Form->value('{$modelClass}.{$primaryKey}')), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), \$this->Form->value('{$modelClass}.{$primaryKey}'))); ?>";?>
  • + +
  • Html->link(sprintf(__('Listar %s', true), __('" . Inflexao::acentos($pluralHumanName) . "', true)), array('action' => 'index'));?>";?>
  • + $data) { + foreach ($data as $alias => $details) { + if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { + echo "\t\t
  • Html->link(sprintf(__('Listar %s', true), __('" . Inflexao::acentos(Inflector::humanize($details['controller'])) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • Html->link(sprintf(__('Novo %s', true), __('" . Inflexao::acentos(Inflector::humanize(Inflector::underscore($alias))) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + $done[] = $details['controller']; + } + } + } +?> +
+
\ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/views/home.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/home.ctp new file mode 100644 index 0000000..60514f5 --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/home.ctp @@ -0,0 +1,84 @@ +\"" . Inflector::humanize($app) . "\" gerado pelo Bake do CakePHP!\n"; +$output .=" + 0): + Debugger::checkSecurityKeys(); +endif; +?> +

+'; + __('Seu diretório tmp está habilitado para escrita.'); + echo ''; + else: + echo ''; + __('Seu diretório tmp NÃO está habilitado para escrita.'); + echo ''; + endif; +?> +

+

+'; + printf(__('O %s está sendo usado para cache. Para alterar, edite o arquivo APP/config/core.php.', true), ''. \$settings['engine'] . 'Engine'); + echo ''; + else: + echo ''; + __('Seu cache NÃO está funcionando. Por favor, verifique suas configurações em APP/config/core.php.'); + echo ''; + endif; +?> +

+

+'; + __('Seu arquivo de configuração do banco de dados está presente.'); + \$filePresent = true; + echo ''; + else: + echo ''; + __('Seu arquivo de configuração do banco de dados NÃO está presente.'); + echo '
'; + __('Renomeie o arquivo config/database.php.default para config/database.php'); + echo '
'; + endif; +?> +

+getDataSource('default'); +?> +

+isConnected()): + echo ''; + __('Cake está apto para conectar no banco de dados.'); + echo ''; + else: + echo ''; + __('Cake NÃO está apto para conectar no banco de dados.'); + echo ''; + endif; +?> +

\n"; +$output .= "\n"; +$output .= "

\n"; +$output .= "

\n"; +$output .= "', APP . 'views' . DS . 'layouts' . DS . 'default.ctp.
', APP . 'webroot' . DS . 'css');\n"; +$output .= "?>\n"; +$output .= "

\n"; +?> \ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/views/index.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/index.ctp new file mode 100644 index 0000000..3a94aef --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/index.ctp @@ -0,0 +1,97 @@ + +
+

";?>

+ + + + + + + + \n"; + echo "\t>\n"; + foreach ($fields as $field) { + $isKey = false; + if (!empty($associations['belongsTo'])) { + foreach ($associations['belongsTo'] as $alias => $details) { + if ($field === $details['foreignKey']) { + $isKey = true; + echo "\t\t\n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t\n"; + } + } + + echo "\t\t\n"; + echo "\t\n"; + + echo "\n"; + ?> +
Paginator->sort('{$field}');?>";?>";?>
\n\t\t\tHtml->link(\${$singularVar}['{$alias}']['{$details['displayField']}'], array('controller' => '{$details['controller']}', 'action' => 'view', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?>\n\t\t \n"; + echo "\t\t\tHtml->link(__('Ver', true), array('action' => 'view', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n"; + echo "\t\t\tHtml->link(__('Editar', true), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n"; + echo "\t\t\tHtml->link(__('Excluir', true), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n"; + echo "\t\t
+

+ Paginator->counter(array( + 'format' => __('Página %page% de %pages%, mostrando %current% registros de %count%, começando no registro %start% e terminando no %end%', true) + )); + ?>";?> +

+ +
+ Paginator->prev('<< '.__('anterior', true), array(), null, array('class'=>'disabled'));?>\n";?> + | Paginator->numbers();?>\n"?> | + Paginator->next(__('próxima', true).' >>', array(), null, array('class' => 'disabled'));?>\n";?> +
+
+
+

"; ?>

+
    +
  • Html->link(sprintf(__('Novo %s', true), __('" . Inflexao::acentos($singularHumanName) . "', true)), array('action' => 'add')); ?>";?>
  • + $data) { + foreach ($data as $alias => $details) { + if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { + echo "\t\t
  • Html->link(sprintf(__('Listar %s', true), __('" . Inflexao::acentos(Inflector::humanize($details['controller'])) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • Html->link(sprintf(__('Novo %s', true), __('" . Inflexao::acentos(Inflector::humanize(Inflector::underscore($alias))) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + $done[] = $details['controller']; + } + } + } +?> +
+
\ No newline at end of file diff --git a/app/plugins/cake_ptbr/vendors/shells/templates/default/views/view.ctp b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/view.ctp new file mode 100644 index 0000000..ccf85af --- /dev/null +++ b/app/plugins/cake_ptbr/vendors/shells/templates/default/views/view.ctp @@ -0,0 +1,147 @@ + +
+

";?>

+
\n";?> + $details) { + if ($field === $details['foreignKey']) { + $isKey = true; + echo "\t\t>\n"; + echo "\t\t>\n\t\t\tHtml->link(\${$singularVar}['{$alias}']['{$details['displayField']}'], array('controller' => '{$details['controller']}', 'action' => 'view', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?>\n\t\t\t \n\t\t\n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t>\n"; + echo "\t\t>\n\t\t\t\n\t\t\t \n\t\t\n"; + } +} +?> +
+
+
+

"; ?>

+
    +Html->link(sprintf(__('Editar %s', true), __('" . Inflexao::acentos($singularHumanName) . "', true)), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?> \n"; + echo "\t\t
  • Html->link(sprintf(__('Excluir %s', true), __('" . Inflexao::acentos($singularHumanName) . "', true)), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>
  • \n"; + echo "\t\t
  • Html->link(sprintf(__('Listar %s', true), __('" . Inflexao::acentos($pluralHumanName) . "', true)), array('action' => 'index')); ?>
  • \n"; + echo "\t\t
  • Html->link(sprintf(__('Novo %s', true), __('" . Inflexao::acentos($singularHumanName) . "', true)), array('action' => 'add')); ?>
  • \n"; + + $done = array(); + foreach ($associations as $type => $data) { + foreach ($data as $alias => $details) { + if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { + echo "\t\t
  • Html->link(sprintf(__('Listar %s', true), __('" . Inflexao::acentos(Inflector::humanize($details['controller'])) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • Html->link(sprintf(__('Novo %s', true), __('" . Inflexao::acentos(Inflector::humanize(Inflector::underscore($alias))) . "', true)), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + $done[] = $details['controller']; + } + } + } +?> +
+
+ $details): ?> + + $details): + $otherSingularVar = Inflector::variable($alias); + $otherPluralHumanName = Inflexao::acentos(Inflector::humanize($details['controller'])); + ?> + + \ No newline at end of file diff --git a/app/plugins/cake_ptbr/views/helpers/estados.php b/app/plugins/cake_ptbr/views/helpers/estados.php new file mode 100644 index 0000000..851a612 --- /dev/null +++ b/app/plugins/cake_ptbr/views/helpers/estados.php @@ -0,0 +1,49 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * Estado Helper + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/helper-estados + */ +class EstadosHelper extends AppHelper { + +/** + * Helpers auxiliares + * + * @var array + * @access public + */ + var $helpers = array('Form'); + +/** + * Retorna a select com a lista dos estados + * + * @param string $fieldName Nome do campo + * @param string $selected Sigla do estado que deve ser selecionado + * @param array $attributes Mesmos atributos do Form::select(). Também é possível passar o param + 'uf' para mostrar apenas as siglas, sem os nomes + */ + function select($fieldName, $selected = null, $attributes = array()) { + App::import('Vendor', 'CakePtbr.Estados'); + $options = Estados::lista(); + if (isset($attributes['uf']) && $attributes['uf'] === true) { + $estados = array_keys($options); + $options = array_combine($estados, $estados); + unset($attributes['uf']); + } + if (!isset($attributes['empty'])) { + $attributes['empty'] = false; + } + return $this->Form->select($fieldName, $options, $selected, $attributes); + } +} diff --git a/app/plugins/cake_ptbr/views/helpers/formatacao.php b/app/plugins/cake_ptbr/views/helpers/formatacao.php new file mode 100644 index 0000000..d87b315 --- /dev/null +++ b/app/plugins/cake_ptbr/views/helpers/formatacao.php @@ -0,0 +1,331 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +/** + * Formatação Helper + * + * @link http://wiki.github.com/jrbasso/cake_ptbr/helper-formatao + */ +class FormatacaoHelper extends AppHelper { + +/** + * Helpers auxiliares + * + * @var array + * @access public + */ + var $helpers = array('Time', 'Number'); + +/** + * Formata a data + * + * @param integer $data Data em timestamp ou null para atual + * @param array $opcoes É possível definir o valor de 'invalid' e 'userOffset' que serão usados pelo helper Time + * @return string Data no formato dd/mm/aaaa + * @access public + */ + function data($data = null, $opcoes = array()) { + $padrao = array( + 'invalid' => '31/12/1969', + 'userOffset' => null + ); + $config = array_merge($padrao, $opcoes); + + $data = $this->_ajustaDataHora($data); + return $this->Time->format('d/m/Y', $data, $config['invalid'], $config['userOffset']); + } + +/** + * Formata a data e hora + * + * @param integer $dataHora Data e hora em timestamp ou null para atual + * @param boolean $segundos Mostrar os segundos + * @param array $opcoes É possível definir o valor de 'invalid' e 'userOffset' que serão usados pelo helper Time + * @return string Data no formato dd/mm/aaaa hh:mm:ss + * @access public + */ + function dataHora($dataHora = null, $segundos = true, $opcoes = array()) { + $padrao = array( + 'invalid' => '31/12/1969', + 'userOffset' => null + ); + $config = array_merge($padrao, $opcoes); + + $dataHora = $this->_ajustaDataHora($dataHora); + if ($segundos) { + return $this->Time->format('d/m/Y H:i:s', $dataHora, $config['invalid'], $config['userOffset']); + } + return $this->Time->format('d/m/Y H:i', $dataHora, $config['invalid'], $config['userOffset']); + } + +/** + * Mostrar a data completa + * + * @param integer $dataHora Data e hora em timestamp ou null para atual + * @return string Descrição da data no estilo "Sexta-feira", 01 de Janeiro de 2010, 00:00:00" + * @access public + */ + function dataCompleta($dataHora = null) { + $_diasDaSemana = array('Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'); + $_meses = array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); + + $dataHora = $this->_ajustaDataHora($dataHora); + $w = date('w', $dataHora); + $n = date('n', $dataHora) - 1; + + return sprintf('%s, %02d de %s de %04d, %s', $_diasDaSemana[$w], date('d', $dataHora), $_meses[$n], date('Y', $dataHora), date('H:i:s', $dataHora)); + } + +/** + * Se a data for nula, usa data atual + * + * @param mixed $data + * @return integer Se null, retorna a data/hora atual + * @access protected + */ + function _ajustaDataHora($data) { + if (is_null($data)) { + return time(); + } + if (is_integer($data) || ctype_digit($data)) { + return (int)$data; + } + return strtotime((string)$data); + } + +/** + * Mostrar uma data em tempo + * + * @param integer $dataHora Data e hora em timestamp, dd/mm/YYYY ou null para atual + * @param string $limite null, caso não haja expiração ou então, forneça um tempo usando o formato inglês para strtotime: Ex: 1 year + * @return string Descrição da data em tempo ex.: a 1 minuto, a 1 semana + * @access public + */ + + function tempo($dataHora = null, $limite = '30 days'){ + if (!$dataHora) { + $dataHora = time(); + } + + if (strpos($dataHora, '/') !== false) { + $_dataHora = str_replace('/', '-', $dataHora); + $_dataHora = date('ymdHi', strtotime($_dataHora)); + } elseif (is_string($dataHora)) { + $_dataHora = date('ymdHi', strtotime($dataHora)); + } else { + $_dataHora = date('ymdHi', $dataHora); + } + + if ($limite !== null) { + if ($_dataHora > date('ymdHi', strtotime('+ ' . $limite))) { + return $this->dataHora($dataHora); + } + } + + $_dataHora = date('ymdHi') - $_dataHora; + if ($_dataHora > 88697640 && $_dataHora < 100000000) { + $_dataHora -= 88697640; + } + + switch ($_dataHora) { + case 0: + return 'menos de 1 minuto'; + case ($_dataHora < 99): + if ($_dataHora === 1) { + return '1 minuto'; + } elseif ($_dataHora > 59) { + return ($_dataHora - 40) . ' minutos'; + } + return $_dataHora . ' minutos'; + case ($_dataHora > 99 && $_dataHora < 2359): + $flr = floor($_dataHora * 0.01); + return $flr == 1 ? '1 hora' : $flr . ' horas'; + + case ($_dataHora > 2359 && $_dataHora < 310000): + $flr = floor($_dataHora * 0.0001); + return $flr == 1 ? '1 dia' : $flr . ' dias'; + + case ($_dataHora > 310001 && $_dataHora < 12320000): + $flr = floor($_dataHora * 0.000001); + return $flr == 1 ? '1 mes' : $flr . ' meses'; + + case ($_dataHora > 100000000): + default: + $flr = floor($_dataHora * 0.00000001); + return $flr == 1 ? '1 ano' : $flr . ' anos'; + + } + } + + +/** + * Número float com ponto ao invés de vírgula + * + * @param float $numero Número + * @param integer $casasDecimais Número de casas decimais + * @return string Número formatado + * @access public + */ + function precisao($numero, $casasDecimais = 3) { + return number_format($numero, $casasDecimais, ',', '.'); + } + +/** + * Valor formatado com símbolo de % + * + * @param float $numero Número + * @param integer $casasDecimais Número de casas decimais + * @return string Número formatado com % + * @access public + */ + function porcentagem($numero, $casasDecimais = 2) { + return $this->precisao($numero, $casasDecimais) . '%'; + } + +/** + * Formata um valor para reais + * + * @param float $valor Valor + * @param array $opcoes Mesmas opções de Number::currency() + * @return string Valor formatado em reais + * @access public + */ + function moeda($valor, $opcoes = array()) { + $padrao = array( + 'before'=> 'R$ ', + 'after' => '', + 'zero' => 'R$ 0,00', + 'places' => 2, + 'thousands' => '.', + 'decimals' => ',', + 'negative' => '()', + 'escape' => true + ); + $config = array_merge($padrao, $opcoes); + if ($valor > -1 && $valor < 1) { + $before = $config['before']; + $config['before'] = ''; + $formatado = $this->Number->format(abs($valor), $config); + if ($valor < 0 ) { + if ($config['negative'] == '()') { + return '(' . $before . $formatado .')'; + } else { + return $before . $config['negative'] . $formatado; + } + } + return $before . $formatado; + } + return $this->Number->currency($valor, null, $config); + } + +/** + * Valor por extenso em reais + * + * @param float $numero + * @return string Valor em reais por extenso + * @access public + * @link http://forum.imasters.uol.com.br/index.php?showtopic=125375 + */ + function moedaPorExtenso($numero) { + $singular = array('centavo', 'real', 'mil', 'milhão', 'bilhão', 'trilhão', 'quatrilhão'); + $plural = array('centavos', 'reais', 'mil', 'milhões', 'bilhões', 'trilhões', 'quatrilhões'); + + $c = array('', 'cem', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos'); + $d = array('', 'dez', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'); + $d10 = array('dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezesete', 'dezoito', 'dezenove'); + $u = array('', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove'); + + $z = 0; + $rt = ''; + + $valor = number_format($numero, 2, '.', '.'); + $inteiro = explode('.', $valor); + $tamInteiro = count($inteiro); + + // Normalizandos os valores para ficarem com 3 digitos + $inteiro[0] = sprintf('%03d', $inteiro[0]); + $inteiro[$tamInteiro - 1] = sprintf('%03d', $inteiro[$tamInteiro - 1]); + + $fim = $tamInteiro - 1; + if ($inteiro[$tamInteiro - 1] <= 0) { + $fim--; + } + foreach ($inteiro as $i => $valor) { + $rc = $c[$valor{0}]; + if ($valor > 100 && $valor < 200) { + $rc = 'cento'; + } + $rd = ''; + if ($valor{1} > 1) { + $rd = $d[$valor{1}]; + } + $ru = ''; + if ($valor > 0) { + if ($valor{1} == 1) { + $ru = $d10[$valor{2}]; + } else { + $ru = $u[$valor{2}]; + } + } + + $r = $rc; + if ($rc && ($rd || $ru)) { + $r .= ' e '; + } + $r .= $rd; + if ($rd && $ru) { + $r .= ' e '; + } + $r .= $ru; + $t = $tamInteiro - 1 - $i; + if (!empty($r)) { + $r .= ' '; + if ($valor > 1) { + $r .= $plural[$t]; + } else { + $r .= $singular[$t]; + } + } + if ($valor == '000') { + $z++; + } elseif ($z > 0) { + $z--; + } + if ($t == 1 && $z > 0 && $inteiro[0] > 0) { + if ($z > 1) { + $r .= ' de '; + } + $r .= $plural[$t]; + } + if (!empty($r)) { + if ($i > 0 && $i < $fim && $inteiro[0] > 0 && $z < 1) { + if ($i < $fim) { + $rt .= ', '; + } else { + $rt .= ' e '; + } + } elseif ($t == 0 && $inteiro[0] > 0) { + $rt .= ' e '; + } else { + $rt .= ' '; + } + $rt .= $r; + } + } + + if (empty($rt)) { + return 'zero'; + } + return trim(str_replace(' ', ' ', $rt)); + } + +} diff --git a/app/plugins/example/.svn/entries b/app/plugins/example/.svn/entries new file mode 100644 index 0000000..d3c0074 --- /dev/null +++ b/app/plugins/example/.svn/entries @@ -0,0 +1,111 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example_app_model.php +file + + + + +2010-09-04T08:55:28.000000Z +8bad172ca48ed25d38c78d0df74ab2cb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +52 + +webroot +dir + +models +dir + +example_app_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +55106e56b2a024868bdb72eb7d407906 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +62 + +config +dir + +controllers +dir + +views +dir + diff --git a/app/plugins/example/.svn/text-base/example_app_controller.php.svn-base b/app/plugins/example/.svn/text-base/example_app_controller.php.svn-base new file mode 100644 index 0000000..7b1912b --- /dev/null +++ b/app/plugins/example/.svn/text-base/example_app_controller.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/example/.svn/text-base/example_app_model.php.svn-base b/app/plugins/example/.svn/text-base/example_app_model.php.svn-base new file mode 100644 index 0000000..9f9fc47 --- /dev/null +++ b/app/plugins/example/.svn/text-base/example_app_model.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/example/config/.svn/entries b/app/plugins/example/config/.svn/entries new file mode 100644 index 0000000..6103576 --- /dev/null +++ b/app/plugins/example/config/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/config +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example_activation.php +file + + + + +2010-09-04T08:55:28.000000Z +c3fe47176ac06ebf56d882526edc24f6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2806 + +example_routes.php +file + + + + +2010-09-04T08:55:28.000000Z +d24202f4179a36bdf84a2a8b1d981bf2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +136 + +example_bootstrap.php +file + + + + +2010-09-04T08:55:28.000000Z +447ec984ec5a70686d439f0b5b9f90a5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1451 + +plugin.yml +file + + + + +2010-09-04T08:55:28.000000Z +ed5c012a6f8f01b0a303243c6b4ec09f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +207 + diff --git a/app/plugins/example/config/.svn/text-base/example_activation.php.svn-base b/app/plugins/example/config/.svn/text-base/example_activation.php.svn-base new file mode 100644 index 0000000..a82c6ea --- /dev/null +++ b/app/plugins/example/config/.svn/text-base/example_activation.php.svn-base @@ -0,0 +1,85 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleActivation { +/** + * onActivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeActivation(&$controller) { + return true; + } +/** + * Called after activating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onActivation(&$controller) { + // ACL: set ACOs with permissions + $controller->Croogo->addAco('Example'); // ExampleController + $controller->Croogo->addAco('Example/admin_index'); // ExampleController::admin_index() + $controller->Croogo->addAco('Example/index', array('registered', 'public')); // ExampleController::index() + + // Main menu: add an Example link + $mainMenu = $controller->Link->Menu->findByAlias('main'); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $mainMenu['Menu']['id'], + ), + )); + $controller->Link->save(array( + 'menu_id' => $mainMenu['Menu']['id'], + 'title' => 'Example', + 'link' => 'plugin:example/controller:example/action:index', + 'status' => 1, + )); + } +/** + * onDeactivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeDeactivation(&$controller) { + return true; + } +/** + * Called after deactivating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onDeactivation(&$controller) { + // ACL: remove ACOs with permissions + $controller->Croogo->removeAco('Example'); // ExampleController ACO and it's actions will be removed + + // Main menu: delete Example link + $link = $controller->Link->find('first', array( + 'conditions' => array( + 'Menu.alias' => 'main', + 'Link.link' => 'plugin:example/controller:example/action:index', + ), + )); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if (isset($link['Link']['id'])) { + $controller->Link->delete($link['Link']['id']); + } + } +} +?> \ No newline at end of file diff --git a/app/plugins/example/config/.svn/text-base/example_bootstrap.php.svn-base b/app/plugins/example/config/.svn/text-base/example_bootstrap.php.svn-base new file mode 100644 index 0000000..3400915 --- /dev/null +++ b/app/plugins/example/config/.svn/text-base/example_bootstrap.php.svn-base @@ -0,0 +1,49 @@ + List), + * an extra link called 'Example' will be placed under 'Actions' column. + */ + Croogo::hookAdminRowAction('Nodes/admin_index', 'Example', 'plugin:example/controller:example/action:index/:id'); +/** + * Admin tab + * + * When adding/editing Content (Nodes), + * an extra tab with title 'Example' will be shown with markup generated from the plugin's admin_tab_node element. + * + * Useful for adding form extra form fields if necessary. + */ + Croogo::hookAdminTab('Nodes/admin_add', 'Example', 'example.admin_tab_node'); + Croogo::hookAdminTab('Nodes/admin_edit', 'Example', 'example.admin_tab_node'); +?> \ No newline at end of file diff --git a/app/plugins/example/config/.svn/text-base/example_routes.php.svn-base b/app/plugins/example/config/.svn/text-base/example_routes.php.svn-base new file mode 100644 index 0000000..aef657a --- /dev/null +++ b/app/plugins/example/config/.svn/text-base/example_routes.php.svn-base @@ -0,0 +1,3 @@ + 'example', 'controller' => 'example', 'action' => 'index')); +?> \ No newline at end of file diff --git a/app/plugins/example/config/.svn/text-base/plugin.yml.svn-base b/app/plugins/example/config/.svn/text-base/plugin.yml.svn-base new file mode 100644 index 0000000..9b71d4c --- /dev/null +++ b/app/plugins/example/config/.svn/text-base/plugin.yml.svn-base @@ -0,0 +1,11 @@ +name: Example +description: Example plugin for demonstrating hook system + +author: Author Name +authorEmail: author@example.com +authorUrl: http://example.com + +dependencies: + plugins: + - acl + - extensions \ No newline at end of file diff --git a/app/plugins/example/config/example_activation.php b/app/plugins/example/config/example_activation.php new file mode 100644 index 0000000..a82c6ea --- /dev/null +++ b/app/plugins/example/config/example_activation.php @@ -0,0 +1,85 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleActivation { +/** + * onActivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeActivation(&$controller) { + return true; + } +/** + * Called after activating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onActivation(&$controller) { + // ACL: set ACOs with permissions + $controller->Croogo->addAco('Example'); // ExampleController + $controller->Croogo->addAco('Example/admin_index'); // ExampleController::admin_index() + $controller->Croogo->addAco('Example/index', array('registered', 'public')); // ExampleController::index() + + // Main menu: add an Example link + $mainMenu = $controller->Link->Menu->findByAlias('main'); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $mainMenu['Menu']['id'], + ), + )); + $controller->Link->save(array( + 'menu_id' => $mainMenu['Menu']['id'], + 'title' => 'Example', + 'link' => 'plugin:example/controller:example/action:index', + 'status' => 1, + )); + } +/** + * onDeactivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeDeactivation(&$controller) { + return true; + } +/** + * Called after deactivating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onDeactivation(&$controller) { + // ACL: remove ACOs with permissions + $controller->Croogo->removeAco('Example'); // ExampleController ACO and it's actions will be removed + + // Main menu: delete Example link + $link = $controller->Link->find('first', array( + 'conditions' => array( + 'Menu.alias' => 'main', + 'Link.link' => 'plugin:example/controller:example/action:index', + ), + )); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if (isset($link['Link']['id'])) { + $controller->Link->delete($link['Link']['id']); + } + } +} +?> \ No newline at end of file diff --git a/app/plugins/example/config/example_bootstrap.php b/app/plugins/example/config/example_bootstrap.php new file mode 100644 index 0000000..3400915 --- /dev/null +++ b/app/plugins/example/config/example_bootstrap.php @@ -0,0 +1,49 @@ + List), + * an extra link called 'Example' will be placed under 'Actions' column. + */ + Croogo::hookAdminRowAction('Nodes/admin_index', 'Example', 'plugin:example/controller:example/action:index/:id'); +/** + * Admin tab + * + * When adding/editing Content (Nodes), + * an extra tab with title 'Example' will be shown with markup generated from the plugin's admin_tab_node element. + * + * Useful for adding form extra form fields if necessary. + */ + Croogo::hookAdminTab('Nodes/admin_add', 'Example', 'example.admin_tab_node'); + Croogo::hookAdminTab('Nodes/admin_edit', 'Example', 'example.admin_tab_node'); +?> \ No newline at end of file diff --git a/app/plugins/example/config/example_routes.php b/app/plugins/example/config/example_routes.php new file mode 100644 index 0000000..aef657a --- /dev/null +++ b/app/plugins/example/config/example_routes.php @@ -0,0 +1,3 @@ + 'example', 'controller' => 'example', 'action' => 'index')); +?> \ No newline at end of file diff --git a/app/plugins/example/config/plugin.yml b/app/plugins/example/config/plugin.yml new file mode 100644 index 0000000..9b71d4c --- /dev/null +++ b/app/plugins/example/config/plugin.yml @@ -0,0 +1,11 @@ +name: Example +description: Example plugin for demonstrating hook system + +author: Author Name +authorEmail: author@example.com +authorUrl: http://example.com + +dependencies: + plugins: + - acl + - extensions \ No newline at end of file diff --git a/app/plugins/example/controllers/.svn/entries b/app/plugins/example/controllers/.svn/entries new file mode 100644 index 0000000..6b4ceb5 --- /dev/null +++ b/app/plugins/example/controllers/.svn/entries @@ -0,0 +1,65 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/controllers +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +f7c1cf9dfa0df0e7d1713139ffdb29b9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +811 + +components +dir + diff --git a/app/plugins/example/controllers/.svn/text-base/example_controller.php.svn-base b/app/plugins/example/controllers/.svn/text-base/example_controller.php.svn-base new file mode 100644 index 0000000..f161670 --- /dev/null +++ b/app/plugins/example/controllers/.svn/text-base/example_controller.php.svn-base @@ -0,0 +1,40 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleController extends ExampleAppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Example'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting'); + + public function admin_index() { + $this->set('title_for_layout', __('Example', true)); + } + + public function index() { + $this->set('title_for_layout', __('Example', true)); + $this->set('exampleVariable', 'value here'); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/controllers/components/.svn/entries b/app/plugins/example/controllers/components/.svn/entries new file mode 100644 index 0000000..726942a --- /dev/null +++ b/app/plugins/example/controllers/components/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/controllers/components +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example.php +file + + + + +2010-09-04T08:55:28.000000Z +98a316ef9a07568f30a6a29ecfd16667 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1183 + diff --git a/app/plugins/example/controllers/components/.svn/text-base/example.php.svn-base b/app/plugins/example/controllers/components/.svn/text-base/example.php.svn-base new file mode 100644 index 0000000..03a9488 --- /dev/null +++ b/app/plugins/example/controllers/components/.svn/text-base/example.php.svn-base @@ -0,0 +1,43 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleComponent extends Object { +/** + * Called after the Controller::beforeFilter() and before the controller action + * + * @param object $controller Controller with components to startup + * @return void + */ + public function startup(&$controller) { + $controller->set('exampleComponent', 'ExampleComponent startup'); + } +/** + * Called after the Controller::beforeRender(), after the view class is loaded, and before the + * Controller::render() + * + * @param object $controller Controller with components to beforeRender + * @return void + */ + public function beforeRender(&$controller) { + } +/** + * Called after Controller::render() and before the output is printed to the browser. + * + * @param object $controller Controller with components to shutdown + * @return void + */ + public function shutdown(&$controller) { + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/controllers/components/example.php b/app/plugins/example/controllers/components/example.php new file mode 100644 index 0000000..03a9488 --- /dev/null +++ b/app/plugins/example/controllers/components/example.php @@ -0,0 +1,43 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleComponent extends Object { +/** + * Called after the Controller::beforeFilter() and before the controller action + * + * @param object $controller Controller with components to startup + * @return void + */ + public function startup(&$controller) { + $controller->set('exampleComponent', 'ExampleComponent startup'); + } +/** + * Called after the Controller::beforeRender(), after the view class is loaded, and before the + * Controller::render() + * + * @param object $controller Controller with components to beforeRender + * @return void + */ + public function beforeRender(&$controller) { + } +/** + * Called after Controller::render() and before the output is printed to the browser. + * + * @param object $controller Controller with components to shutdown + * @return void + */ + public function shutdown(&$controller) { + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/controllers/example_controller.php b/app/plugins/example/controllers/example_controller.php new file mode 100644 index 0000000..f161670 --- /dev/null +++ b/app/plugins/example/controllers/example_controller.php @@ -0,0 +1,40 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleController extends ExampleAppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Example'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting'); + + public function admin_index() { + $this->set('title_for_layout', __('Example', true)); + } + + public function index() { + $this->set('title_for_layout', __('Example', true)); + $this->set('exampleVariable', 'value here'); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/example_app_controller.php b/app/plugins/example/example_app_controller.php new file mode 100644 index 0000000..7b1912b --- /dev/null +++ b/app/plugins/example/example_app_controller.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/example/example_app_model.php b/app/plugins/example/example_app_model.php new file mode 100644 index 0000000..9f9fc47 --- /dev/null +++ b/app/plugins/example/example_app_model.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/example/models/.svn/entries b/app/plugins/example/models/.svn/entries new file mode 100644 index 0000000..fb98eef --- /dev/null +++ b/app/plugins/example/models/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/models +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +behaviors +dir + diff --git a/app/plugins/example/models/behaviors/.svn/entries b/app/plugins/example/models/behaviors/.svn/entries new file mode 100644 index 0000000..01b5554 --- /dev/null +++ b/app/plugins/example/models/behaviors/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/models/behaviors +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example.php +file + + + + +2010-09-04T08:55:28.000000Z +a49c4a5932f40a80ad2846453fbc352d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1373 + diff --git a/app/plugins/example/models/behaviors/.svn/text-base/example.php.svn-base b/app/plugins/example/models/behaviors/.svn/text-base/example.php.svn-base new file mode 100644 index 0000000..e68c094 --- /dev/null +++ b/app/plugins/example/models/behaviors/.svn/text-base/example.php.svn-base @@ -0,0 +1,53 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + if (isset($results[$i][$model->alias]['body'])) { + $results[$i][$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + } elseif (isset($results[$model->alias])) { + if (isset($results[$model->alias]['body'])) { + $results[$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + + return $results; + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/models/behaviors/example.php b/app/plugins/example/models/behaviors/example.php new file mode 100644 index 0000000..e68c094 --- /dev/null +++ b/app/plugins/example/models/behaviors/example.php @@ -0,0 +1,53 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleBehavior extends ModelBehavior { +/** + * Setup + * + * @param object $model + * @param array $config + * @return void + */ + public function setup(&$model, $config = array()) { + if (is_string($config)) { + $config = array($config); + } + + $this->settings[$model->alias] = $config; + } +/** + * afterFind callback + * + * @param object $model + * @param array $created + * @param boolean $primary + * @return array + */ + public function afterFind(&$model, $results = array(), $primary = false) { + if ($primary && isset($results[0][$model->alias])) { + foreach ($results AS $i => $result) { + if (isset($results[$i][$model->alias]['body'])) { + $results[$i][$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + } elseif (isset($results[$model->alias])) { + if (isset($results[$model->alias]['body'])) { + $results[$model->alias]['body'] .= '

[Modified by ExampleBehavior]

'; + } + } + + return $results; + } + +} +?> \ No newline at end of file diff --git a/app/plugins/example/views/.svn/entries b/app/plugins/example/views/.svn/entries new file mode 100644 index 0000000..d9447e5 --- /dev/null +++ b/app/plugins/example/views/.svn/entries @@ -0,0 +1,37 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/views +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +helpers +dir + +example +dir + +elements +dir + diff --git a/app/plugins/example/views/elements/.svn/entries b/app/plugins/example/views/elements/.svn/entries new file mode 100644 index 0000000..90834cb --- /dev/null +++ b/app/plugins/example/views/elements/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/views/elements +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_menu.ctp +file + + + + +2010-09-04T08:55:28.000000Z +d529490f287230512f1195edd473b195 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +186 + +admin_tab_node.ctp +file + + + + +2010-09-04T08:55:28.000000Z +9aaf3494ce105808385d6ce63d3add78 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +48 + diff --git a/app/plugins/example/views/elements/.svn/text-base/admin_menu.ctp.svn-base b/app/plugins/example/views/elements/.svn/text-base/admin_menu.ctp.svn-base new file mode 100644 index 0000000..fbc23d6 --- /dev/null +++ b/app/plugins/example/views/elements/.svn/text-base/admin_menu.ctp.svn-base @@ -0,0 +1,5 @@ +
+
    +
  • link(__('Example 1', true), '#'); ?>
  • +
  • link(__('Example 2', true), '#'); ?>
  • +
\ No newline at end of file diff --git a/app/plugins/example/views/elements/.svn/text-base/admin_tab_node.ctp.svn-base b/app/plugins/example/views/elements/.svn/text-base/admin_tab_node.ctp.svn-base new file mode 100644 index 0000000..10f2e76 --- /dev/null +++ b/app/plugins/example/views/elements/.svn/text-base/admin_tab_node.ctp.svn-base @@ -0,0 +1,3 @@ +input('example_field'); +?> \ No newline at end of file diff --git a/app/plugins/example/views/elements/admin_menu.ctp b/app/plugins/example/views/elements/admin_menu.ctp new file mode 100644 index 0000000..30dba93 --- /dev/null +++ b/app/plugins/example/views/elements/admin_menu.ctp @@ -0,0 +1,5 @@ + +
    +
  • Html->link(__('Example 1', true), '#'); ?>
  • +
  • Html->link(__('Example 2', true), '#'); ?>
  • +
\ No newline at end of file diff --git a/app/plugins/example/views/elements/admin_tab_node.ctp b/app/plugins/example/views/elements/admin_tab_node.ctp new file mode 100644 index 0000000..eef9a9c --- /dev/null +++ b/app/plugins/example/views/elements/admin_tab_node.ctp @@ -0,0 +1,3 @@ +Form->input('example_field'); +?> \ No newline at end of file diff --git a/app/plugins/example/views/example/.svn/entries b/app/plugins/example/views/example/.svn/entries new file mode 100644 index 0000000..e7eaf38 --- /dev/null +++ b/app/plugins/example/views/example/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/views/example +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +78788ed66488e71c32fb17ea47d539ff +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +120 + +index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0db0a5f88972eea16176f8887d31cb57 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +114 + diff --git a/app/plugins/example/views/example/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/example/views/example/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..9362684 --- /dev/null +++ b/app/plugins/example/views/example/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,4 @@ +
+

+

+
\ No newline at end of file diff --git a/app/plugins/example/views/example/.svn/text-base/index.ctp.svn-base b/app/plugins/example/views/example/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..9607e26 --- /dev/null +++ b/app/plugins/example/views/example/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,4 @@ +
+

+

+
\ No newline at end of file diff --git a/app/plugins/example/views/example/admin_index.ctp b/app/plugins/example/views/example/admin_index.ctp new file mode 100644 index 0000000..9362684 --- /dev/null +++ b/app/plugins/example/views/example/admin_index.ctp @@ -0,0 +1,4 @@ +
+

+

+
\ No newline at end of file diff --git a/app/plugins/example/views/example/index.ctp b/app/plugins/example/views/example/index.ctp new file mode 100644 index 0000000..9607e26 --- /dev/null +++ b/app/plugins/example/views/example/index.ctp @@ -0,0 +1,4 @@ +
+

+

+
\ No newline at end of file diff --git a/app/plugins/example/views/helpers/.svn/entries b/app/plugins/example/views/helpers/.svn/entries new file mode 100644 index 0000000..657af6e --- /dev/null +++ b/app/plugins/example/views/helpers/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/views/helpers +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example.php +file + + + + +2010-09-04T08:55:28.000000Z +d0acd83fd728a6540ef050ff11c46c1a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2320 + diff --git a/app/plugins/example/views/helpers/.svn/text-base/example.php.svn-base b/app/plugins/example/views/helpers/.svn/text-base/example.php.svn-base new file mode 100644 index 0000000..cae8de7 --- /dev/null +++ b/app/plugins/example/views/helpers/.svn/text-base/example.php.svn-base @@ -0,0 +1,112 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Layout', + ); +/** + * Before render callback. Called before the view file is rendered. + * + * @return void + */ + public function beforeRender() { + } +/** + * After render callback. Called after the view file is rendered + * but before the layout has been rendered. + * + * @return void + */ + public function afterRender() { + } +/** + * Before layout callback. Called before the layout is rendered. + * + * @return void + */ + public function beforeLayout() { + } +/** + * After layout callback. Called after the layout has rendered. + * + * @return void + */ + public function afterLayout() { + } +/** + * Called after LayoutHelper::setNode() + * + * @return void + */ + public function afterSetNode() { + // field values can be changed from hooks + $this->Layout->setNodeField('title', $this->Layout->node('title') . ' [Modified by ExampleHelper]'); + } +/** + * Called before LayoutHelper::nodeInfo() + * + * @return string + */ + public function beforeNodeInfo() { + return '

beforeNodeInfo

'; + } +/** + * Called after LayoutHelper::nodeInfo() + * + * @return string + */ + public function afterNodeInfo() { + return '

afterNodeInfo

'; + } +/** + * Called before LayoutHelper::nodeBody() + * + * @return string + */ + public function beforeNodeBody() { + return '

beforeNodeBody

'; + } +/** + * Called after LayoutHelper::nodeBody() + * + * @return string + */ + public function afterNodeBody() { + return '

afterNodeBody

'; + } +/** + * Called before LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function beforeNodeMoreInfo() { + return '

beforeNodeMoreInfo

'; + } +/** + * Called after LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function afterNodeMoreInfo() { + return '

afterNodeMoreInfo

'; + } +} +?> \ No newline at end of file diff --git a/app/plugins/example/views/helpers/example.php b/app/plugins/example/views/helpers/example.php new file mode 100644 index 0000000..cae8de7 --- /dev/null +++ b/app/plugins/example/views/helpers/example.php @@ -0,0 +1,112 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExampleHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Layout', + ); +/** + * Before render callback. Called before the view file is rendered. + * + * @return void + */ + public function beforeRender() { + } +/** + * After render callback. Called after the view file is rendered + * but before the layout has been rendered. + * + * @return void + */ + public function afterRender() { + } +/** + * Before layout callback. Called before the layout is rendered. + * + * @return void + */ + public function beforeLayout() { + } +/** + * After layout callback. Called after the layout has rendered. + * + * @return void + */ + public function afterLayout() { + } +/** + * Called after LayoutHelper::setNode() + * + * @return void + */ + public function afterSetNode() { + // field values can be changed from hooks + $this->Layout->setNodeField('title', $this->Layout->node('title') . ' [Modified by ExampleHelper]'); + } +/** + * Called before LayoutHelper::nodeInfo() + * + * @return string + */ + public function beforeNodeInfo() { + return '

beforeNodeInfo

'; + } +/** + * Called after LayoutHelper::nodeInfo() + * + * @return string + */ + public function afterNodeInfo() { + return '

afterNodeInfo

'; + } +/** + * Called before LayoutHelper::nodeBody() + * + * @return string + */ + public function beforeNodeBody() { + return '

beforeNodeBody

'; + } +/** + * Called after LayoutHelper::nodeBody() + * + * @return string + */ + public function afterNodeBody() { + return '

afterNodeBody

'; + } +/** + * Called before LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function beforeNodeMoreInfo() { + return '

beforeNodeMoreInfo

'; + } +/** + * Called after LayoutHelper::nodeMoreInfo() + * + * @return string + */ + public function afterNodeMoreInfo() { + return '

afterNodeMoreInfo

'; + } +} +?> \ No newline at end of file diff --git a/app/plugins/example/webroot/.svn/entries b/app/plugins/example/webroot/.svn/entries new file mode 100644 index 0000000..cba90fb --- /dev/null +++ b/app/plugins/example/webroot/.svn/entries @@ -0,0 +1,37 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +css +dir + +img +dir + +js +dir + diff --git a/app/plugins/example/webroot/css/.svn/entries b/app/plugins/example/webroot/css/.svn/entries new file mode 100644 index 0000000..00202c0 --- /dev/null +++ b/app/plugins/example/webroot/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/webroot/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/plugins/example/webroot/css/.svn/text-base/empty.svn-base b/app/plugins/example/webroot/css/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/example/webroot/css/empty b/app/plugins/example/webroot/css/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/example/webroot/img/.svn/entries b/app/plugins/example/webroot/img/.svn/entries new file mode 100644 index 0000000..d98b176 --- /dev/null +++ b/app/plugins/example/webroot/img/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/webroot/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/plugins/example/webroot/img/.svn/text-base/empty.svn-base b/app/plugins/example/webroot/img/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/example/webroot/img/empty b/app/plugins/example/webroot/img/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/example/webroot/js/.svn/entries b/app/plugins/example/webroot/js/.svn/entries new file mode 100644 index 0000000..ea87901 --- /dev/null +++ b/app/plugins/example/webroot/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/example/webroot/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/plugins/example/webroot/js/.svn/text-base/empty.svn-base b/app/plugins/example/webroot/js/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/example/webroot/js/empty b/app/plugins/example/webroot/js/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/extensions/.svn/entries b/app/plugins/extensions/.svn/entries new file mode 100644 index 0000000..99bce05 --- /dev/null +++ b/app/plugins/extensions/.svn/entries @@ -0,0 +1,102 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +extensions_app_model.php +file + + + + +2010-09-04T08:55:28.000000Z +f4616374b87acff0ce224ce430ba34c2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +55 + +controllers +dir + +extensions_app_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +2dc0bc8205d8af123a28c8916d969beb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +65 + +views +dir + diff --git a/app/plugins/extensions/.svn/text-base/extensions_app_controller.php.svn-base b/app/plugins/extensions/.svn/text-base/extensions_app_controller.php.svn-base new file mode 100644 index 0000000..2988ede --- /dev/null +++ b/app/plugins/extensions/.svn/text-base/extensions_app_controller.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/extensions/.svn/text-base/extensions_app_model.php.svn-base b/app/plugins/extensions/.svn/text-base/extensions_app_model.php.svn-base new file mode 100644 index 0000000..c97ea2d --- /dev/null +++ b/app/plugins/extensions/.svn/text-base/extensions_app_model.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/extensions/controllers/.svn/entries b/app/plugins/extensions/controllers/.svn/entries new file mode 100644 index 0000000..12917f8 --- /dev/null +++ b/app/plugins/extensions/controllers/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions/controllers +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +extensions_plugins_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +0685a48fb1f639d1a6533910e7810eee +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8240 + +extensions_locales_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +eb006c15f89cc0c41dd3b4255458f187 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7624 + +extensions_themes_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +1054872d11fcb1259904c08caa7ce89b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7448 + diff --git a/app/plugins/extensions/controllers/.svn/text-base/extensions_locales_controller.php.svn-base b/app/plugins/extensions/controllers/.svn/text-base/extensions_locales_controller.php.svn-base new file mode 100644 index 0000000..4f2e3a2 --- /dev/null +++ b/app/plugins/extensions/controllers/.svn/text-base/extensions_locales_controller.php.svn-base @@ -0,0 +1,195 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsLocalesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsLocales'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting', 'User'); + + public function beforeFilter() { + parent::beforeFilter(); + App::import('Core', 'File'); + APP::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Locales', true)); + + $folder =& new Folder; + $folder->path = APP . 'locale'; + $content = $folder->read(); + $locales = $content['0']; + foreach($locales as $i => $locale) { + if (strstr($locale, '.') !== false) { + unset($locales[$i]); + } + } + $this->set(compact('content', 'locales')); + } + + public function admin_activate($locale = null) { + if ($locale == null || !is_dir(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale does not exist.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $file =& new File(APP . 'config' . DS . 'croogo_bootstrap.php', true); + $content = $file->read(); + + $content = str_replace("Configure::write('Config.language', '" . Configure::read('Site.locale') . "');", + "Configure::write('Config.language', '" . $locale . "');", $content); + if ($file->write($content)) { + $this->Setting->write('Site.locale', $locale); + $this->Session->setFlash(__("Locale '{$locale}' set as default", true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not edit croogo_bootstrap.php file.', true), 'default', array('class' => 'error')); + } + $this->redirect(array('action' => 'index')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new locale', true)); + + if (!empty($this->data)) { + $file = $this->data['Locale']['file']; + unset($this->data['Locale']['file']); + + // get locale name + $zip = zip_open($file['tmp_name']); + $locale = null; + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, 'LC_MESSAGES')) { + $zipEntryNameE = explode('/LC_MESSAGES', $zipEntryName); + if (isset($zipEntryNameE['0'])) { + $pathE = explode('/', $zipEntryNameE['0']); + if (isset($pathE[count($pathE) - 1])) { + $locale = $pathE[count($pathE) - 1]; + } + } + } + } + } + zip_close($zip); + + if (!$locale) { + $this->Session->setFlash(__('Invalid locale.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + if (is_dir(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, $locale . '/')) { + $zipEntryNameE = explode($locale . '/', $zipEntryName); + if (isset($zipEntryNameE['1'])) { + $path = APP . 'locale' . DS . $locale . DS . str_replace('/', DS, $zipEntryNameE['1']); + } else { + $path = APP . 'locale' . DS . $locale . DS; + } + + if (substr($path, strlen($path) - 1) == DS) { + // create directory + mkdir($path); + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + } + zip_close($zip); + + $this->redirect(array('action' => 'index')); + } + } + + public function admin_edit($locale = null) { + $this->set('title_for_layout', sprintf(__('Edit locale: %s', true), $locale)); + + if (!$locale) { + $this->Session->setFlash(__('Invalid locale.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if (!file_exists(APP . 'locale' . DS . $locale . DS . 'LC_MESSAGES' . DS . 'default.po')) { + $this->Session->setFlash(__('The file default.po does not exist.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $file =& new File(APP . 'locale' . DS . $locale . DS . 'LC_MESSAGES' . DS . 'default.po', true); + $content = $file->read(); + + if (!empty($this->data)) { + // save + if ($file->write($this->data['Locale']['content'])) { + $this->Session->setFlash(__('Locale updated successfully', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + + $this->set(compact('locale', 'content')); + } + + public function admin_delete($locale = null) { + if (!$locale) { + $this->Session->setFlash(__('Invalid locale', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $folder =& new Folder; + if ($folder->delete(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale deleted successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Local could not be deleted.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/controllers/.svn/text-base/extensions_plugins_controller.php.svn-base b/app/plugins/extensions/controllers/.svn/text-base/extensions_plugins_controller.php.svn-base new file mode 100644 index 0000000..713fa97 --- /dev/null +++ b/app/plugins/extensions/controllers/.svn/text-base/extensions_plugins_controller.php.svn-base @@ -0,0 +1,207 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsPluginsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsPlugins'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Setting', + 'User', + ); +/** + * Core plugins + * + * @var array + * @access public + */ + public $corePlugins = array( + 'acl', + 'extensions', + ); + + public function beforeFilter() { + parent::beforeFilter(); + + App::import('Core', 'File'); + APP::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Plugins', true)); + + $pluginAliases = $this->Croogo->getPlugins(); + $plugins = array(); + foreach ($pluginAliases AS $pluginAlias) { + $plugins[$pluginAlias] = $this->Croogo->getPluginData($pluginAlias); + } + $this->set('corePlugins', $this->corePlugins); + $this->set(compact('plugins')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new plugin', true)); + + if (!empty($this->data)) { + $file = $this->data['Plugin']['file']; + unset($this->data['Plugin']['file']); + + // get plugin name + $zip = zip_open($file['tmp_name']); + $plugin = null; + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + $searches = array('controllers', 'models', 'views'); + foreach ($searches AS $search) { + if (strstr($zipEntryName, $search)) { + $zipEntryNameE = explode('/' . $search, $zipEntryName); + if (isset($zipEntryNameE['0'])) { + $pathE = explode('/', $zipEntryNameE['0']); + if (isset($pathE[count($pathE) - 1])) { + $plugin = $pathE[count($pathE) - 1]; + } + } + } + } + } + } + zip_close($zip); + + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + $pluginName = $plugin; + if(preg_match('/^[\w\n]+-([\w\n_]+)-[0-9a-f]{7}$/', $plugin, $matches)) { + $pluginName = $matches[1]; + } + + if (is_dir(APP . 'plugins' . DS . $pluginName)) { + $this->Session->setFlash(__('Plugin already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, $plugin . '/')) { + $zipEntryNameE = explode($plugin . '/', $zipEntryName, 2); + if (isset($zipEntryNameE['1'])) { + $path = APP . 'plugins' . DS . $pluginName . DS . str_replace('/', DS, $zipEntryNameE['1']); + } else { + $path = APP . 'plugins' . DS . $pluginName . DS; + } + + if (substr($path, strlen($path) - 1) == DS) { + // create directory + mkdir($path); + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + } + zip_close($zip); + + $this->redirect(array('action' => 'index')); + } + } + + public function admin_delete($plugin = null) { + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Croogo->pluginIsActive($plugin)) { + $this->Session->setFlash(__('You cannot delete a plugin that is currently active.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $folder =& new Folder; + if ($folder->delete(APP . 'plugins' . DS . $plugin)) { + $this->Session->setFlash(__('Plugin deleted successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be deleted.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_toggle($plugin = null) { + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + $className = Inflector::camelize($plugin) . 'Activation'; + if (App::import('Plugin', $className)) { + $pluginActivation = new $className; + } + + if ($this->Croogo->pluginIsActive($plugin)) { + if (!isset($pluginActivation) || + (isset($pluginActivation) && method_exists($pluginActivation, 'beforeDeactivation') && $pluginActivation->beforeDeactivation($this))) { + $this->Croogo->removePluginBootstrap($plugin); + if (isset($pluginActivation) && method_exists($pluginActivation, 'onDeactivation')) { + $pluginActivation->onDeactivation($this); + } + $this->Session->setFlash(__('Plugin deactivated successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be deactivated. Please, try again.', true), 'default', array('class' => 'error')); + } + } else { + if (!isset($pluginActivation) || + (isset($pluginActivation) && method_exists($pluginActivation, 'beforeActivation') && $pluginActivation->beforeActivation($this))) { + $this->Croogo->addPluginBootstrap($plugin); + if (isset($pluginActivation) && method_exists($pluginActivation, 'onActivation')) { + $pluginActivation->onActivation($this); + } + $this->Session->setFlash(__('Plugin activated successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be activated. Please, try again.', true), 'default', array('class' => 'error')); + } + } + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/controllers/.svn/text-base/extensions_themes_controller.php.svn-base b/app/plugins/extensions/controllers/.svn/text-base/extensions_themes_controller.php.svn-base new file mode 100644 index 0000000..51d6feb --- /dev/null +++ b/app/plugins/extensions/controllers/.svn/text-base/extensions_themes_controller.php.svn-base @@ -0,0 +1,195 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsThemesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsThemes'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting', 'User'); + + public function beforeFilter() { + parent::beforeFilter(); + App::import('Core', 'File'); + App::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Themes', true)); + + $themes = $this->Croogo->getThemes(); + $themesData = array(); + $themesData[] = $this->Croogo->getThemeData(); + foreach ($themes AS $theme) { + $themesData[$theme] = $this->Croogo->getThemeData($theme); + } + + $currentTheme = $this->Croogo->getThemeData(Configure::read('Site.theme')); + $this->set(compact('themes', 'themesData', 'currentTheme')); + } + + public function admin_activate($alias = null) { + if ($alias == 'default') { + $alias = null; + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $siteTheme = $this->Setting->findByKey('Site.theme'); + $siteTheme['Setting']['value'] = $alias; + $this->Setting->save($siteTheme); + $this->Session->setFlash(__('Theme activated.', true), 'default', array('class' => 'success')); + + $this->redirect(array('action' => 'index')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new theme', true)); + + if (!empty($this->data)) { + $file = $this->data['Theme']['file']; + unset($this->data['Theme']['file']); + + // get Theme YML and alias + $ymlContent = ''; + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, 'theme.yml') && + zip_entry_open($zip, $zip_entry, "r")) { + $ymlContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + + $zipEntryNameE = explode('/', $zipEntryName); + if (isset($zipEntryNameE['0'])) { + $themeAlias = $zipEntryNameE[count($zipEntryNameE) - 3]; + } + } + } + zip_close($zip); + } + if ($ymlContent == '') { + $this->Session->setFlash(__('Invalid YML file', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + // check if alias already exists + if (!isset($themeAlias)) { + $this->Session->setFlash(__('Invalid zip archive', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (is_dir(APP.'views'.DS.'themed'.DS.$themeAlias) || + is_dir(APP.'webroot'.DS.'themed'.DS.$themeAlias)) { + $this->Session->setFlash(__('Directory with theme alias already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract it + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, $themeAlias . '/')) { + $zipEntryNameE = explode($themeAlias . '/', $zipEntryName); + if (isset($zipEntryNameE['1'])) { + $path = APP . 'views' . DS . 'themed' . DS . $themeAlias . DS . str_replace('/', DS, $zipEntryNameE['1']); + } else { + $path = APP . 'views' . DS . 'themed' . DS . $themeAlias . DS; + } + + if (substr($path, strlen($path) - 1) == DS) { + // create directory + mkdir($path); + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + zip_close($zip); + $this->Session->setFlash(__('Theme uploaded successfully.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + } + + public function admin_editor() { + $this->set('title_for_layout', __('Theme Editor', true)); + } + + public function admin_save() { + + } + + public function admin_delete($alias = null) { + if ($alias == null) { + $this->Session->setFlash(__('Invalid Theme.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if ($alias == 'default') { + $this->Session->setFlash(__('Default theme cannot be deleted.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } elseif ($alias == Configure::read('Site.theme')) { + $this->Session->setFlash(__('You cannot delete a theme that is currently active.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $paths = array( + APP . 'webroot' . DS . 'theme' . DS . $alias . DS, + APP . 'views' . DS . 'themed' . DS . $alias . DS, + ); + + $error = 0; + $folder =& new Folder; + foreach ($paths AS $path) { + if (is_dir($path)) { + if (!$folder->delete($path)) { + $error = 1; + } + } + } + + if ($error == 1) { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } else { + $this->Session->setFlash(__('Theme deleted successfully.', true), 'default', array('class' => 'success')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/controllers/extensions_locales_controller.php b/app/plugins/extensions/controllers/extensions_locales_controller.php new file mode 100644 index 0000000..331d414 --- /dev/null +++ b/app/plugins/extensions/controllers/extensions_locales_controller.php @@ -0,0 +1,195 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsLocalesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsLocales'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting', 'User'); + + public function beforeFilter() { + parent::beforeFilter(); + App::import('Core', 'File'); + APP::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Locales', true)); + + $folder =& new Folder; + $folder->path = APP . 'locale'; + $content = $folder->read(); + $locales = $content['0']; + foreach($locales as $i => $locale) { + if (strstr($locale, '.') !== false) { + unset($locales[$i]); + } + } + $this->set(compact('content', 'locales')); + } + + public function admin_activate($locale = null) { + if ($locale == null || !is_dir(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale does not exist.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $file =& new File(APP . 'config' . DS . 'croogo_bootstrap.php', true); + $content = $file->read(); + + $content = str_replace("Configure::write('Config.language', '" . Configure::read('Site.locale') . "');", + "Configure::write('Config.language', '" . $locale . "');", $content); + if ($file->write($content)) { + $this->Setting->write('Site.locale', $locale); + $this->Session->setFlash(sprintf(__("Locale '%s' set as default", true), $locale), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Could not edit croogo_bootstrap.php file.', true), 'default', array('class' => 'error')); + } + $this->redirect(array('action' => 'index')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new locale', true)); + + if (!empty($this->data)) { + $file = $this->data['Locale']['file']; + unset($this->data['Locale']['file']); + + // get locale name + $zip = zip_open($file['tmp_name']); + $locale = null; + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, 'LC_MESSAGES')) { + $zipEntryNameE = explode('/LC_MESSAGES', $zipEntryName); + if (isset($zipEntryNameE['0'])) { + $pathE = explode('/', $zipEntryNameE['0']); + if (isset($pathE[count($pathE) - 1])) { + $locale = $pathE[count($pathE) - 1]; + } + } + } + } + } + zip_close($zip); + + if (!$locale) { + $this->Session->setFlash(__('Invalid locale.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + if (is_dir(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, $locale . '/')) { + $zipEntryNameE = explode($locale . '/', $zipEntryName); + if (isset($zipEntryNameE['1'])) { + $path = APP . 'locale' . DS . $locale . DS . str_replace('/', DS, $zipEntryNameE['1']); + } else { + $path = APP . 'locale' . DS . $locale . DS; + } + + if (substr($path, strlen($path) - 1) == DS) { + // create directory + mkdir($path); + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + } + zip_close($zip); + + $this->redirect(array('action' => 'index')); + } + } + + public function admin_edit($locale = null) { + $this->set('title_for_layout', sprintf(__('Edit locale: %s', true), $locale)); + + if (!$locale) { + $this->Session->setFlash(__('Invalid locale.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + if (!file_exists(APP . 'locale' . DS . $locale . DS . 'LC_MESSAGES' . DS . 'default.po')) { + $this->Session->setFlash(__('The file default.po does not exist.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $file =& new File(APP . 'locale' . DS . $locale . DS . 'LC_MESSAGES' . DS . 'default.po', true); + $content = $file->read(); + + if (!empty($this->data)) { + // save + if ($file->write($this->data['Locale']['content'])) { + $this->Session->setFlash(__('Locale updated successfully', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + + $this->set(compact('locale', 'content')); + } + + public function admin_delete($locale = null) { + if (!$locale) { + $this->Session->setFlash(__('Invalid locale', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $folder =& new Folder; + if ($folder->delete(APP . 'locale' . DS . $locale)) { + $this->Session->setFlash(__('Locale deleted successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Local could not be deleted.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/controllers/extensions_plugins_controller.php b/app/plugins/extensions/controllers/extensions_plugins_controller.php new file mode 100644 index 0000000..0fa4e66 --- /dev/null +++ b/app/plugins/extensions/controllers/extensions_plugins_controller.php @@ -0,0 +1,212 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsPluginsController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsPlugins'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array( + 'Setting', + 'User', + ); +/** + * Core plugins + * + * @var array + * @access public + */ + public $corePlugins = array( + 'acl', + 'extensions', + ); + + public function beforeFilter() { + parent::beforeFilter(); + + App::import('Core', 'File'); + APP::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Plugins', true)); + + $pluginAliases = $this->Croogo->getPlugins(); + $plugins = array(); + foreach ($pluginAliases AS $pluginAlias) { + $plugins[$pluginAlias] = $this->Croogo->getPluginData($pluginAlias); + } + $this->set('corePlugins', $this->corePlugins); + $this->set(compact('plugins')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new plugin', true)); + + if (!empty($this->data)) { + $file = $this->data['Plugin']['file']; + unset($this->data['Plugin']['file']); + + // get plugin name and root + $zip = zip_open($file['tmp_name']); + $root = 0; + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + $searches = array('activation', 'bootstrap', 'routes', 'app_controller', 'app_model', 'app_helper'); + foreach ($searches AS $search) { + if (preg_match('/([A-Za-z0-9_]+)_'.$search.'\.php/', $zipEntryName, $matches)) { + $plugin = $matches[1]; + foreach (explode('/', $zipEntryName) as $folder) { + if (in_array($folder, array( + 'config', + $plugin.'_app_controller.php', + $plugin.'_app_model.php', + $plugin.'_app_helper.php' + ))) { + break; + } + $root++; + } + break; + } + } + } + } + zip_close($zip); + + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + $pluginName = $plugin; + + if (is_dir(APP . 'plugins' . DS . $pluginName)) { + $this->Session->setFlash(__('Plugin already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract + $zip = zip_open($file['tmp_name']); + if ($zip) { + // create root plugin dir + $path = APP . 'plugins' . DS . $pluginName . DS; + mkdir($path); + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + $zipEntryNameE = array_slice(explode('/', $zipEntryName), $root); + if (!empty($zipEntryNameE[count($zipEntryNameE)-1])) { + $path = APP . 'plugins' . DS . $pluginName . DS . implode(DS, $zipEntryNameE); + } else { + $path = APP . 'plugins' . DS . $pluginName . DS . implode(DS, $zipEntryNameE) . DS; + } + if (substr($path, strlen($path) - 1) == DS) { + // create directory + if (!is_dir($path)) { + mkdir($path); + } + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + zip_close($zip); + + $this->redirect(array('action' => 'index')); + } + } + + public function admin_delete($plugin = null) { + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + if ($this->Croogo->pluginIsActive($plugin)) { + $this->Session->setFlash(__('You cannot delete a plugin that is currently active.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $folder =& new Folder; + if ($folder->delete(APP . 'plugins' . DS . $plugin)) { + $this->Session->setFlash(__('Plugin deleted successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be deleted.', true), 'default', array('class' => 'error')); + } + + $this->redirect(array('action' => 'index')); + } + + public function admin_toggle($plugin = null) { + if (!$plugin) { + $this->Session->setFlash(__('Invalid plugin', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + $className = Inflector::camelize($plugin) . 'Activation'; + if (App::import('Plugin', $className)) { + $pluginActivation = new $className; + } + + if ($this->Croogo->pluginIsActive($plugin)) { + if (!isset($pluginActivation) || + (isset($pluginActivation) && method_exists($pluginActivation, 'beforeDeactivation') && $pluginActivation->beforeDeactivation($this))) { + $this->Croogo->removePluginBootstrap($plugin); + if (isset($pluginActivation) && method_exists($pluginActivation, 'onDeactivation')) { + $pluginActivation->onDeactivation($this); + } + $this->Session->setFlash(__('Plugin deactivated successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be deactivated. Please, try again.', true), 'default', array('class' => 'error')); + } + } else { + if (!isset($pluginActivation) || + (isset($pluginActivation) && method_exists($pluginActivation, 'beforeActivation') && $pluginActivation->beforeActivation($this))) { + $this->Croogo->addPluginBootstrap($plugin); + if (isset($pluginActivation) && method_exists($pluginActivation, 'onActivation')) { + $pluginActivation->onActivation($this); + } + $this->Session->setFlash(__('Plugin activated successfully.', true), 'default', array('class' => 'success')); + } else { + $this->Session->setFlash(__('Plugin could not be activated. Please, try again.', true), 'default', array('class' => 'error')); + } + } + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/controllers/extensions_themes_controller.php b/app/plugins/extensions/controllers/extensions_themes_controller.php new file mode 100644 index 0000000..51d6feb --- /dev/null +++ b/app/plugins/extensions/controllers/extensions_themes_controller.php @@ -0,0 +1,195 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class ExtensionsThemesController extends AppController { +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'ExtensionsThemes'; +/** + * Models used by the Controller + * + * @var array + * @access public + */ + public $uses = array('Setting', 'User'); + + public function beforeFilter() { + parent::beforeFilter(); + App::import('Core', 'File'); + App::import('Core', 'Folder'); + } + + public function admin_index() { + $this->set('title_for_layout', __('Themes', true)); + + $themes = $this->Croogo->getThemes(); + $themesData = array(); + $themesData[] = $this->Croogo->getThemeData(); + foreach ($themes AS $theme) { + $themesData[$theme] = $this->Croogo->getThemeData($theme); + } + + $currentTheme = $this->Croogo->getThemeData(Configure::read('Site.theme')); + $this->set(compact('themes', 'themesData', 'currentTheme')); + } + + public function admin_activate($alias = null) { + if ($alias == 'default') { + $alias = null; + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + $siteTheme = $this->Setting->findByKey('Site.theme'); + $siteTheme['Setting']['value'] = $alias; + $this->Setting->save($siteTheme); + $this->Session->setFlash(__('Theme activated.', true), 'default', array('class' => 'success')); + + $this->redirect(array('action' => 'index')); + } + + public function admin_add() { + $this->set('title_for_layout', __('Upload a new theme', true)); + + if (!empty($this->data)) { + $file = $this->data['Theme']['file']; + unset($this->data['Theme']['file']); + + // get Theme YML and alias + $ymlContent = ''; + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, 'theme.yml') && + zip_entry_open($zip, $zip_entry, "r")) { + $ymlContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + + $zipEntryNameE = explode('/', $zipEntryName); + if (isset($zipEntryNameE['0'])) { + $themeAlias = $zipEntryNameE[count($zipEntryNameE) - 3]; + } + } + } + zip_close($zip); + } + if ($ymlContent == '') { + $this->Session->setFlash(__('Invalid YML file', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + // check if alias already exists + if (!isset($themeAlias)) { + $this->Session->setFlash(__('Invalid zip archive', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (is_dir(APP.'views'.DS.'themed'.DS.$themeAlias) || + is_dir(APP.'webroot'.DS.'themed'.DS.$themeAlias)) { + $this->Session->setFlash(__('Directory with theme alias already exists.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'add')); + } + + // extract it + $zip = zip_open($file['tmp_name']); + if ($zip) { + while ($zip_entry = zip_read($zip)) { + $zipEntryName = zip_entry_name($zip_entry); + if (strstr($zipEntryName, $themeAlias . '/')) { + $zipEntryNameE = explode($themeAlias . '/', $zipEntryName); + if (isset($zipEntryNameE['1'])) { + $path = APP . 'views' . DS . 'themed' . DS . $themeAlias . DS . str_replace('/', DS, $zipEntryNameE['1']); + } else { + $path = APP . 'views' . DS . 'themed' . DS . $themeAlias . DS; + } + + if (substr($path, strlen($path) - 1) == DS) { + // create directory + mkdir($path); + } else { + // create file + if (zip_entry_open($zip, $zip_entry, 'r')) { + $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + touch($path); + $fh = fopen($path, 'w'); + fwrite($fh, $fileContent); + fclose($fh); + zip_entry_close($zip_entry); + } + } + } + } + zip_close($zip); + $this->Session->setFlash(__('Theme uploaded successfully.', true), 'default', array('class' => 'success')); + $this->redirect(array('action' => 'index')); + } + } + } + + public function admin_editor() { + $this->set('title_for_layout', __('Theme Editor', true)); + } + + public function admin_save() { + + } + + public function admin_delete($alias = null) { + if ($alias == null) { + $this->Session->setFlash(__('Invalid Theme.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + if (!isset($this->params['named']['token']) || ($this->params['named']['token'] != $this->params['_Token']['key'])) { + $blackHoleCallback = $this->Security->blackHoleCallback; + $this->$blackHoleCallback(); + } + + if ($alias == 'default') { + $this->Session->setFlash(__('Default theme cannot be deleted.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } elseif ($alias == Configure::read('Site.theme')) { + $this->Session->setFlash(__('You cannot delete a theme that is currently active.', true), 'default', array('class' => 'error')); + $this->redirect(array('action' => 'index')); + } + + $paths = array( + APP . 'webroot' . DS . 'theme' . DS . $alias . DS, + APP . 'views' . DS . 'themed' . DS . $alias . DS, + ); + + $error = 0; + $folder =& new Folder; + foreach ($paths AS $path) { + if (is_dir($path)) { + if (!$folder->delete($path)) { + $error = 1; + } + } + } + + if ($error == 1) { + $this->Session->setFlash(__('An error occurred.', true), 'default', array('class' => 'error')); + } else { + $this->Session->setFlash(__('Theme deleted successfully.', true), 'default', array('class' => 'success')); + } + + $this->redirect(array('action' => 'index')); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/extensions/extensions_app_controller.php b/app/plugins/extensions/extensions_app_controller.php new file mode 100644 index 0000000..2988ede --- /dev/null +++ b/app/plugins/extensions/extensions_app_controller.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/extensions/extensions_app_model.php b/app/plugins/extensions/extensions_app_model.php new file mode 100644 index 0000000..c97ea2d --- /dev/null +++ b/app/plugins/extensions/extensions_app_model.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/extensions/views/.svn/entries b/app/plugins/extensions/views/.svn/entries new file mode 100644 index 0000000..4bbf28c --- /dev/null +++ b/app/plugins/extensions/views/.svn/entries @@ -0,0 +1,37 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions/views +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +extensions_plugins +dir + +extensions_locales +dir + +extensions_themes +dir + diff --git a/app/plugins/extensions/views/extensions_locales/.svn/entries b/app/plugins/extensions/views/extensions_locales/.svn/entries new file mode 100644 index 0000000..1a7c4dc --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions/views/extensions_locales +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +fe7d6f837561ebfa71fbea1fb7c06af7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +652 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +49d0fecc56ef706e0ce7e569608db8cb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1567 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +54c3600400b1382defb814902d5c7c67 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +548 + diff --git a/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_add.ctp.svn-base b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..6dc9848 --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,19 @@ +
+

+ create('Locale', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_locales', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ input('Locale.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_edit.ctp.svn-base b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..d0c4a82 --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,24 @@ +
+

+ create('Locale', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_locales', + 'action' => 'edit', + $locale + ), + )); + ?> +
+ input('Locale.content', array( + 'label' => __('Content', true), + 'value' => $content, + 'type' => 'textarea', + 'class' => 'content', + )); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..b5a25bc --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,53 @@ +
+

+ +
+
    +
  • link(__('Upload', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + '', + __('Locale', true), + __('Default', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($locales AS $locale) { + $actions = ''; + $actions .= $html->link(__('Activate', true), array( + 'action' => 'activate', + $locale, + 'token' => $this->params['_Token']['key'], + )); + $actions .= ' ' . $html->link(__('Edit', true), array('action' => 'edit', $locale)); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $locale, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + if ($locale == Configure::read('Site.locale')) { + $status = $layout->status(1); + } else { + $status = $layout->status(0); + } + + $rows[] = array( + '', + $locale, + $status, + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_locales/admin_add.ctp b/app/plugins/extensions/views/extensions_locales/admin_add.ctp new file mode 100644 index 0000000..6995306 --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/admin_add.ctp @@ -0,0 +1,29 @@ +
+

+ Form->create('Locale', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_locales', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ Form->input('Locale.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ +
+ Form->end(__('Upload', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_locales/admin_edit.ctp b/app/plugins/extensions/views/extensions_locales/admin_edit.ctp new file mode 100644 index 0000000..a8c3f3d --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/admin_edit.ctp @@ -0,0 +1,34 @@ +
+

+ Form->create('Locale', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_locales', + 'action' => 'edit', + $locale + ), + )); + ?> +
+ Form->input('Locale.content', array( + 'label' => __('Content', true), + 'value' => $content, + 'type' => 'textarea', + 'class' => 'content', + )); + ?> +
+ +
+ Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_locales/admin_index.ctp b/app/plugins/extensions/views/extensions_locales/admin_index.ctp new file mode 100644 index 0000000..b114f06 --- /dev/null +++ b/app/plugins/extensions/views/extensions_locales/admin_index.ctp @@ -0,0 +1,53 @@ +
+

+ +
+
    +
  • Html->link(__('Upload', true), array('action'=>'add')); ?>
  • +
+
+ + + Html->tableHeaders(array( + '', + __('Locale', true), + __('Default', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($locales AS $locale) { + $actions = ''; + $actions .= $this->Html->link(__('Activate', true), array( + 'action' => 'activate', + $locale, + 'token' => $this->params['_Token']['key'], + )); + $actions .= ' ' . $this->Html->link(__('Edit', true), array('action' => 'edit', $locale)); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $locale, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + if ($locale == Configure::read('Site.locale')) { + $status = $this->Layout->status(1); + } else { + $status = $this->Layout->status(0); + } + + $rows[] = array( + '', + $locale, + $status, + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_plugins/.svn/entries b/app/plugins/extensions/views/extensions_plugins/.svn/entries new file mode 100644 index 0000000..72ee7ca --- /dev/null +++ b/app/plugins/extensions/views/extensions_plugins/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions/views/extensions_plugins +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0d1f19311bfd60e1a4f43830cee32844 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2111 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +462e75d75f48d92d8aae0a622517e7ea +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +548 + diff --git a/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_add.ctp.svn-base b/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..3ca1ec1 --- /dev/null +++ b/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,19 @@ +
+

+ create('Plugin', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_plugins', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ input('Plugin.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..0fa67da --- /dev/null +++ b/app/plugins/extensions/views/extensions_plugins/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,69 @@ +
+

+ +
+
    +
  • link(__('Upload', true), array('action'=>'add')); ?>
  • +
+
+ + + tableHeaders(array( + '', + __('Alias', true), + __('Name', true), + __('Description', true), + __('Active', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($plugins AS $pluginAlias => $pluginData) { + if (in_array($pluginAlias, $corePlugins)) { + continue; + } + + if ($pluginData['active']) { + $icon = 'tick.png'; + $toggleText = __('Deactivate', true); + } else { + $icon = 'cross.png'; + $toggleText = __('Activate', true); + } + $iconImage = $html->image('icons/'.$icon); + + $actions = ''; + $actions .= ' ' . $html->link($toggleText, array( + 'action' => 'toggle', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + )); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + '', + $pluginAlias, + $pluginData['name'], + $pluginData['description'], + $html->link($iconImage, array( + 'action' => 'toggle', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + ), array( + 'escape' => false, + )), + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_plugins/admin_add.ctp b/app/plugins/extensions/views/extensions_plugins/admin_add.ctp new file mode 100644 index 0000000..19e9dc7 --- /dev/null +++ b/app/plugins/extensions/views/extensions_plugins/admin_add.ctp @@ -0,0 +1,29 @@ +
+

+ Form->create('Plugin', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_plugins', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ Form->input('Plugin.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ +
+ Form->end(__('Upload', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_plugins/admin_index.ctp b/app/plugins/extensions/views/extensions_plugins/admin_index.ctp new file mode 100644 index 0000000..ddb52aa --- /dev/null +++ b/app/plugins/extensions/views/extensions_plugins/admin_index.ctp @@ -0,0 +1,69 @@ +
+

+ +
+
    +
  • Html->link(__('Upload', true), array('action'=>'add')); ?>
  • +
+
+ + + Html->tableHeaders(array( + '', + __('Alias', true), + __('Name', true), + __('Description', true), + __('Active', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($plugins AS $pluginAlias => $pluginData) { + if (in_array($pluginAlias, $corePlugins)) { + continue; + } + + if ($pluginData['active']) { + $icon = 'tick.png'; + $toggleText = __('Deactivate', true); + } else { + $icon = 'cross.png'; + $toggleText = __('Activate', true); + } + $iconImage = $this->Html->image('icons/'.$icon); + + $actions = ''; + $actions .= ' ' . $this->Html->link($toggleText, array( + 'action' => 'toggle', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + )); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + '', + $pluginAlias, + $pluginData['name'], + $pluginData['description'], + $this->Html->link($iconImage, array( + 'action' => 'toggle', + $pluginAlias, + 'token' => $this->params['_Token']['key'], + ), array( + 'escape' => false, + )), + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_themes/.svn/entries b/app/plugins/extensions/views/extensions_themes/.svn/entries new file mode 100644 index 0000000..f02088b --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/extensions/views/extensions_themes +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_editor.ctp +file + + + + +2010-09-04T08:55:28.000000Z +2b66ef9813a552135a545dfcc1df70f9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +89 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +a09ecf198905dda773ebb1d005e4d538 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3696 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +048f650ebd1a827b97c30d1693a23a1b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +544 + diff --git a/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_add.ctp.svn-base b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..e3f9a99 --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,19 @@ +
+

+ create('Theme', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_themes', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ input('Theme.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ end('Submit');?> +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_editor.ctp.svn-base b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_editor.ctp.svn-base new file mode 100644 index 0000000..51aa6cd --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_editor.ctp.svn-base @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_index.ctp.svn-base b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..ff6aea3 --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,76 @@ +
+

+ +
+
    +
  • link(__('Upload', true), array('action' => 'add')); ?>
  • + +
+
+ +
+

+
+ image($currentTheme['screenshot']); + } else { + echo $html->tag('div', $html->image('/theme/' . Configure::read('Site.theme') . '/img/' . $currentTheme['screenshot']), array('class' => 'screenshot')); + } + ?> +
+

+ 0) { + $author = $html->link($author, $currentTheme['authorUrl']); + } + echo $currentTheme['name'] . ' ' . __('by', true) . ' ' . $author; + ?> +

+

+

+
+
+ +
+

+
    + $theme) { + if ($themeAlias != Configure::read('Site.theme') && + (!isset($theme['adminOnly']) || $theme['adminOnly'] != 'true') && + !($themeAlias == 'default' && !Configure::read('Site.theme'))) { + echo '
  • '; + if ($themeAlias == 'default') { + echo $html->tag('div', $html->image($theme['screenshot']), array('class' => 'screenshot')); + } else { + echo $html->tag('div', $html->image('/theme/' . $themeAlias . '/img/' . $theme['screenshot']), array('class' => 'screenshot')); + } + $author = $theme['author']; + if (isset($theme['authorUrl']) && strlen($theme['authorUrl']) > 0) { + $author = $html->link($author, $theme['authorUrl']); + } + echo $html->tag('h3', $theme['name'] . ' ' . __('by', true) . ' ' . $author, array()); + echo $html->tag('p', $theme['description'], array('class' => 'description')); + echo $html->tag('p', __('Regions supported: ', true) . implode(', ', $theme['regions']), array('class' => 'regions')); + echo $html->tag('div', + $html->link(__('Activate', true), array( + 'action' => 'activate', + $themeAlias, + 'token' => $this->params['_Token']['key'], + )) . + $html->link(__('Delete', true), array( + 'action' => 'delete', + $themeAlias, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)), + array('class' => 'actions')); + echo '
  • '; + } + } + ?> +
+
+
+
diff --git a/app/plugins/extensions/views/extensions_themes/admin_add.ctp b/app/plugins/extensions/views/extensions_themes/admin_add.ctp new file mode 100644 index 0000000..58368ce --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/admin_add.ctp @@ -0,0 +1,29 @@ +
+

+ Form->create('Theme', array( + 'url' => array( + 'plugin' => 'extensions', + 'controller' => 'extensions_themes', + 'action' => 'add', + ), + 'type' => 'file', + )); + ?> +
+ Form->input('Theme.file', array('label' => __('Upload', true), 'type' => 'file',)); + ?> +
+ +
+ Form->end(__('Upload', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
+
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_themes/admin_editor.ctp b/app/plugins/extensions/views/extensions_themes/admin_editor.ctp new file mode 100644 index 0000000..51aa6cd --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/admin_editor.ctp @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file diff --git a/app/plugins/extensions/views/extensions_themes/admin_index.ctp b/app/plugins/extensions/views/extensions_themes/admin_index.ctp new file mode 100644 index 0000000..fa6b316 --- /dev/null +++ b/app/plugins/extensions/views/extensions_themes/admin_index.ctp @@ -0,0 +1,76 @@ +
+

+ +
+
    +
  • Html->link(__('Upload', true), array('action' => 'add')); ?>
  • + +
+
+ +
+

+
+ Html->image($currentTheme['screenshot']); + } else { + echo $this->Html->tag('div', $this->Html->image('/theme/' . Configure::read('Site.theme') . '/img/' . $currentTheme['screenshot']), array('class' => 'screenshot')); + } + ?> +
+

+ 0) { + $author = $this->Html->link($author, $currentTheme['authorUrl']); + } + echo $currentTheme['name'] . ' ' . __('by', true) . ' ' . $author; + ?> +

+

+

+
+
+ +
+

+
    + $theme) { + if ($themeAlias != Configure::read('Site.theme') && + (!isset($theme['adminOnly']) || $theme['adminOnly'] != 'true') && + !($themeAlias == 'default' && !Configure::read('Site.theme'))) { + echo '
  • '; + if ($themeAlias == 'default') { + echo $this->Html->tag('div', $this->Html->image($theme['screenshot']), array('class' => 'screenshot')); + } else { + echo $this->Html->tag('div', $this->Html->image('/theme/' . $themeAlias . '/img/' . $theme['screenshot']), array('class' => 'screenshot')); + } + $author = $theme['author']; + if (isset($theme['authorUrl']) && strlen($theme['authorUrl']) > 0) { + $author = $this->Html->link($author, $theme['authorUrl']); + } + echo $this->Html->tag('h3', $theme['name'] . ' ' . __('by', true) . ' ' . $author, array()); + echo $this->Html->tag('p', $theme['description'], array('class' => 'description')); + echo $this->Html->tag('p', __('Regions supported: ', true) . implode(', ', $theme['regions']), array('class' => 'regions')); + echo $this->Html->tag('div', + $this->Html->link(__('Activate', true), array( + 'action' => 'activate', + $themeAlias, + 'token' => $this->params['_Token']['key'], + )) . + $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $themeAlias, + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)), + array('class' => 'actions')); + echo '
  • '; + } + } + ?> +
+
+
+
diff --git a/app/plugins/install/.DS_Store b/app/plugins/install/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e14f38bc08994606e0fa68f818048f262280085c GIT binary patch literal 6148 zcmeHK&2tn*6n}5Cgq~TDP6SCPkil41DArV11yX#-k_7p*pv;C1Cc4h-XMtzu)Y1 zZvy~Mw!HlS8~_+Kg;|@rzY*nEZH;8ih(b)B;lpCJBOBEqs;-Gn2T}%72G$z`>f7yy z8blDn73lqbA5|NHFXQp?pD@#x-O#_0F`I2#DEpxobta=$=*jt+rKmIGd!p(#-%j+{ zjazckZ6=C7-F8f}*RN>o~mkWhg^Ug$JCGRXx6bgCgz`^}1E0)D9 z{w>?~!r0N%C3pFQl^Y*w>X3GtL^c~-g`1@GR1(Ox*@-gs)k=O@t;Di(n@(@F&sO+g z+ZUY+jo6Puc}X-SVTEszRM(kW6kco!<*)F8nj6$wfg6hxK``TA7qVQ7f>u40bFsJ@ ztC6>4)QqQ+!3yUsDc%$m@3+M?Wyv|89;d=MSnSu$&urlXgU@c=_T26l_l~_XacpX? z7S-z_jO9BXg`an2e4!yi;ms>^swt@VN|N$t1Gg%I();up%5A;iQs~yjf(m>i^872l z@SbiT8s3rHX+K|X`_iulVz#3QzwFAI2t7YsoTYSel?`Ct;v04Jp4t+E-jwb-oy4$#?M*2|LJSThj-W~Y^!%2 zmYP>*p3I%H)HFC!9M$jA8YzyOx5{7`#-Io#SO5VHxD9vUE_@94;30ek-@te91N;a- z!*B3A`~iPr1{n_G5Dw!`+=aVw6!+pj%;Ojy!U;T#NAMWFj;HVpp2hPxiFP`HIjz}bt<7w zMRUbKolfJ9i7OiHYSig~$;|W|Gc%eS3MRADxRZnf7B!}Q%0S9MF9Utr6z(CD#@I!Yl>56twZfyYD!dGS7VYwojHyZMIFUM)Dj_|qZGoT V!LCLcAxZxTBs8R5%D}(Mz+cfK<`4h? literal 0 HcmV?d00001 diff --git a/app/plugins/install/.svn/entries b/app/plugins/install/.svn/entries new file mode 100644 index 0000000..fab78b1 --- /dev/null +++ b/app/plugins/install/.svn/entries @@ -0,0 +1,108 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +install_app_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +07ab975b29fbc06411cb8d369ce27f57 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +108 + +webroot +dir + +models +dir + +controllers +dir + +install_app_model.php +file + + + + +2010-09-04T08:55:28.000000Z +d4dafdd368af826fa486ecd9dab08a61 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +52 + +views +dir + diff --git a/app/plugins/install/.svn/text-base/install_app_controller.php.svn-base b/app/plugins/install/.svn/text-base/install_app_controller.php.svn-base new file mode 100644 index 0000000..e76e740 --- /dev/null +++ b/app/plugins/install/.svn/text-base/install_app_controller.php.svn-base @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/app/plugins/install/.svn/text-base/install_app_model.php.svn-base b/app/plugins/install/.svn/text-base/install_app_model.php.svn-base new file mode 100644 index 0000000..dbd2f46 --- /dev/null +++ b/app/plugins/install/.svn/text-base/install_app_model.php.svn-base @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/install/config/.DS_Store b/app/plugins/install/config/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7fdec4623181a1dd222bf6941e176628c56528c2 GIT binary patch literal 6148 zcmeH~JqiLr422WjLa^D=avBfd4F=H@cmaR56fD$!j_%73f~&QNyg>3zG82}4#m+`V zbbTLIBE5*r;6_lA49C} z?O@4sHQ9pEE}FxK=9AT?7??)8Xh8zg>R_M(RA8jQH1gi=|1JE}{6A`8N(HFEpDCc- zX17`6rSfildp)b~vuf)G2mLt0%TE9jyNVZZH|!T%fHm2IsKEFm;4&~!fv+m?01d '1', + 'parent_id' => '', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'controllers', + 'lft' => '1', + 'rght' => '352' + ), + array( + 'id' => '2', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Attachments', + 'lft' => '2', + 'rght' => '13' + ), + array( + 'id' => '3', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '4', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '7', + 'rght' => '8' + ), + array( + 'id' => '6', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '9', + 'rght' => '10' + ), + array( + 'id' => '7', + 'parent_id' => '2', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '11', + 'rght' => '12' + ), + array( + 'id' => '8', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Blocks', + 'lft' => '14', + 'rght' => '29' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '15', + 'rght' => '16' + ), + array( + 'id' => '10', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '17', + 'rght' => '18' + ), + array( + 'id' => '11', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '19', + 'rght' => '20' + ), + array( + 'id' => '12', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '21', + 'rght' => '22' + ), + array( + 'id' => '13', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '23', + 'rght' => '24' + ), + array( + 'id' => '14', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '25', + 'rght' => '26' + ), + array( + 'id' => '15', + 'parent_id' => '8', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '27', + 'rght' => '28' + ), + array( + 'id' => '16', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Comments', + 'lft' => '30', + 'rght' => '45' + ), + array( + 'id' => '17', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '31', + 'rght' => '32' + ), + array( + 'id' => '18', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '33', + 'rght' => '34' + ), + array( + 'id' => '19', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '35', + 'rght' => '36' + ), + array( + 'id' => '20', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '37', + 'rght' => '38' + ), + array( + 'id' => '21', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '39', + 'rght' => '40' + ), + array( + 'id' => '22', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '41', + 'rght' => '42' + ), + array( + 'id' => '23', + 'parent_id' => '16', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'delete', + 'lft' => '43', + 'rght' => '44' + ), + array( + 'id' => '24', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Contacts', + 'lft' => '46', + 'rght' => '57' + ), + array( + 'id' => '25', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '47', + 'rght' => '48' + ), + array( + 'id' => '26', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '49', + 'rght' => '50' + ), + array( + 'id' => '27', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '51', + 'rght' => '52' + ), + array( + 'id' => '28', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '53', + 'rght' => '54' + ), + array( + 'id' => '29', + 'parent_id' => '24', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '55', + 'rght' => '56' + ), + array( + 'id' => '30', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Filemanager', + 'lft' => '58', + 'rght' => '79' + ), + array( + 'id' => '31', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '59', + 'rght' => '60' + ), + array( + 'id' => '32', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_browse', + 'lft' => '61', + 'rght' => '62' + ), + array( + 'id' => '33', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editfile', + 'lft' => '63', + 'rght' => '64' + ), + array( + 'id' => '34', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_upload', + 'lft' => '65', + 'rght' => '66' + ), + array( + 'id' => '35', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_file', + 'lft' => '67', + 'rght' => '68' + ), + array( + 'id' => '36', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_directory', + 'lft' => '69', + 'rght' => '70' + ), + array( + 'id' => '37', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_rename', + 'lft' => '71', + 'rght' => '72' + ), + array( + 'id' => '38', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_directory', + 'lft' => '73', + 'rght' => '74' + ), + array( + 'id' => '39', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create_file', + 'lft' => '75', + 'rght' => '76' + ), + array( + 'id' => '40', + 'parent_id' => '30', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_chmod', + 'lft' => '77', + 'rght' => '78' + ), + array( + 'id' => '41', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Languages', + 'lft' => '80', + 'rght' => '95' + ), + array( + 'id' => '42', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '81', + 'rght' => '82' + ), + array( + 'id' => '43', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '83', + 'rght' => '84' + ), + array( + 'id' => '44', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '85', + 'rght' => '86' + ), + array( + 'id' => '45', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '87', + 'rght' => '88' + ), + array( + 'id' => '46', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '89', + 'rght' => '90' + ), + array( + 'id' => '47', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '91', + 'rght' => '92' + ), + array( + 'id' => '48', + 'parent_id' => '41', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_select', + 'lft' => '93', + 'rght' => '94' + ), + array( + 'id' => '49', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Links', + 'lft' => '96', + 'rght' => '111' + ), + array( + 'id' => '50', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '97', + 'rght' => '98' + ), + array( + 'id' => '51', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '99', + 'rght' => '100' + ), + array( + 'id' => '52', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '101', + 'rght' => '102' + ), + array( + 'id' => '53', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '103', + 'rght' => '104' + ), + array( + 'id' => '54', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '105', + 'rght' => '106' + ), + array( + 'id' => '55', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '107', + 'rght' => '108' + ), + array( + 'id' => '56', + 'parent_id' => '49', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '109', + 'rght' => '110' + ), + array( + 'id' => '57', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Menus', + 'lft' => '112', + 'rght' => '121' + ), + array( + 'id' => '58', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '113', + 'rght' => '114' + ), + array( + 'id' => '59', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '115', + 'rght' => '116' + ), + array( + 'id' => '60', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '117', + 'rght' => '118' + ), + array( + 'id' => '61', + 'parent_id' => '57', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '119', + 'rght' => '120' + ), + array( + 'id' => '62', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Messages', + 'lft' => '122', + 'rght' => '131' + ), + array( + 'id' => '63', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '123', + 'rght' => '124' + ), + array( + 'id' => '64', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '125', + 'rght' => '126' + ), + array( + 'id' => '65', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '127', + 'rght' => '128' + ), + array( + 'id' => '66', + 'parent_id' => '62', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '129', + 'rght' => '130' + ), + array( + 'id' => '67', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Nodes', + 'lft' => '132', + 'rght' => '161' + ), + array( + 'id' => '68', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '133', + 'rght' => '134' + ), + array( + 'id' => '69', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_create', + 'lft' => '135', + 'rght' => '136' + ), + array( + 'id' => '70', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '137', + 'rght' => '138' + ), + array( + 'id' => '71', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '139', + 'rght' => '140' + ), + array( + 'id' => '72', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_update_paths', + 'lft' => '141', + 'rght' => '142' + ), + array( + 'id' => '73', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '143', + 'rght' => '144' + ), + array( + 'id' => '74', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete_meta', + 'lft' => '145', + 'rght' => '146' + ), + array( + 'id' => '75', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add_meta', + 'lft' => '147', + 'rght' => '148' + ), + array( + 'id' => '76', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '149', + 'rght' => '150' + ), + array( + 'id' => '77', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '151', + 'rght' => '152' + ), + array( + 'id' => '78', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'term', + 'lft' => '153', + 'rght' => '154' + ), + array( + 'id' => '79', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'promoted', + 'lft' => '155', + 'rght' => '156' + ), + array( + 'id' => '80', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'search', + 'lft' => '157', + 'rght' => '158' + ), + array( + 'id' => '81', + 'parent_id' => '67', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '159', + 'rght' => '160' + ), + array( + 'id' => '82', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Regions', + 'lft' => '162', + 'rght' => '171' + ), + array( + 'id' => '83', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '163', + 'rght' => '164' + ), + array( + 'id' => '84', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '165', + 'rght' => '166' + ), + array( + 'id' => '85', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '167', + 'rght' => '168' + ), + array( + 'id' => '86', + 'parent_id' => '82', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '169', + 'rght' => '170' + ), + array( + 'id' => '87', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Roles', + 'lft' => '172', + 'rght' => '181' + ), + array( + 'id' => '88', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '173', + 'rght' => '174' + ), + array( + 'id' => '89', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '175', + 'rght' => '176' + ), + array( + 'id' => '90', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '177', + 'rght' => '178' + ), + array( + 'id' => '91', + 'parent_id' => '87', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '179', + 'rght' => '180' + ), + array( + 'id' => '92', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Settings', + 'lft' => '182', + 'rght' => '201' + ), + array( + 'id' => '93', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_dashboard', + 'lft' => '183', + 'rght' => '184' + ), + array( + 'id' => '94', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '185', + 'rght' => '186' + ), + array( + 'id' => '95', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_view', + 'lft' => '187', + 'rght' => '188' + ), + array( + 'id' => '96', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '189', + 'rght' => '190' + ), + array( + 'id' => '97', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '191', + 'rght' => '192' + ), + array( + 'id' => '98', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '193', + 'rght' => '194' + ), + array( + 'id' => '99', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_prefix', + 'lft' => '195', + 'rght' => '196' + ), + array( + 'id' => '100', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '197', + 'rght' => '198' + ), + array( + 'id' => '101', + 'parent_id' => '92', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '199', + 'rght' => '200' + ), + array( + 'id' => '102', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Terms', + 'lft' => '202', + 'rght' => '217' + ), + array( + 'id' => '103', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '203', + 'rght' => '204' + ), + array( + 'id' => '104', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '205', + 'rght' => '206' + ), + array( + 'id' => '105', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '207', + 'rght' => '208' + ), + array( + 'id' => '106', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '209', + 'rght' => '210' + ), + array( + 'id' => '107', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_moveup', + 'lft' => '211', + 'rght' => '212' + ), + array( + 'id' => '108', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_movedown', + 'lft' => '213', + 'rght' => '214' + ), + array( + 'id' => '109', + 'parent_id' => '102', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_process', + 'lft' => '215', + 'rght' => '216' + ), + array( + 'id' => '110', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Types', + 'lft' => '218', + 'rght' => '227' + ), + array( + 'id' => '111', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '219', + 'rght' => '220' + ), + array( + 'id' => '112', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '221', + 'rght' => '222' + ), + array( + 'id' => '113', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '223', + 'rght' => '224' + ), + array( + 'id' => '114', + 'parent_id' => '110', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '225', + 'rght' => '226' + ), + array( + 'id' => '115', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Users', + 'lft' => '228', + 'rght' => '261' + ), + array( + 'id' => '116', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '229', + 'rght' => '230' + ), + array( + 'id' => '117', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '231', + 'rght' => '232' + ), + array( + 'id' => '118', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '233', + 'rght' => '234' + ), + array( + 'id' => '119', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_reset_password', + 'lft' => '235', + 'rght' => '236' + ), + array( + 'id' => '120', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '237', + 'rght' => '238' + ), + array( + 'id' => '121', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_login', + 'lft' => '239', + 'rght' => '240' + ), + array( + 'id' => '122', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_logout', + 'lft' => '241', + 'rght' => '242' + ), + array( + 'id' => '123', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'index', + 'lft' => '243', + 'rght' => '244' + ), + array( + 'id' => '124', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'add', + 'lft' => '245', + 'rght' => '246' + ), + array( + 'id' => '125', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'activate', + 'lft' => '247', + 'rght' => '248' + ), + array( + 'id' => '126', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'edit', + 'lft' => '249', + 'rght' => '250' + ), + array( + 'id' => '127', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'forgot', + 'lft' => '251', + 'rght' => '252' + ), + array( + 'id' => '128', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'reset', + 'lft' => '253', + 'rght' => '254' + ), + array( + 'id' => '129', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'login', + 'lft' => '255', + 'rght' => '256' + ), + array( + 'id' => '130', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'logout', + 'lft' => '257', + 'rght' => '258' + ), + array( + 'id' => '131', + 'parent_id' => '115', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'view', + 'lft' => '259', + 'rght' => '260' + ), + array( + 'id' => '132', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'Vocabularies', + 'lft' => '262', + 'rght' => '271' + ), + array( + 'id' => '133', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '263', + 'rght' => '264' + ), + array( + 'id' => '134', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '265', + 'rght' => '266' + ), + array( + 'id' => '135', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '267', + 'rght' => '268' + ), + array( + 'id' => '136', + 'parent_id' => '132', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '269', + 'rght' => '270' + ), + array( + 'id' => '137', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAcos', + 'lft' => '272', + 'rght' => '281' + ), + array( + 'id' => '138', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '273', + 'rght' => '274' + ), + array( + 'id' => '139', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '275', + 'rght' => '276' + ), + array( + 'id' => '140', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '277', + 'rght' => '278' + ), + array( + 'id' => '141', + 'parent_id' => '137', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '279', + 'rght' => '280' + ), + array( + 'id' => '142', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclActions', + 'lft' => '282', + 'rght' => '295' + ), + array( + 'id' => '143', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '283', + 'rght' => '284' + ), + array( + 'id' => '144', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '285', + 'rght' => '286' + ), + array( + 'id' => '145', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '287', + 'rght' => '288' + ), + array( + 'id' => '146', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '289', + 'rght' => '290' + ), + array( + 'id' => '147', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_move', + 'lft' => '291', + 'rght' => '292' + ), + array( + 'id' => '148', + 'parent_id' => '142', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_generate', + 'lft' => '293', + 'rght' => '294' + ), + array( + 'id' => '149', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclAros', + 'lft' => '296', + 'rght' => '305' + ), + array( + 'id' => '150', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '297', + 'rght' => '298' + ), + array( + 'id' => '151', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '299', + 'rght' => '300' + ), + array( + 'id' => '152', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '301', + 'rght' => '302' + ), + array( + 'id' => '153', + 'parent_id' => '149', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '303', + 'rght' => '304' + ), + array( + 'id' => '154', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'AclPermissions', + 'lft' => '306', + 'rght' => '311' + ), + array( + 'id' => '155', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '307', + 'rght' => '308' + ), + array( + 'id' => '156', + 'parent_id' => '154', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '309', + 'rght' => '310' + ), + array( + 'id' => '159', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsHooks', + 'lft' => '312', + 'rght' => '317' + ), + array( + 'id' => '160', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '313', + 'rght' => '314' + ), + array( + 'id' => '161', + 'parent_id' => '159', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_toggle', + 'lft' => '315', + 'rght' => '316' + ), + array( + 'id' => '162', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsLocales', + 'lft' => '318', + 'rght' => '329' + ), + array( + 'id' => '163', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '319', + 'rght' => '320' + ), + array( + 'id' => '164', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '321', + 'rght' => '322' + ), + array( + 'id' => '165', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '323', + 'rght' => '324' + ), + array( + 'id' => '166', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_edit', + 'lft' => '325', + 'rght' => '326' + ), + array( + 'id' => '167', + 'parent_id' => '162', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '327', + 'rght' => '328' + ), + array( + 'id' => '168', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsPlugins', + 'lft' => '330', + 'rght' => '337' + ), + array( + 'id' => '169', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '331', + 'rght' => '332' + ), + array( + 'id' => '170', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '333', + 'rght' => '334' + ), + array( + 'id' => '171', + 'parent_id' => '168', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '335', + 'rght' => '336' + ), + array( + 'id' => '172', + 'parent_id' => '1', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'ExtensionsThemes', + 'lft' => '338', + 'rght' => '351' + ), + array( + 'id' => '173', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_index', + 'lft' => '339', + 'rght' => '340' + ), + array( + 'id' => '174', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_activate', + 'lft' => '341', + 'rght' => '342' + ), + array( + 'id' => '175', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_add', + 'lft' => '343', + 'rght' => '344' + ), + array( + 'id' => '176', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_editor', + 'lft' => '345', + 'rght' => '346' + ), + array( + 'id' => '177', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_save', + 'lft' => '347', + 'rght' => '348' + ), + array( + 'id' => '178', + 'parent_id' => '172', + 'model' => '', + 'foreign_key' => '', + 'alias' => 'admin_delete', + 'lft' => '349', + 'rght' => '350' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/aro_data.php b/app/plugins/install/config/data/aro_data.php new file mode 100644 index 0000000..06cd495 --- /dev/null +++ b/app/plugins/install/config/data/aro_data.php @@ -0,0 +1,46 @@ + '1', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '2', + 'alias' => '', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'model' => 'Role', + 'foreign_key' => '3', + 'alias' => '', + 'lft' => '5', + 'rght' => '6' + ), + array( + 'id' => '5', + 'parent_id' => '', + 'model' => 'User', + 'foreign_key' => '1', + 'alias' => '', + 'lft' => '7', + 'rght' => '8' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/aros_aco_data.php b/app/plugins/install/config/data/aros_aco_data.php new file mode 100644 index 0000000..3b2c4e9 --- /dev/null +++ b/app/plugins/install/config/data/aros_aco_data.php @@ -0,0 +1,253 @@ + '1', + 'aro_id' => '2', + 'aco_id' => '23', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '2', + 'aro_id' => '2', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '3', + 'aro_id' => '2', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '4', + 'aro_id' => '3', + 'aco_id' => '21', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '5', + 'aro_id' => '3', + 'aco_id' => '22', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '6', + 'aro_id' => '2', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '7', + 'aro_id' => '3', + 'aco_id' => '29', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '8', + 'aro_id' => '2', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '9', + 'aro_id' => '2', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '10', + 'aro_id' => '2', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '11', + 'aro_id' => '2', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '12', + 'aro_id' => '2', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '13', + 'aro_id' => '3', + 'aco_id' => '77', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '14', + 'aro_id' => '3', + 'aco_id' => '78', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '15', + 'aro_id' => '3', + 'aco_id' => '79', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '16', + 'aro_id' => '3', + 'aco_id' => '80', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '17', + 'aro_id' => '3', + 'aco_id' => '81', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '18', + 'aro_id' => '2', + 'aco_id' => '123', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '19', + 'aro_id' => '3', + 'aco_id' => '124', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '20', + 'aro_id' => '3', + 'aco_id' => '125', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '21', + 'aro_id' => '2', + 'aco_id' => '126', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '22', + 'aro_id' => '3', + 'aco_id' => '127', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '23', + 'aro_id' => '3', + 'aco_id' => '128', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '24', + 'aro_id' => '3', + 'aco_id' => '129', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '25', + 'aro_id' => '2', + 'aco_id' => '130', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '26', + 'aro_id' => '2', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + array( + 'id' => '27', + 'aro_id' => '3', + 'aco_id' => '131', + '_create' => '1', + '_read' => '1', + '_update' => '1', + '_delete' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/block_data.php b/app/plugins/install/config/data/block_data.php new file mode 100644 index 0000000..7b06c49 --- /dev/null +++ b/app/plugins/install/config/data/block_data.php @@ -0,0 +1,118 @@ + '3', + 'region_id' => '4', + 'title' => 'About', + 'alias' => 'about', + 'body' => 'This is the content of your block. Can be modified in admin panel.', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '2', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-07-26 17:13:14' + ), + array( + 'id' => '8', + 'region_id' => '4', + 'title' => 'Search', + 'alias' => 'search', + 'body' => '', + 'show_title' => '0', + 'class' => '', + 'status' => '1', + 'weight' => '1', + 'element' => 'search', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:39', + 'created' => '2009-12-20 03:07:27' + ), + array( + 'id' => '5', + 'region_id' => '4', + 'title' => 'Meta', + 'alias' => 'meta', + 'body' => '[menu:meta]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '6', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-22 05:17:39', + 'created' => '2009-09-12 06:36:22' + ), + array( + 'id' => '6', + 'region_id' => '4', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'body' => '[menu:blogroll]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '4', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:33', + 'created' => '2009-09-12 23:33:27' + ), + array( + 'id' => '7', + 'region_id' => '4', + 'title' => 'Categories', + 'alias' => 'categories', + 'body' => '[vocabulary:categories type="blog"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '3', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2009-12-20 03:07:36', + 'created' => '2009-10-03 16:52:50' + ), + array( + 'id' => '9', + 'region_id' => '4', + 'title' => 'Recent Posts', + 'alias' => 'recent_posts', + 'body' => '[node:recent_posts conditions="Node.type:blog" order="Node.id DESC" limit="5"]', + 'show_title' => '1', + 'class' => '', + 'status' => '1', + 'weight' => '5', + 'element' => '', + 'visibility_roles' => '', + 'visibility_paths' => '', + 'visibility_php' => '', + 'params' => '', + 'updated' => '2010-04-08 21:09:31', + 'created' => '2009-12-22 05:17:32' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/comment_data.php b/app/plugins/install/config/data/comment_data.php new file mode 100644 index 0000000..651ad3e --- /dev/null +++ b/app/plugins/install/config/data/comment_data.php @@ -0,0 +1,31 @@ + '1', + 'parent_id' => '', + 'node_id' => '1', + 'user_id' => '0', + 'name' => 'Mr Croogo', + 'email' => 'email@example.com', + 'website' => 'http://www.croogo.org', + 'ip' => '127.0.0.1', + 'title' => '', + 'body' => 'Hi, this is the first comment.', + 'rating' => '', + 'status' => '1', + 'notify' => '0', + 'type' => 'blog', + 'comment_type' => 'comment', + 'lft' => '1', + 'rght' => '2', + 'updated' => '2009-12-25 12:00:00', + 'created' => '2009-12-25 12:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/contact_data.php b/app/plugins/install/config/data/contact_data.php new file mode 100644 index 0000000..4f1e85e --- /dev/null +++ b/app/plugins/install/config/data/contact_data.php @@ -0,0 +1,35 @@ + '1', + 'title' => 'Contact', + 'alias' => 'contact', + 'body' => '', + 'name' => '', + 'position' => '', + 'address' => '', + 'address2' => '', + 'state' => '', + 'country' => '', + 'postcode' => '', + 'phone' => '', + 'fax' => '', + 'email' => 'you@your-site.com', + 'message_status' => '1', + 'message_archive' => '0', + 'message_count' => '0', + 'message_spam_protection' => '0', + 'message_captcha' => '0', + 'message_notify' => '1', + 'status' => '1', + 'updated' => '2009-10-07 22:07:49', + 'created' => '2009-09-16 01:45:17' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/i18n_data.php b/app/plugins/install/config/data/i18n_data.php new file mode 100644 index 0000000..32b8dd8 --- /dev/null +++ b/app/plugins/install/config/data/i18n_data.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/plugins/install/config/data/language_data.php b/app/plugins/install/config/data/language_data.php new file mode 100644 index 0000000..7e5fac9 --- /dev/null +++ b/app/plugins/install/config/data/language_data.php @@ -0,0 +1,20 @@ + '1', + 'title' => 'English', + 'native' => 'English', + 'alias' => 'eng', + 'status' => '1', + 'weight' => '1', + 'updated' => '2009-11-02 21:37:38', + 'created' => '2009-11-02 20:52:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/link_data.php b/app/plugins/install/config/data/link_data.php new file mode 100644 index 0000000..0b375e2 --- /dev/null +++ b/app/plugins/install/config/data/link_data.php @@ -0,0 +1,214 @@ + '5', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'About', + 'description' => '', + 'link' => 'controller:nodes/action:view/type:page/slug:about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:21', + 'created' => '2009-08-19 12:23:33' + ), + array( + 'id' => '6', + 'parent_id' => '', + 'menu_id' => '4', + 'title' => 'Contact', + 'description' => '', + 'link' => 'controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:14:45', + 'created' => '2009-08-19 12:34:56' + ), + array( + 'id' => '7', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Home', + 'description' => '', + 'link' => '/', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 21:17:06', + 'created' => '2009-09-06 21:32:54' + ), + array( + 'id' => '8', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'About', + 'description' => '', + 'link' => '/about', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '10', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 03:45:53', + 'created' => '2009-09-06 21:34:57' + ), + array( + 'id' => '9', + 'parent_id' => '8', + 'menu_id' => '3', + 'title' => 'Child link', + 'description' => '', + 'link' => '#', + 'target' => '', + 'rel' => '', + 'status' => '0', + 'lft' => '8', + 'rght' => '9', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-06 23:13:06', + 'created' => '2009-09-12 03:52:23' + ), + array( + 'id' => '10', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Site Admin', + 'description' => '', + 'link' => '/admin', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 06:34:09', + 'created' => '2009-09-12 06:34:09' + ), + array( + 'id' => '11', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Log out', + 'description' => '', + 'link' => '/users/logout', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '7', + 'rght' => '8', + 'visibility_roles' => '["1","2"]', + 'params' => '', + 'updated' => '2009-09-12 06:35:22', + 'created' => '2009-09-12 06:34:41' + ), + array( + 'id' => '12', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'Croogo', + 'description' => '', + 'link' => 'http://www.croogo.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-12 23:31:59', + 'created' => '2009-09-12 23:31:59' + ), + array( + 'id' => '14', + 'parent_id' => '', + 'menu_id' => '6', + 'title' => 'CakePHP', + 'description' => '', + 'link' => 'http://www.cakephp.org', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-07 03:25:25', + 'created' => '2009-09-12 23:38:43' + ), + array( + 'id' => '15', + 'parent_id' => '', + 'menu_id' => '3', + 'title' => 'Contact', + 'description' => '', + 'link' => '/controller:contacts/action:view/contact', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '11', + 'rght' => '12', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-09-16 07:54:13', + 'created' => '2009-09-16 07:53:33' + ), + array( + 'id' => '16', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Entries (RSS)', + 'description' => '', + 'link' => '/nodes/promoted.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '3', + 'rght' => '4', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:22', + 'created' => '2009-10-27 17:46:22' + ), + array( + 'id' => '17', + 'parent_id' => '', + 'menu_id' => '5', + 'title' => 'Comments (RSS)', + 'description' => '', + 'link' => '/comments.rss', + 'target' => '', + 'rel' => '', + 'status' => '1', + 'lft' => '5', + 'rght' => '6', + 'visibility_roles' => '', + 'params' => '', + 'updated' => '2009-10-27 17:46:54', + 'created' => '2009-10-27 17:46:54' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/menu_data.php b/app/plugins/install/config/data/menu_data.php new file mode 100644 index 0000000..15264f6 --- /dev/null +++ b/app/plugins/install/config/data/menu_data.php @@ -0,0 +1,58 @@ + '3', + 'title' => 'Main Menu', + 'alias' => 'main', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-08-19 12:21:06', + 'created' => '2009-07-22 01:49:53' + ), + array( + 'id' => '4', + 'title' => 'Footer', + 'alias' => 'footer', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-08-19 12:22:42', + 'created' => '2009-08-19 12:22:42' + ), + array( + 'id' => '5', + 'title' => 'Meta', + 'alias' => 'meta', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '4', + 'params' => '', + 'updated' => '2009-09-12 06:33:29', + 'created' => '2009-09-12 06:33:29' + ), + array( + 'id' => '6', + 'title' => 'Blogroll', + 'alias' => 'blogroll', + 'description' => '', + 'status' => '1', + 'weight' => '', + 'link_count' => '2', + 'params' => '', + 'updated' => '2009-09-12 23:30:24', + 'created' => '2009-09-12 23:30:24' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/message_data.php b/app/plugins/install/config/data/message_data.php new file mode 100644 index 0000000..34e388b --- /dev/null +++ b/app/plugins/install/config/data/message_data.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/plugins/install/config/data/meta_data.php b/app/plugins/install/config/data/meta_data.php new file mode 100644 index 0000000..9f4eab8 --- /dev/null +++ b/app/plugins/install/config/data/meta_data.php @@ -0,0 +1,18 @@ + '1', + 'model' => 'Node', + 'foreign_key' => '1', + 'key' => 'meta_keywords', + 'value' => 'key1, key2', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/node_data.php b/app/plugins/install/config/data/node_data.php new file mode 100644 index 0000000..3250088 --- /dev/null +++ b/app/plugins/install/config/data/node_data.php @@ -0,0 +1,56 @@ + '1', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'Hello World', + 'slug' => 'hello-world', + 'body' => '

Welcome to Croogo. This is your first post. You can edit or delete it from the admin panel.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '2', + 'comment_count' => '1', + 'promote' => '1', + 'path' => '/blog/hello-world', + 'terms' => '{"1":"uncategorized"}', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'blog', + 'updated' => '2009-12-25 11:00:00', + 'created' => '2009-12-25 11:00:00' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'user_id' => '1', + 'title' => 'About', + 'slug' => 'about', + 'body' => '

This is an example of a Croogo page, you could edit this to put information about yourself or your site.

', + 'excerpt' => '', + 'status' => '1', + 'mime_type' => '', + 'comment_status' => '0', + 'comment_count' => '0', + 'promote' => '0', + 'path' => '/about', + 'terms' => '', + 'sticky' => '0', + 'lft' => '1', + 'rght' => '2', + 'visibility_roles' => '', + 'type' => 'page', + 'updated' => '2009-12-25 22:00:00', + 'created' => '2009-12-25 22:00:00' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/nodes_taxonomy_data.php b/app/plugins/install/config/data/nodes_taxonomy_data.php new file mode 100644 index 0000000..352db3a --- /dev/null +++ b/app/plugins/install/config/data/nodes_taxonomy_data.php @@ -0,0 +1,15 @@ + '1', + 'node_id' => '1', + 'taxonomy_id' => '1' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/region_data.php b/app/plugins/install/config/data/region_data.php new file mode 100644 index 0000000..2807843 --- /dev/null +++ b/app/plugins/install/config/data/region_data.php @@ -0,0 +1,108 @@ + '3', + 'title' => 'none', + 'alias' => '', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '4', + 'title' => 'right', + 'alias' => 'right', + 'description' => '', + 'block_count' => '6' + ), + array( + 'id' => '6', + 'title' => 'left', + 'alias' => 'left', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '7', + 'title' => 'header', + 'alias' => 'header', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '8', + 'title' => 'footer', + 'alias' => 'footer', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '9', + 'title' => 'region1', + 'alias' => 'region1', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '10', + 'title' => 'region2', + 'alias' => 'region2', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '11', + 'title' => 'region3', + 'alias' => 'region3', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '12', + 'title' => 'region4', + 'alias' => 'region4', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '13', + 'title' => 'region5', + 'alias' => 'region5', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '14', + 'title' => 'region6', + 'alias' => 'region6', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '15', + 'title' => 'region7', + 'alias' => 'region7', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '16', + 'title' => 'region8', + 'alias' => 'region8', + 'description' => '', + 'block_count' => '0' + ), + array( + 'id' => '17', + 'title' => 'region9', + 'alias' => 'region9', + 'description' => '', + 'block_count' => '0' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/role_data.php b/app/plugins/install/config/data/role_data.php new file mode 100644 index 0000000..d491812 --- /dev/null +++ b/app/plugins/install/config/data/role_data.php @@ -0,0 +1,31 @@ + '1', + 'title' => 'Admin', + 'alias' => 'admin', + 'created' => '2009-04-05 00:10:34', + 'updated' => '2009-04-05 00:10:34' + ), + array( + 'id' => '2', + 'title' => 'Registered', + 'alias' => 'registered', + 'created' => '2009-04-05 00:10:50', + 'updated' => '2009-04-06 05:20:38' + ), + array( + 'id' => '3', + 'title' => 'Public', + 'alias' => 'public', + 'created' => '2009-04-05 00:12:38', + 'updated' => '2009-04-07 01:41:45' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/setting_data.php b/app/plugins/install/config/data/setting_data.php new file mode 100644 index 0000000..cd34427 --- /dev/null +++ b/app/plugins/install/config/data/setting_data.php @@ -0,0 +1,263 @@ + '6', + 'key' => 'Site.title', + 'value' => 'Croogo', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '1', + 'params' => '' + ), + array( + 'id' => '7', + 'key' => 'Site.tagline', + 'value' => 'A CakePHP powered Content Management System.', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '2', + 'params' => '' + ), + array( + 'id' => '8', + 'key' => 'Site.email', + 'value' => 'you@your-site.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '3', + 'params' => '' + ), + array( + 'id' => '9', + 'key' => 'Site.status', + 'value' => '1', + 'title' => '', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '5', + 'params' => '' + ), + array( + 'id' => '12', + 'key' => 'Meta.robots', + 'value' => 'index, follow', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '6', + 'params' => '' + ), + array( + 'id' => '13', + 'key' => 'Meta.keywords', + 'value' => 'croogo, Croogo', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '7', + 'params' => '' + ), + array( + 'id' => '14', + 'key' => 'Meta.description', + 'value' => 'Croogo - A CakePHP powered Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => 'textarea', + 'editable' => '1', + 'weight' => '8', + 'params' => '' + ), + array( + 'id' => '15', + 'key' => 'Meta.generator', + 'value' => 'Croogo - Content Management System', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '9', + 'params' => '' + ), + array( + 'id' => '16', + 'key' => 'Service.akismet_key', + 'value' => 'your-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '11', + 'params' => '' + ), + array( + 'id' => '17', + 'key' => 'Service.recaptcha_public_key', + 'value' => 'your-public-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '12', + 'params' => '' + ), + array( + 'id' => '18', + 'key' => 'Service.recaptcha_private_key', + 'value' => 'your-private-key', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '13', + 'params' => '' + ), + array( + 'id' => '19', + 'key' => 'Service.akismet_url', + 'value' => 'http://your-blog.com', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '10', + 'params' => '' + ), + array( + 'id' => '20', + 'key' => 'Site.theme', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '14', + 'params' => '' + ), + array( + 'id' => '21', + 'key' => 'Site.feed_url', + 'value' => '', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '15', + 'params' => '' + ), + array( + 'id' => '22', + 'key' => 'Reading.nodes_per_page', + 'value' => '5', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '16', + 'params' => '' + ), + array( + 'id' => '23', + 'key' => 'Writing.wysiwyg', + 'value' => '1', + 'title' => 'Enable WYSIWYG editor', + 'description' => '', + 'input_type' => 'checkbox', + 'editable' => '1', + 'weight' => '17', + 'params' => '' + ), + array( + 'id' => '24', + 'key' => 'Comment.level', + 'value' => '1', + 'title' => '', + 'description' => 'levels deep (threaded comments)', + 'input_type' => '', + 'editable' => '1', + 'weight' => '18', + 'params' => '' + ), + array( + 'id' => '25', + 'key' => 'Comment.feed_limit', + 'value' => '10', + 'title' => '', + 'description' => 'number of comments to show in feed', + 'input_type' => '', + 'editable' => '1', + 'weight' => '19', + 'params' => '' + ), + array( + 'id' => '26', + 'key' => 'Site.locale', + 'value' => 'eng', + 'title' => '', + 'description' => '', + 'input_type' => 'text', + 'editable' => '0', + 'weight' => '20', + 'params' => '' + ), + array( + 'id' => '27', + 'key' => 'Reading.date_time_format', + 'value' => 'D, M d Y H:i:s', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '21', + 'params' => '' + ), + array( + 'id' => '28', + 'key' => 'Comment.date_time_format', + 'value' => 'M d, Y', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '1', + 'weight' => '22', + 'params' => '' + ), + array( + 'id' => '29', + 'key' => 'Site.timezone', + 'value' => '0', + 'title' => '', + 'description' => 'zero (0) for GMT', + 'input_type' => '', + 'editable' => '1', + 'weight' => '4', + 'params' => '' + ), + array( + 'id' => '32', + 'key' => 'Hook.bootstraps', + 'value' => 'tinymce', + 'title' => '', + 'description' => '', + 'input_type' => '', + 'editable' => '0', + 'weight' => '23', + 'params' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/taxonomy_data.php b/app/plugins/install/config/data/taxonomy_data.php new file mode 100644 index 0000000..35b6399 --- /dev/null +++ b/app/plugins/install/config/data/taxonomy_data.php @@ -0,0 +1,34 @@ + '1', + 'parent_id' => '', + 'term_id' => '1', + 'vocabulary_id' => '1', + 'lft' => '1', + 'rght' => '2' + ), + array( + 'id' => '2', + 'parent_id' => '', + 'term_id' => '2', + 'vocabulary_id' => '1', + 'lft' => '3', + 'rght' => '4' + ), + array( + 'id' => '3', + 'parent_id' => '', + 'term_id' => '3', + 'vocabulary_id' => '2', + 'lft' => '1', + 'rght' => '2' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/term_data.php b/app/plugins/install/config/data/term_data.php new file mode 100644 index 0000000..627cf9f --- /dev/null +++ b/app/plugins/install/config/data/term_data.php @@ -0,0 +1,34 @@ + '1', + 'title' => 'Uncategorized', + 'slug' => 'uncategorized', + 'description' => '', + 'updated' => '2009-07-22 03:38:43', + 'created' => '2009-07-22 03:34:56' + ), + array( + 'id' => '2', + 'title' => 'Announcements', + 'slug' => 'announcements', + 'description' => '', + 'updated' => '2010-05-16 23:57:06', + 'created' => '2009-07-22 03:45:37' + ), + array( + 'id' => '3', + 'title' => 'mytag', + 'slug' => 'mytag', + 'description' => '', + 'updated' => '2009-08-26 14:42:43', + 'created' => '2009-08-26 14:42:43' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/type_data.php b/app/plugins/install/config/data/type_data.php new file mode 100644 index 0000000..2790110 --- /dev/null +++ b/app/plugins/install/config/data/type_data.php @@ -0,0 +1,58 @@ + '1', + 'title' => 'Page', + 'alias' => 'page', + 'description' => 'A page is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a page entry does not allow visitor comments.', + 'format_show_author' => '0', + 'format_show_date' => '0', + 'comment_status' => '0', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-09 00:23:24', + 'created' => '2009-09-02 18:06:27' + ), + array( + 'id' => '2', + 'title' => 'Blog', + 'alias' => 'blog', + 'description' => 'A blog entry is a single post to an online journal, or blog.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-09-15 12:15:43', + 'created' => '2009-09-02 18:20:44' + ), + array( + 'id' => '4', + 'title' => 'Node', + 'alias' => 'node', + 'description' => 'Default content type.', + 'format_show_author' => '1', + 'format_show_date' => '1', + 'comment_status' => '2', + 'comment_approve' => '1', + 'comment_spam_protection' => '0', + 'comment_captcha' => '0', + 'params' => '', + 'plugin' => '', + 'updated' => '2009-10-06 21:53:15', + 'created' => '2009-09-05 23:51:56' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/types_vocabulary_data.php b/app/plugins/install/config/data/types_vocabulary_data.php new file mode 100644 index 0000000..8a1c44f --- /dev/null +++ b/app/plugins/install/config/data/types_vocabulary_data.php @@ -0,0 +1,34 @@ + '31', + 'type_id' => '2', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '30', + 'type_id' => '2', + 'vocabulary_id' => '1', + 'weight' => '' + ), + array( + 'id' => '25', + 'type_id' => '4', + 'vocabulary_id' => '2', + 'weight' => '' + ), + array( + 'id' => '24', + 'type_id' => '4', + 'vocabulary_id' => '1', + 'weight' => '' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/user_data.php b/app/plugins/install/config/data/user_data.php new file mode 100644 index 0000000..7231c5e --- /dev/null +++ b/app/plugins/install/config/data/user_data.php @@ -0,0 +1,26 @@ + '1', + 'role_id' => '1', + 'username' => 'admin', + 'password' => 'c054b152596745efa1d197b809fa7fc70ce586e5', + 'name' => 'Administrator', + 'email' => 'you@your-site.com', + 'website' => '/about', + 'activation_key' => '', + 'image' => '', + 'bio' => '', + 'timezone' => '0', + 'status' => '1', + 'updated' => '2010-06-06 07:00:10', + 'created' => '2009-04-05 00:20:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/config/data/vocabulary_data.php b/app/plugins/install/config/data/vocabulary_data.php new file mode 100644 index 0000000..213af78 --- /dev/null +++ b/app/plugins/install/config/data/vocabulary_data.php @@ -0,0 +1,36 @@ + '1', + 'title' => 'Categories', + 'alias' => 'categories', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '1', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:21' + ), + array( + 'id' => '2', + 'title' => 'Tags', + 'alias' => 'tags', + 'description' => '', + 'required' => '0', + 'multiple' => '1', + 'tags' => '0', + 'plugin' => '', + 'weight' => '2', + 'updated' => '2010-05-17 20:03:11', + 'created' => '2009-07-22 02:16:34' + ), + ); + +} +?> \ No newline at end of file diff --git a/app/plugins/install/controllers/.svn/entries b/app/plugins/install/controllers/.svn/entries new file mode 100644 index 0000000..7f470fd --- /dev/null +++ b/app/plugins/install/controllers/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/controllers +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +install_controller.php +file + + + + +2010-09-04T08:55:28.000000Z +0f8c3af40c8085dc516b0651e122a080 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7846 + diff --git a/app/plugins/install/controllers/.svn/text-base/install_controller.php.svn-base b/app/plugins/install/controllers/.svn/text-base/install_controller.php.svn-base new file mode 100644 index 0000000..d271a58 --- /dev/null +++ b/app/plugins/install/controllers/.svn/text-base/install_controller.php.svn-base @@ -0,0 +1,245 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class InstallController extends InstallAppController { + +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Install'; + +/** + * No models required + * + * @var array + * @access public + */ + public $uses = null; + +/** + * No components required + * + * @var array + * @access public + */ + public $components = null; +/** + * Default configuration + * + * @var array + * @access public + */ + public $defaultConfig = array( + 'name' => 'default', + 'driver'=> 'mysql', + 'persistent'=> false, + 'host'=> 'localhost', + 'login'=> 'root', + 'password'=> '', + 'database'=> 'croogo', + 'schema'=> null, + 'prefix'=> null, + 'encoding' => 'UTF8', + 'port' => null, + ); +/** + * beforeFilter + * + * @return void + * @access public + */ + public function beforeFilter() { + parent::beforeFilter(); + + $this->layout = 'install'; + App::import('Component', 'Session'); + $this->Session = new SessionComponent; + } +/** + * If settings.yml exists, app is already installed + * + * @return void + */ + protected function _check() { + if (file_exists(CONFIGS . 'settings.yml')) { + $this->Session->setFlash('Already Installed'); + $this->redirect('/'); + } + } + +/** + * Step 0: welcome + * + * A simple welcome message for the installer. + * + * @return void + * @access public + */ + public function index() { + $this->_check(); + $this->set('title_for_layout', __('Installation: Welcome', true)); + } + +/** + * Step 1: database + * + * Try to connect to the database and give a message if that's not possible so the user can check their + * credentials or create the missing database + * Create the database file and insert the submitted details + * + * @return void + * @access public + */ + public function database() { + $this->_check(); + $this->set('title_for_layout', __('Step 1: Database', true)); + + if (empty($this->data)) { + return; + } + + @App::import('Model', 'ConnectionManager'); + $config = $this->defaultConfig; + foreach ($this->data['Install'] AS $key => $value) { + if (isset($this->data['Install'][$key])) { + $config[$key] = $value; + } + } + @ConnectionManager::create('default', $config); + $db = ConnectionManager::getDataSource('default'); + if (!$db->isConnected()) { + $this->Session->setFlash(__('Could not connect to database.', true), 'default', array('class' => 'error')); + return; + } + + copy(CONFIGS.'database.php.install', CONFIGS.'database.php'); + App::import('Core', 'File'); + $file = new File(CONFIGS.'database.php', true); + $content = $file->read(); + + foreach ($config AS $configKey => $configValue) { + $content = str_replace('{default_' . $configKey . '}', $configValue, $content); + } + + $content = str_replace('{default_host}', $this->data['Install']['host'], $content); + $content = str_replace('{default_login}', $this->data['Install']['login'], $content); + $content = str_replace('{default_password}', $this->data['Install']['password'], $content); + $content = str_replace('{default_database}', $this->data['Install']['database'], $content); + + if($file->write($content) ) { + return $this->redirect(array('action' => 'data')); + } else { + $this->Session->setFlash(__('Could not write database.php file.', true), 'default', array('class' => 'error')); + } + } + +/** + * Step 2: Run the initial sql scripts to create the db and seed it with data + * + * @return void + * @access public + */ + public function data() { + $this->_check(); + $this->set('title_for_layout', __('Step 2: Build database', true)); + if (isset($this->params['named']['run'])) { + App::import('Core', 'File'); + App::import('Model', 'CakeSchema', false); + App::import('Model', 'ConnectionManager'); + + $db = ConnectionManager::getDataSource('default'); + if(!$db->isConnected()) { + $this->Session->setFlash(__('Could not connect to database.', true), 'default', array('class' => 'error')); + } else { + $schema =& new CakeSchema(array('name'=>'app')); + $schema = $schema->load(); + foreach($schema->tables as $table => $fields) { + $create = $db->createSchema($schema, $table); + $db->execute($create); + } + + $dataObjects = App::objects('class', APP . 'config' . DS . 'schema' . DS . 'data' . DS); + foreach ($dataObjects as $data) { + App::import('class', $data, false, APP . 'config' . DS . 'schema' . DS . 'data' . DS); + $classVars = get_class_vars($data); + $modelAlias = substr($data, 0, -4); + $table = $classVars['table']; + $records = $classVars['records']; + App::import('Model', 'Model', false); + $modelObject =& new Model(array( + 'name' => $modelAlias, + 'table' => $table, + 'ds' => 'default', + )); + if (is_array($records) && count($records) > 0) { + foreach($records as $record) { + $modelObject->create($record); + $modelObject->save(); + } + } + } + + $this->redirect(array('action' => 'finish')); + } + } + } + +/** + * Step 3: finish + * + * Remind the user to delete 'install' plugin + * Copy settings.yml file into place + * + * @return void + * @access public + */ + public function finish() { + $this->set('title_for_layout', __('Installation completed successfully', true)); + if (isset($this->params['named']['delete'])) { + App::import('Core', 'Folder'); + $this->folder = new Folder; + if ($this->folder->delete(APP.'plugins'.DS.'install')) { + $this->Session->setFlash(__('Installation files deleted successfully.', true), 'default', array('class' => 'success')); + $this->redirect('/'); + } else { + return $this->Session->setFlash(__('Could not delete installation files.', true), 'default', array('class' => 'error')); + } + } + $this->_check(); + + // set new salt and seed value + copy(CONFIGS.'settings.yml.install', CONFIGS.'settings.yml'); + $File =& new File(CONFIGS . 'core.php'); + if (!class_exists('Security')) { + require LIBS . 'security.php'; + } + $salt = Security::generateAuthKey(); + $seed = mt_rand() . mt_rand(); + $contents = $File->read(); + $contents = preg_replace('/(?<=Configure::write\(\'Security.salt\', \')([^\' ]+)(?=\'\))/', $salt, $contents); + $contents = preg_replace('/(?<=Configure::write\(\'Security.cipherSeed\', \')(\d+)(?=\'\))/', $seed, $contents); + if (!$File->write($contents)) { + return false; + } + + // set new password for admin, hashed according to new salt value + $User = ClassRegistry::init('User'); + $User->id = $User->field('id', array('username' => 'admin')); + $User->saveField('password', Security::hash('password', null, $salt)); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/install/controllers/install_controller.php b/app/plugins/install/controllers/install_controller.php new file mode 100644 index 0000000..a8a1612 --- /dev/null +++ b/app/plugins/install/controllers/install_controller.php @@ -0,0 +1,245 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class InstallController extends InstallAppController { + +/** + * Controller name + * + * @var string + * @access public + */ + public $name = 'Install'; + +/** + * No models required + * + * @var array + * @access public + */ + public $uses = null; + +/** + * No components required + * + * @var array + * @access public + */ + public $components = null; +/** + * Default configuration + * + * @var array + * @access public + */ + public $defaultConfig = array( + 'name' => 'default', + 'driver'=> 'mysql', + 'persistent'=> false, + 'host'=> 'localhost', + 'login'=> 'root', + 'password'=> '', + 'database'=> 'croogo', + 'schema'=> null, + 'prefix'=> null, + 'encoding' => 'UTF8', + 'port' => null, + ); +/** + * beforeFilter + * + * @return void + * @access public + */ + public function beforeFilter() { + parent::beforeFilter(); + + $this->layout = 'install'; + App::import('Component', 'Session'); + $this->Session = new SessionComponent; + } +/** + * If settings.yml exists, app is already installed + * + * @return void + */ + protected function _check() { + if (file_exists(CONFIGS . 'settings.yml')) { + $this->Session->setFlash('Already Installed'); + $this->redirect('/'); + } + } + +/** + * Step 0: welcome + * + * A simple welcome message for the installer. + * + * @return void + * @access public + */ + public function index() { + $this->_check(); + $this->set('title_for_layout', __('Installation: Welcome', true)); + } + +/** + * Step 1: database + * + * Try to connect to the database and give a message if that's not possible so the user can check their + * credentials or create the missing database + * Create the database file and insert the submitted details + * + * @return void + * @access public + */ + public function database() { + $this->_check(); + $this->set('title_for_layout', __('Step 1: Database', true)); + + if (empty($this->data)) { + return; + } + + @App::import('Model', 'ConnectionManager'); + $config = $this->defaultConfig; + foreach ($this->data['Install'] AS $key => $value) { + if (isset($this->data['Install'][$key])) { + $config[$key] = $value; + } + } + @ConnectionManager::create('default', $config); + $db = ConnectionManager::getDataSource('default'); + if (!$db->isConnected()) { + $this->Session->setFlash(__('Could not connect to database.', true), 'default', array('class' => 'error')); + return; + } + + copy(CONFIGS.'database.php.install', CONFIGS.'database.php'); + App::import('Core', 'File'); + $file = new File(CONFIGS.'database.php', true); + $content = $file->read(); + + foreach ($config AS $configKey => $configValue) { + $content = str_replace('{default_' . $configKey . '}', $configValue, $content); + } + + $content = str_replace('{default_host}', $this->data['Install']['host'], $content); + $content = str_replace('{default_login}', $this->data['Install']['login'], $content); + $content = str_replace('{default_password}', $this->data['Install']['password'], $content); + $content = str_replace('{default_database}', $this->data['Install']['database'], $content); + + if($file->write($content) ) { + return $this->redirect(array('action' => 'data')); + } else { + $this->Session->setFlash(__('Could not write database.php file.', true), 'default', array('class' => 'error')); + } + } + +/** + * Step 2: Run the initial sql scripts to create the db and seed it with data + * + * @return void + * @access public + */ + public function data() { + $this->_check(); + $this->set('title_for_layout', __('Step 2: Build database', true)); + if (isset($this->params['named']['run'])) { + App::import('Core', 'File'); + App::import('Model', 'CakeSchema', false); + App::import('Model', 'ConnectionManager'); + + $db = ConnectionManager::getDataSource('default'); + if(!$db->isConnected()) { + $this->Session->setFlash(__('Could not connect to database.', true), 'default', array('class' => 'error')); + } else { + $schema =& new CakeSchema(array('name'=>'app')); + $schema = $schema->load(); + foreach($schema->tables as $table => $fields) { + $create = $db->createSchema($schema, $table); + $db->execute($create); + } + + $dataObjects = App::objects('class', APP . 'plugins' . DS . 'install' . DS . 'config' . DS . 'data' . DS); + foreach ($dataObjects as $data) { + App::import('class', $data, false, APP . 'plugins' . DS . 'install' . DS . 'config' . DS . 'data' . DS); + $classVars = get_class_vars($data); + $modelAlias = substr($data, 0, -4); + $table = $classVars['table']; + $records = $classVars['records']; + App::import('Model', 'Model', false); + $modelObject =& new Model(array( + 'name' => $modelAlias, + 'table' => $table, + 'ds' => 'default', + )); + if (is_array($records) && count($records) > 0) { + foreach($records as $record) { + $modelObject->create($record); + $modelObject->save(); + } + } + } + + $this->redirect(array('action' => 'finish')); + } + } + } + +/** + * Step 3: finish + * + * Remind the user to delete 'install' plugin + * Copy settings.yml file into place + * + * @return void + * @access public + */ + public function finish() { + $this->set('title_for_layout', __('Installation completed successfully', true)); + if (isset($this->params['named']['delete'])) { + App::import('Core', 'Folder'); + $this->folder = new Folder; + if ($this->folder->delete(APP.'plugins'.DS.'install')) { + $this->Session->setFlash(__('Installation files deleted successfully.', true), 'default', array('class' => 'success')); + $this->redirect('/'); + } else { + return $this->Session->setFlash(__('Could not delete installation files.', true), 'default', array('class' => 'error')); + } + } + $this->_check(); + + // set new salt and seed value + copy(CONFIGS.'settings.yml.install', CONFIGS.'settings.yml'); + $File =& new File(CONFIGS . 'core.php'); + if (!class_exists('Security')) { + require LIBS . 'security.php'; + } + $salt = Security::generateAuthKey(); + $seed = mt_rand() . mt_rand(); + $contents = $File->read(); + $contents = preg_replace('/(?<=Configure::write\(\'Security.salt\', \')([^\' ]+)(?=\'\))/', $salt, $contents); + $contents = preg_replace('/(?<=Configure::write\(\'Security.cipherSeed\', \')(\d+)(?=\'\))/', $seed, $contents); + if (!$File->write($contents)) { + return false; + } + + // set new password for admin, hashed according to new salt value + $User = ClassRegistry::init('User'); + $User->id = $User->field('id', array('username' => 'admin')); + $User->saveField('password', Security::hash('password', null, $salt)); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/install/install_app_controller.php b/app/plugins/install/install_app_controller.php new file mode 100644 index 0000000..e76e740 --- /dev/null +++ b/app/plugins/install/install_app_controller.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/app/plugins/install/install_app_model.php b/app/plugins/install/install_app_model.php new file mode 100644 index 0000000..dbd2f46 --- /dev/null +++ b/app/plugins/install/install_app_model.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/plugins/install/models/.svn/entries b/app/plugins/install/models/.svn/entries new file mode 100644 index 0000000..1225442 --- /dev/null +++ b/app/plugins/install/models/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/models +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +install.php +file + + + + +2010-09-04T08:55:28.000000Z +374d0e4bde3be4a61516d7bbc24bb27e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +106 + diff --git a/app/plugins/install/models/.svn/text-base/install.php.svn-base b/app/plugins/install/models/.svn/text-base/install.php.svn-base new file mode 100644 index 0000000..d653782 --- /dev/null +++ b/app/plugins/install/models/.svn/text-base/install.php.svn-base @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/plugins/install/models/install.php b/app/plugins/install/models/install.php new file mode 100644 index 0000000..d653782 --- /dev/null +++ b/app/plugins/install/models/install.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/plugins/install/views/.svn/entries b/app/plugins/install/views/.svn/entries new file mode 100644 index 0000000..2cf1206 --- /dev/null +++ b/app/plugins/install/views/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/views +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +layouts +dir + +install +dir + diff --git a/app/plugins/install/views/install/.svn/entries b/app/plugins/install/views/install/.svn/entries new file mode 100644 index 0000000..af78d99 --- /dev/null +++ b/app/plugins/install/views/install/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/views/install +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +finish.ctp +file + + + + +2010-09-04T08:55:28.000000Z +76ff837b23195637c28840de9cf4eacd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +656 + +database.ctp +file + + + + +2010-09-04T08:55:28.000000Z +7716ae90684a913cdeea9671b7af57fc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1396 + +index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +e7b0c8c6fc036c3fe7f64bd6b8eac56f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1348 + +data.ctp +file + + + + +2010-09-04T08:55:28.000000Z +6154c39dd061d07d6c0e1f9d59f198da +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +313 + diff --git a/app/plugins/install/views/install/.svn/text-base/data.ctp.svn-base b/app/plugins/install/views/install/.svn/text-base/data.ctp.svn-base new file mode 100644 index 0000000..cc54f37 --- /dev/null +++ b/app/plugins/install/views/install/.svn/text-base/data.ctp.svn-base @@ -0,0 +1,12 @@ +
+

+ + link(__('Click here to build your database', true), array( + 'plugin' => 'install', + 'controller' => 'install', + 'action' => 'data', + 'run' => 1, + )); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/.svn/text-base/database.ctp.svn-base b/app/plugins/install/views/install/.svn/text-base/database.ctp.svn-base new file mode 100644 index 0000000..48093f6 --- /dev/null +++ b/app/plugins/install/views/install/.svn/text-base/database.ctp.svn-base @@ -0,0 +1,30 @@ +
+

+ create('Install', array('url' => array('plugin' => 'install', 'controller' => 'install', 'action' => 'database'))); + echo $form->input('Install.driver', array( + 'label' => 'Driver', + 'value' => 'mysql', + 'empty' => false, + 'options' => array( + 'mysql' => 'mysql', + 'mysqli' => 'mysqli', + 'sqlite' => 'sqlite', + 'postgres' => 'postgres', + 'mssql' => 'mssql', + 'db2' => 'db2', + 'oracle' => 'oracle', + 'firebird' => 'firebird', + 'sybase' => 'sybase', + 'odbc' => 'odbc', + ), + )); + //echo $form->input('Install.driver', array('label' => 'Driver', 'value' => 'mysql')); + echo $form->input('Install.host', array('label' => 'Host', 'value' => 'localhost')); + echo $form->input('Install.login', array('label' => 'User / Login', 'value' => 'root')); + echo $form->input('Install.password', array('label' => 'Password')); + echo $form->input('Install.database', array('label' => 'Name', 'value' => 'croogo')); + echo $form->input('Install.port', array('label' => 'Port (leave blank if unknown)')); + echo $form->end('Submit'); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/.svn/text-base/finish.ctp.svn-base b/app/plugins/install/views/install/.svn/text-base/finish.ctp.svn-base new file mode 100644 index 0000000..3dd26e0 --- /dev/null +++ b/app/plugins/install/views/install/.svn/text-base/finish.ctp.svn-base @@ -0,0 +1,28 @@ +
+

+ +

+ Admin panel: link(Router::url('/admin', true), Router::url('/admin', true)); ?>
+ Username: admin
+ Password: password +

+ +
+
+ +

+ Delete the installation directory /app/plugins/install. +

+ +
+
+ + link(__('Click here to delete installation files', true), array( + 'plugin' => 'install', + 'controller' => 'install', + 'action' => 'finish', + 'delete' => 1, + )); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/.svn/text-base/index.ctp.svn-base b/app/plugins/install/views/install/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..bae9456 --- /dev/null +++ b/app/plugins/install/views/install/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,36 @@ +
+

+ ' . __('Your tmp directory is writable.', true) . '

'; + } else { + $check = false; + echo '

' . __('Your tmp directory is NOT writable.', true) . '

'; + } + + // config is writable + if (is_writable(APP.'config')) { + echo '

' . __('Your config directory is writable.', true) . '

'; + } else { + $check = false; + echo '

' . __('Your config directory is NOT writable.', true) . '

'; + } + + // php version + if (phpversion() > 5) { + echo '

' . sprintf(__('PHP version %s > 5', true), phpversion()) . '

'; + } else { + $check = false; + echo '

' . sprintf(__('PHP version %s < 5', true), phpversion()) . '

'; + } + + if ($check) { + echo '

' . $html->link('Click here to begin installation', array('action' => 'database')) . '

'; + } else { + echo '

' . __('Installation cannot continue as minimum requirements are not met.', true) . '

'; + } + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/data.ctp b/app/plugins/install/views/install/data.ctp new file mode 100644 index 0000000..1964c71 --- /dev/null +++ b/app/plugins/install/views/install/data.ctp @@ -0,0 +1,12 @@ +
+

+ + Html->link(__('Click here to build your database', true), array( + 'plugin' => 'install', + 'controller' => 'install', + 'action' => 'data', + 'run' => 1, + )); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/database.ctp b/app/plugins/install/views/install/database.ctp new file mode 100644 index 0000000..0553bd8 --- /dev/null +++ b/app/plugins/install/views/install/database.ctp @@ -0,0 +1,30 @@ +
+

+ Form->create('Install', array('url' => array('plugin' => 'install', 'controller' => 'install', 'action' => 'database'))); + echo $this->Form->input('Install.driver', array( + 'label' => 'Driver', + 'value' => 'mysql', + 'empty' => false, + 'options' => array( + 'mysql' => 'mysql', + 'mysqli' => 'mysqli', + 'sqlite' => 'sqlite', + 'postgres' => 'postgres', + 'mssql' => 'mssql', + 'db2' => 'db2', + 'oracle' => 'oracle', + 'firebird' => 'firebird', + 'sybase' => 'sybase', + 'odbc' => 'odbc', + ), + )); + //echo $this->Form->input('Install.driver', array('label' => 'Driver', 'value' => 'mysql')); + echo $this->Form->input('Install.host', array('label' => 'Host', 'value' => 'localhost')); + echo $this->Form->input('Install.login', array('label' => 'User / Login', 'value' => 'root')); + echo $this->Form->input('Install.password', array('label' => 'Password')); + echo $this->Form->input('Install.database', array('label' => 'Name', 'value' => 'croogo')); + echo $this->Form->input('Install.port', array('label' => 'Port (leave blank if unknown)')); + echo $this->Form->end('Submit'); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/finish.ctp b/app/plugins/install/views/install/finish.ctp new file mode 100644 index 0000000..6eaf839 --- /dev/null +++ b/app/plugins/install/views/install/finish.ctp @@ -0,0 +1,28 @@ +
+

+ +

+ Admin panel: Html->link(Router::url('/admin', true), Router::url('/admin', true)); ?>
+ Username: admin
+ Password: password +

+ +
+
+ +

+ Delete the installation directory /app/plugins/install. +

+ +
+
+ + Html->link(__('Click here to delete installation files', true), array( + 'plugin' => 'install', + 'controller' => 'install', + 'action' => 'finish', + 'delete' => 1, + )); + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/install/index.ctp b/app/plugins/install/views/install/index.ctp new file mode 100644 index 0000000..8f627a0 --- /dev/null +++ b/app/plugins/install/views/install/index.ctp @@ -0,0 +1,36 @@ +
+

+ ' . __('Your tmp directory is writable.', true) . '

'; + } else { + $check = false; + echo '

' . __('Your tmp directory is NOT writable.', true) . '

'; + } + + // config is writable + if (is_writable(APP.'config')) { + echo '

' . __('Your config directory is writable.', true) . '

'; + } else { + $check = false; + echo '

' . __('Your config directory is NOT writable.', true) . '

'; + } + + // php version + if (phpversion() > 5) { + echo '

' . sprintf(__('PHP version %s > 5', true), phpversion()) . '

'; + } else { + $check = false; + echo '

' . sprintf(__('PHP version %s < 5', true), phpversion()) . '

'; + } + + if ($check) { + echo '

' . $this->Html->link('Click here to begin installation', array('action' => 'database')) . '

'; + } else { + echo '

' . __('Installation cannot continue as minimum requirements are not met.', true) . '

'; + } + ?> +
\ No newline at end of file diff --git a/app/plugins/install/views/layouts/.svn/entries b/app/plugins/install/views/layouts/.svn/entries new file mode 100644 index 0000000..0e86e12 --- /dev/null +++ b/app/plugins/install/views/layouts/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/views/layouts +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +install.ctp +file + + + + +2010-09-04T08:55:28.000000Z +fe0246490de597a8a6018e5ac1d95e71 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +968 + diff --git a/app/plugins/install/views/layouts/.svn/text-base/install.ctp.svn-base b/app/plugins/install/views/layouts/.svn/text-base/install.ctp.svn-base new file mode 100644 index 0000000..acb1c15 --- /dev/null +++ b/app/plugins/install/views/layouts/.svn/text-base/install.ctp.svn-base @@ -0,0 +1,39 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + css(array( + 'reset', + '960', + 'admin', + '/install/css/install', + )); + echo $scripts_for_layout; + ?> + + + + +
+ + +
+
+ sessionFlash(); + echo $content_for_layout; + ?> +
+
+ + element('admin/footer'); ?> + +
+ + + + \ No newline at end of file diff --git a/app/plugins/install/views/layouts/install.ctp b/app/plugins/install/views/layouts/install.ctp new file mode 100644 index 0000000..179504a --- /dev/null +++ b/app/plugins/install/views/layouts/install.ctp @@ -0,0 +1,39 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + Html->css(array( + 'reset', + '960', + 'admin', + '/install/css/install', + )); + echo $scripts_for_layout; + ?> + + + + +
+ + +
+
+ Layout->sessionFlash(); + echo $content_for_layout; + ?> +
+
+ + element('admin/footer'); ?> + +
+ + + + \ No newline at end of file diff --git a/app/plugins/install/webroot/.svn/entries b/app/plugins/install/webroot/.svn/entries new file mode 100644 index 0000000..f2f17fc --- /dev/null +++ b/app/plugins/install/webroot/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +css +dir + diff --git a/app/plugins/install/webroot/css/.svn/entries b/app/plugins/install/webroot/css/.svn/entries new file mode 100644 index 0000000..b23a69e --- /dev/null +++ b/app/plugins/install/webroot/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/install/webroot/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +install.css +file + + + + +2010-09-04T08:55:28.000000Z +9c95b37b14aae631cc3c09880d7095f0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +699 + diff --git a/app/plugins/install/webroot/css/.svn/text-base/install.css.svn-base b/app/plugins/install/webroot/css/.svn/text-base/install.css.svn-base new file mode 100644 index 0000000..5e9693a --- /dev/null +++ b/app/plugins/install/webroot/css/.svn/text-base/install.css.svn-base @@ -0,0 +1,14 @@ +.install h1 { padding: 0px 0px 0px 20px; } + +#install { margin: 0px auto; width: 500px; padding: 50px 0px 0px 0px; } +#install h2 { border-bottom: 0px; margin: 20px 0px 20px 0px; } +#install .forgot { float: right; } +#install input[type=text], +#install input[type=password] { width: 95%; } + +#install .install { margin: 30px 0px 0px 0px; padding: 0px 20px 20px 20px; background: #fff; border: 1px solid #e5e5e5; } +#install .install { -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; } +#install .install { -moz-border-radius: 10px; -webkit-border-radius: 10px; } + +.install #footer { background: none; color: #444; } +.install #footer a { color: #444; } \ No newline at end of file diff --git a/app/plugins/install/webroot/css/install.css b/app/plugins/install/webroot/css/install.css new file mode 100644 index 0000000..5e9693a --- /dev/null +++ b/app/plugins/install/webroot/css/install.css @@ -0,0 +1,14 @@ +.install h1 { padding: 0px 0px 0px 20px; } + +#install { margin: 0px auto; width: 500px; padding: 50px 0px 0px 0px; } +#install h2 { border-bottom: 0px; margin: 20px 0px 20px 0px; } +#install .forgot { float: right; } +#install input[type=text], +#install input[type=password] { width: 95%; } + +#install .install { margin: 30px 0px 0px 0px; padding: 0px 20px 20px 20px; background: #fff; border: 1px solid #e5e5e5; } +#install .install { -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; } +#install .install { -moz-border-radius: 10px; -webkit-border-radius: 10px; } + +.install #footer { background: none; color: #444; } +.install #footer a { color: #444; } \ No newline at end of file diff --git a/app/plugins/rastreamento/config/plugin.yml b/app/plugins/rastreamento/config/plugin.yml new file mode 100644 index 0000000..e865b42 --- /dev/null +++ b/app/plugins/rastreamento/config/plugin.yml @@ -0,0 +1,6 @@ +name: Rastreamento +description: Realiza o rastreamento de encomendas através dos correios, inclui webservice + +author: John-Henrique +authorEmail: suporte@vibemdia.com +authorUrl: http://vibemidia.com.br diff --git a/app/plugins/rastreamento/config/rastreamento_activation.php b/app/plugins/rastreamento/config/rastreamento_activation.php new file mode 100644 index 0000000..11ecfd8 --- /dev/null +++ b/app/plugins/rastreamento/config/rastreamento_activation.php @@ -0,0 +1,102 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class RastreamentoActivation { +/** + * onActivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeActivation(&$controller) { + return true; + } +/** + * Called after activating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onActivation(&$controller) { + // ACL: set ACOs with permissions + $controller->Croogo->addAco('Rastreamento'); // ExampleController + $controller->Croogo->addAco('Rastreamento/admin_index'); // ExampleController::admin_index() + $controller->Croogo->addAco('Rastreamento/admin_edit'); // ExampleController::admin_index() + $controller->Croogo->addAco('Rastreamento/admin_add'); // ExampleController::admin_index() + $controller->Croogo->addAco('Rastreamento/admin_view'); // ExampleController::admin_index() + $controller->Croogo->addAco('Rastreamento/admin_delete'); // ExampleController::admin_index() + + $controller->Croogo->addAco('Rastreamento/index', array('registered', 'public')); // ExampleController::index() + $controller->Croogo->addAco('Rastreamento/add', array('registered', 'public')); // ExampleController::index() + $controller->Croogo->addAco('Rastreamento/edit', array('registered', 'public')); // ExampleController::index() + $controller->Croogo->addAco('Rastreamento/view', array('registered', 'public')); // ExampleController::index() + $controller->Croogo->addAco('Rastreamento/delete', array('registered', 'public')); // ExampleController::index() + + $controller->Croogo->addAco('Rastreamento/automatico', array('registered', 'public')); // ExampleController::index() + + $controller->Croogo->addAco('Rastreamento/webservice', array('registered', 'public')); // ExampleController::index() + $controller->Croogo->addAco('Rastreamento/rss', array('registered', 'public')); // ExampleController::index() + + + + // Main menu: add an Example link + $mainMenu = $controller->Link->Menu->findByAlias('main'); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $mainMenu['Menu']['id'], + ), + )); + $controller->Link->save(array( + 'menu_id' => $mainMenu['Menu']['id'], + 'title' => 'Rastreamento', + 'link' => 'plugin:rastreamento/controller:rastreamentos/action:add', + 'status' => 1, + )); + + } +/** + * onDeactivate will be called if this returns true + * + * @param object $controller Controller + * @return boolean + */ + public function beforeDeactivation(&$controller) { + return true; + } +/** + * Called after deactivating the plugin in ExtensionsPluginsController::admin_toggle() + * + * @param object $controller Controller + * @return void + */ + public function onDeactivation(&$controller) { + // ACL: remove ACOs with permissions + $controller->Croogo->removeAco('Rastreamento'); // RastreamentoController ACO and it's actions will be removed + + // Main menu: delete Rastreamento link + $link = $controller->Link->find('first', array( + 'conditions' => array( + 'Menu.alias' => 'main', + 'Link.link' => 'plugin:rastreamento/controller:rastreamentos/action:add', + ), + )); + $controller->Link->Behaviors->attach('Tree', array( + 'scope' => array( + 'Link.menu_id' => $link['Link']['menu_id'], + ), + )); + if (isset($link['Link']['id'])) { + $controller->Link->delete($link['Link']['id']); + } + } +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/config/rastreamento_bootstrap.php b/app/plugins/rastreamento/config/rastreamento_bootstrap.php new file mode 100644 index 0000000..2a77a0d --- /dev/null +++ b/app/plugins/rastreamento/config/rastreamento_bootstrap.php @@ -0,0 +1,49 @@ + List), + * an extra link called 'Example' will be placed under 'Actions' column. + */ + //Croogo::hookAdminRowAction('Nodes/admin_index', 'Example', 'plugin:example/controller:example/action:index/:id'); +/** + * Admin tab + * + * When adding/editing Content (Nodes), + * an extra tab with title 'Example' will be shown with markup generated from the plugin's admin_tab_node element. + * + * Useful for adding form extra form fields if necessary. + */ + //Croogo::hookAdminTab('Nodes/admin_add', 'Example', 'example.admin_tab_node'); + //Croogo::hookAdminTab('Nodes/admin_edit', 'Example', 'example.admin_tab_node'); +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/config/rastreamento_routes.php b/app/plugins/rastreamento/config/rastreamento_routes.php new file mode 100644 index 0000000..cbc8167 --- /dev/null +++ b/app/plugins/rastreamento/config/rastreamento_routes.php @@ -0,0 +1,38 @@ + 'rastreamento', + 'controller' => 'rastreamentos', + ), array( + 'pass' => array( 'codigo' ) + )); + + /** + * Rastreamento via plugin rastreamento + * RastreamentoController::webservice + * encurtando url + */ + CroogoRouter::connect( '/webservice/:codigo', array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'webservice' + ), array( + 'pass' => array( 'codigo' ) + )); + + CroogoRouter::connect( '/webservice/:codigo/:formato', array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'webservice' + ), array( + 'pass' => array( 'codigo', 'formato' ) + )); + +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/controllers/components/empty b/app/plugins/rastreamento/controllers/components/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/controllers/rastreamentos_controller.php b/app/plugins/rastreamento/controllers/rastreamentos_controller.php new file mode 100644 index 0000000..57a1e7b --- /dev/null +++ b/app/plugins/rastreamento/controllers/rastreamentos_controller.php @@ -0,0 +1,441 @@ + 0 a encomenda nao foi entregue + * Rastreamento.flag => 1 a encomenda foi entregue + */ + $this->Rastreamento->recursive = 0; + $arrCodigos = $this->Rastreamento->find( 'all', array( + 'fields' => array( + 'Rastreamento.id', + 'Rastreamento.hash', + 'Rastreamento.email', + 'Rastreamento.codigo', + 'Rastreamento.situacao', + ), + 'conditions' => array( + "TIMEDIFF( NOW( ), Rastreamento.modified ) >= '03:00:00'", + //'Rastreamento.codigo IS NOT NULL', // por via das duvidas... + 'Rastreamento.codigo !=' => '', // por via das duvidas... + //'Rastreamento.email IS NOT NULL', // por via das duvidas... + 'Rastreamento.email !=' => '', // por via das duvidas... + 'Rastreamento.flag' => 0, + ), + 'order' => array( + 'Rastreamento.modified' => 'DESC', // ordenar pelo mais velho + ), + 'limit' => 10 + )); + + + // se existir um valor no indice + if( isset( $arrCodigos ) && !empty( $arrCodigos ) ) + { + + + // percorre os indices + foreach ( $arrCodigos as $arrCodigo ) + { + + // realiza o rastreamento + $correio = new Correio( $arrCodigo['Rastreamento']['codigo'] ); + + + + // verificando códigos alterados + if( !isset( $correio->erro_msg ) ) + { + + //print_r( $correio ); + + + // salvando o resultado + $this->Rastreamento->id = $arrCodigo['Rastreamento']['id']; + if( $this->Rastreamento->saveField( 'hash', $correio->hash ) ) + { + // não sei porque o Rastreamento::save() não estava funcionando + $this->Rastreamento->saveField( 'situacao', $correio->status ); + + + + // notifica via email + $this->_envia_email( $correio, $arrCodigo ); + + //print_r( $arrCodigo ); + + + //$this->Session->setFlash( __( "Salvo com sucesso", true )); + }else{ + $this->Session->setFlash( __( "Problemas ao salvar", true )); + } + + + }else{ + + $this->Session->setFlash( __( "Hash é identico ao existente, não houve alteração ", true )); + } + } + + }else{ + + $this->Session->setFlash( __( "arrCodigos está vazio ou não existe", true )); + } + } + + + + + protected function _envia_email( $correio, $rastreamento ) + { + + // modo de debugar o email "debug" + //$this->Email->delivery = 'mail'; + + $this->Email->to = $rastreamento['Rastreamento']['email']; + //$this->Email->to = 'john'; + $this->Email->subject = 'Rastreamento '. $rastreamento['Rastreamento']['codigo']; + $this->Email->from = Configure::read('Site.email') .'<'. Configure::read( 'Site.email' ) .'>'; + //$this->Email->from = 'john'; + //$this->Email->replyTo = Configure::read('Site.email') .'<'. Configure::read( 'Site.email' ) .'>'; + //$this->Email->return = Configure::read('Site.email') .'<'. Configure::read( 'Site.email' ) .'>'; + $this->Email->template = 'aviso'; // note no '.ctp' + //Send as 'html', 'text' or 'both' (default is 'text') + $this->Email->sendAs = 'text'; // because we like to send pretty mail + //Set view variables as normal + $this->set( compact( "correio", "rastreamento" )); + //Do not pass any args to send() + if( $this->Email->send() ) + { + $this->Session->setFlash( __("Notificação enviada com sucesso", true )); + }else{ + + $this->Session->setFlash( __("Problemas ao tentar enviar notificação", true )); + } + + + $this->Email->reset(); + } + + + + + + function index() { + $this->Rastreamento->recursive = 0; + $this->set('rastreamentos', $this->paginate()); + } + + + + /** + * WebService Rest de uso da classe com cache + * use: + * http://rastreamentopedido.com/webservice/SZ843766706BR + * http://rastreamentopedido.com/webservice/SZ843766706BR/xml + * http://rastreamentopedido.com/webservice/SZ843766706BR/dump + * http://rastreamentopedido.com/webservice/SZ843766706BR/serial + * e finalmente, para amantes de Ajax: + * http://rastreamentopedido.com/webservice/SZ843766706BR/minhaFuncJs + * + * @param String $codigo código de rastreamento dos correios + * @param String $formato formato de retorno dos dados XML, Json, Serial e Dump. O padrão é Json + * @param String $callback função JavaScript a ser chamada após a execução da consulta + */ + function webservice($codigo = null, $formato = null, $callback = null ) + { + + if (!$codigo) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + + + // Configuração de cache para arquivos do webservice + Cache::set('websevice', array( + 'prefix' => 'cake_webservice_', + 'path' => CACHE . 'webservice' . DS, + 'duration' => '+30 minutes', + )); + + + + + // alterando o layout + $this->layoutPath = "webservice"; + $this->layout = "default"; + + + // Cria nome de arquivo de cache + $cache_file = $codigo; + + // Se o cache existir e tiver menos de 5 minutos de vida + if (file_exists($cache_file) && date('U') - filemtime($cache_file) < 300) + { + + // Retorna o cache + $correio = unserialize( Cache::read( $cache_file )); + $correio->cached = true; + + }else{ + + // Senão, consulta... + App::import( 'Vendor', 'Rastreamento.correios/correio' ); + + // realiza o rastreamento + $correio = new Correio( $codigo ); + + // .. e renova o cache + Cache::write( $cache_file, serialize( $correio ) ); + + $correio->cached = false; + } + + + $this->set( compact( "correio", "formato", "callback" ) ); + } + + + function rss($codigo = null) + { + + if (!$codigo) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + + + // alterando o layout + $this->layoutPath = "rss"; + $this->layout = "default"; + + $arrCodigo = $this->Rastreamento->findByCodigo($codigo); + + + App::import( 'Vendor', 'Rastreamento.correios/correio' ); + + // realiza o rastreamento + $correio = new Correio( $arrCodigo['Rastreamento']['codigo'] ); + + + + $this->set( compact( "correio", "codigo" ) ); + } + + + + + function view($id = null) + { + + if (!$id) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + + + $arrCodigo = $this->Rastreamento->findByCodigo($id); + + + App::import( 'Vendor', 'Rastreamento.correios/correio' ); + + // realiza o rastreamento + $correio = new Correio( $arrCodigo['Rastreamento']['codigo'] ); + + + + $this->set( compact( "correio", "id" ) ); + } + + + + + + /** + * Adiciona o código ao rastreamento + * + */ + function add() + { + + /** + * Se não foi informado o email + * apenas redireciona para o view + */ + if( !empty($this->data) && empty( $this->data['Rastreamento']['email'] ) ) + { + + // redireciona para a view + $this->redirect(array( + 'action' => 'view', + $this->data['Rastreamento']['codigo'] + )); + }else{ + + // cadastra o código para rastrear + if (!empty($this->data)) { + $this->Rastreamento->create(); + if ($this->Rastreamento->save($this->data)) { + $this->Session->setFlash(__('The rastreamento has been saved', true)); + + // redireciona para a view + $this->redirect(array( + 'action' => 'view', + $this->data['Rastreamento']['codigo'] + )); + } else { + $this->Session->setFlash(__('The rastreamento could not be saved. Please, try again.', true)); + } + } + + + }// fim do if email + } + + + + + + function edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->Rastreamento->save($this->data)) { + $this->Session->setFlash(__('The rastreamento has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The rastreamento could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Rastreamento->read(null, $id); + } + } + + + + /** + * Remove o código de rastreamento + * + * @param Integer $id + * @param String $codigo + */ + function delete($id = null, $codigo = null ) + { + // se não existe o ID e o código + if (!$id || !$codigo) { + $this->Session->setFlash(__('Invalid id for rastreamento', true)); + $this->redirect(array('action'=>'index')); + }else{ + + /** + * Apenas conto quantos registros foram + * encontrados, não preciso retornar campos + */ + $intQtnEncontrada = $this->Rastreamento->find( 'count', array( + 'conditions' => array( + 'Rastreamento.codigo' => $codigo, + 'Rastreamento.id' => $id + ) + )); + + // se encontrou algum registro (somente 1 sempre) + if( $intQtnEncontrada != 0 ) + { + + // tenta remover o registro + if ($this->Rastreamento->delete($id)) { + $this->Session->setFlash(__('Rastreamento deleted', true)); + $this->redirect(array('action'=>'index')); + } + + // não conseguiu remover + $this->Session->setFlash(__('Rastreamento was not deleted', true)); + $this->redirect(array('action' => 'index')); + } + } + } + + + + + function admin_index() { + $this->Rastreamento->recursive = 0; + $this->set('rastreamentos', $this->paginate()); + } + + function admin_view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + $this->set('rastreamento', $this->Rastreamento->read(null, $id)); + } + + function admin_add() { + if (!empty($this->data)) { + $this->Rastreamento->create(); + if ($this->Rastreamento->save($this->data)) { + $this->Session->setFlash(__('The rastreamento has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The rastreamento could not be saved. Please, try again.', true)); + } + } + } + + function admin_edit($id = null) { + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid rastreamento', true)); + $this->redirect(array('action' => 'index')); + } + if (!empty($this->data)) { + if ($this->Rastreamento->save($this->data)) { + $this->Session->setFlash(__('The rastreamento has been saved', true)); + $this->redirect(array('action' => 'index')); + } else { + $this->Session->setFlash(__('The rastreamento could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->Rastreamento->read(null, $id); + } + } + + function admin_delete($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid id for rastreamento', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->Rastreamento->delete($id)) { + $this->Session->setFlash(__('Rastreamento deleted', true)); + $this->redirect(array('action'=>'index')); + } + $this->Session->setFlash(__('Rastreamento was not deleted', true)); + $this->redirect(array('action' => 'index')); + } +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/libs/empty b/app/plugins/rastreamento/libs/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/models/behaviors/empty b/app/plugins/rastreamento/models/behaviors/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/models/datasources/empty b/app/plugins/rastreamento/models/datasources/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/models/rastreamento.php b/app/plugins/rastreamento/models/rastreamento.php new file mode 100644 index 0000000..f57d1c4 --- /dev/null +++ b/app/plugins/rastreamento/models/rastreamento.php @@ -0,0 +1,116 @@ + array( + 'notempty' => array( + 'rule' => array('notempty'), + //'message' => 'Your custom message here', + //'allowEmpty' => false, + //'required' => false, + //'last' => false, // Stop validation after this rule + //'on' => 'create', // Limit validation to 'create' or 'update' operations + ), + 'minlength' => array( + 'rule' => array('minlength', 13), + //'message' => 'Your custom message here', + //'allowEmpty' => false, + //'required' => false, + //'last' => false, // Stop validation after this rule + //'on' => 'create', // Limit validation to 'create' or 'update' operations + ), + 'maxlength' => array( + 'rule' => array('maxlength', 13), + //'message' => 'Your custom message here', + //'allowEmpty' => false, + //'required' => false, + //'last' => false, // Stop validation after this rule + //'on' => 'create', // Limit validation to 'create' or 'update' operations + ), + ), + 'email' => array( + 'email' => array( + 'rule' => array('email'), + 'message' => 'Você precisa informar um email válido', + 'allowEmpty' => true, + 'required' => true, + //'last' => false, // Stop validation after this rule + //'on' => 'create', // Limit validation to 'create' or 'update' operations + ), + ), + ); + + + + + public function afterFind( $arrData ) + { + + foreach( $arrData as $chave => $valor ) + { + + // se existir e houver valor + if( isset( $valor['Rastreamento']['identificacao'] ) && empty( $valor['Rastreamento']['identificacao'] ) ) + { + + $arrData[ $chave ]['Rastreamento']['identificacao'] = '---------'; + } + + // se existir e houver valor + if( isset( $valor['Rastreamento']['situacao'] ) && empty( $valor['Rastreamento']['situacao'] ) ) + { + + $arrData[ $chave ]['Rastreamento']['situacao'] = '---------'; + } + } + + + + // desativa rastreamentos com mais de 10 meses + $this->desativa(); + + + return $arrData; + } + + + + public function afterSave( $arrData = null ) + { + + // desativa rastreamentos com mais de 10 meses + //$this->desativa(); + + + + + return true; + } + + + + + /** + * Códigos de rastreamento com mais de + * 10 meses são desativados automaticamente + * + */ + public function desativa() + { + /** + * Códigos com mais de 10 meses + * são desativados do rastreamento + */ + $this->updateAll( array( + 'Rastreamento.flag' => 1, //1 para entregue | 1 para de rastrear + ), array( + "PERIOD_DIFF( DATE_FORMAT( NOW( ), '%Y%m' ), DATE_FORMAT( Rastreamento.modified, '%Y%m' ) ) >= 10", + 'Rastreamento.flag' => 0 + )); + } + + + +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/rastreamento_app_controller.php b/app/plugins/rastreamento/rastreamento_app_controller.php new file mode 100644 index 0000000..2e5257d --- /dev/null +++ b/app/plugins/rastreamento/rastreamento_app_controller.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/rastreamento_app_model.php b/app/plugins/rastreamento/rastreamento_app_model.php new file mode 100644 index 0000000..568a45d --- /dev/null +++ b/app/plugins/rastreamento/rastreamento_app_model.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/tests/cases/behaviors/empty b/app/plugins/rastreamento/tests/cases/behaviors/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/cases/components/empty b/app/plugins/rastreamento/tests/cases/components/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/cases/controllers/empty b/app/plugins/rastreamento/tests/cases/controllers/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/cases/controllers/rastreamentos_controller.test.php b/app/plugins/rastreamento/tests/cases/controllers/rastreamentos_controller.test.php new file mode 100644 index 0000000..08e9a79 --- /dev/null +++ b/app/plugins/rastreamento/tests/cases/controllers/rastreamentos_controller.test.php @@ -0,0 +1,25 @@ +redirectUrl = $url; + } +} + +class RastreamentosControllerTestCase extends CakeTestCase { + function startTest() { + $this->Rastreamentos =& new TestRastreamentosController(); + $this->Rastreamentos->constructClasses(); + } + + function endTest() { + unset($this->Rastreamentos); + ClassRegistry::flush(); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/tests/cases/helpers/empty b/app/plugins/rastreamento/tests/cases/helpers/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/cases/models/empty b/app/plugins/rastreamento/tests/cases/models/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/cases/models/rastreamento.test.php b/app/plugins/rastreamento/tests/cases/models/rastreamento.test.php new file mode 100644 index 0000000..941eacc --- /dev/null +++ b/app/plugins/rastreamento/tests/cases/models/rastreamento.test.php @@ -0,0 +1,16 @@ +Rastreamento =& ClassRegistry::init('Rastreamento'); + } + + function endTest() { + unset($this->Rastreamento); + ClassRegistry::flush(); + } + +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/tests/fixtures/empty b/app/plugins/rastreamento/tests/fixtures/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/tests/fixtures/rastreamento_fixture.php b/app/plugins/rastreamento/tests/fixtures/rastreamento_fixture.php new file mode 100644 index 0000000..951c682 --- /dev/null +++ b/app/plugins/rastreamento/tests/fixtures/rastreamento_fixture.php @@ -0,0 +1,24 @@ + array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'), + 'codigo' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 13), + 'email' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 200), + 'modified' => array('type' => 'datetime', 'null' => true, 'default' => NULL), + 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'MyISAM') + ); + + var $records = array( + array( + 'id' => 1, + 'codigo' => 'Lorem ipsum', + 'email' => 'Lorem ipsum dolor sit amet', + 'modified' => '2011-07-24 06:47:33' + ), + ); +} +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/tests/groups/empty b/app/plugins/rastreamento/tests/groups/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/vendors/correios/LICENSE b/app/plugins/rastreamento/vendors/correios/LICENSE new file mode 100644 index 0000000..2d4513a --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2010, Carlos Andre Ferrari +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 Carlos Andre Ferrari nor the names of its + contributors 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 OWNER 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. + diff --git a/app/plugins/rastreamento/vendors/correios/README b/app/plugins/rastreamento/vendors/correios/README new file mode 100644 index 0000000..0bd98ba --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/README @@ -0,0 +1 @@ +Classe simples para rastrear encomendas nos correios que gera um vetor de encaminhamentos até a entrega diff --git a/app/plugins/rastreamento/vendors/correios/correio.php b/app/plugins/rastreamento/vendors/correios/correio.php new file mode 100644 index 0000000..a10fe3a --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/correio.php @@ -0,0 +1,98 @@ + + * All rights reserved. + */ + +/** + * Correio Class + * + * @author Carlos André Ferrari + */ + +class Correio { + + public $status; + public $hash; + public $erro = false; + public $track; + + /** + * Construtor + * + * @param string $id Código da encomenda + * return void + */ + public function __construct($id=false){ + if ($id){ + if (strlen($id) == 13) $this->track ($id); + else { + $this->erro = true; + $this->erro_msg = 'Código de encomenda Inválido!'; + } + } + } + + /** + * Faz o rastreamendo da encomenda + * + * @param string $id Código da encomenda + * @return void + */ + private function track($id){ + $html = utf8_encode(file_get_contents('http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&P_TIPO=001&P_COD_UNI=' . $id)); + + // Verifica se o objeto ainda não foi postado, caso seja o caso, retorna erro e mensagem + if (strstr($html, 'erro = true; + $this->erro_msg = 'Objeto ainda não foi adicionado no sistema'; + return; + } + + // Hash para monitoramento de alteração de status + $this->hash = md5($html); + + // Limpa o codigo html + $html = preg_replace("@\r|\t|\n| +@", ' ', $html); + $html = str_replace('', "\n", $html); + + // Pega as linhas com o rastreamento + if (preg_match_all('@(.*)@', $html, $mat,PREG_SET_ORDER)){ + $track = array(); + $mat = array_reverse($mat); + $temp = null; + // Formata as linhas e gera um vetor + foreach($mat as $item){ + if (preg_match("@(.*)(.*)(.*)@", $item[0], $d)){ + // Cria uma linha de track + $tmp = array( + 'data' => $d[1], + 'data_sql' => preg_replace('@([0-9]{2})/([0-9]{2})/([0-9]{4}) ([0-9]{2}):([0-9]{2})@', '$3-$2-$1 $4:$5:00',$d[1] ), + 'local' => $d[2], + 'acao' => strtolower($d[3]), + 'detalhes' => '' + ); + + // Se tiver um encaminhamento armazenado + if ($temp){ + $tmp['detalhes'] = $temp; + $temp = null; + } + + // Adiciona o item na lista de rastreamento + $track[] = (object)$tmp; + }else if (preg_match("@(.*)@", $item[0], $d)){ + // Se for um encaminhamento, armazena para o proximo item + $temp = $d[1]; + } + $this->status = $tmp['acao']; + } + $this->track = $track; + return; + } + + // Caso retorne um html desconhecido ou falhe, retorna erro de comunicação + $this->erro = true; + $this->erro_msg = 'Falha de Comunicação com os correios'; + } +} diff --git a/app/plugins/rastreamento/vendors/correios/rss/index.php b/app/plugins/rastreamento/vendors/correios/rss/index.php new file mode 100644 index 0000000..170874a --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/rss/index.php @@ -0,0 +1,37 @@ + +' ?> + + + Rastreando encomenda: <?php echo $codigo ?> + http://ferrari.eti.br + Rastreador de encomendas dos correios, gerador de RSS + pt-BR + erro): ?> + track = array_reverse($c->track) ?> + track as $l): ?> + + acao == 'encaminhado'): ?> + <![CDATA[Encomenda: <?php echo $codigo ?>: <?php echo $l->detalhes ?>]]> + + <![CDATA[Encomenda: <?php echo $codigo ?>: <?php echo $l->acao ?>]]> + + http://ferrari.eti.br/correios/samples/class.php?code= + alterado para acao ?>. detalhes ?>]]> + + + + + + + diff --git a/app/plugins/rastreamento/vendors/correios/samples/class.php b/app/plugins/rastreamento/vendors/correios/samples/class.php new file mode 100644 index 0000000..af12bfd --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/samples/class.php @@ -0,0 +1,51 @@ + + + + + + Rastreamento nos correios + + + + + +

Rastreamento

+ +
+
Pesquisar +

+ +

+
+ erro): + ?> + +

Status: status ?>

+ + + + + + + + + track as $l): ?> + + + + + + + +
DataLocalAçãoDetalhes
data ?>local ?>acao ?>detalhes ?>
+ + erro_msg ?> + + + diff --git a/app/plugins/rastreamento/vendors/correios/samples/webservice.php b/app/plugins/rastreamento/vendors/correios/samples/webservice.php new file mode 100644 index 0000000..ec5f1f5 --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/samples/webservice.php @@ -0,0 +1,50 @@ + + + + + + Rastreamento nos correios + + + + + +

Rastreamento

+ +
+
Pesquisar +

+ +

+
+ erro): + ?> + +

Status: status ?>

+ + + + + + + + + track as $l): ?> + + + + + + + +
DataLocalAçãoDetalhes
data ?>local ?>acao ?>detalhes ?>
+ + erro_msg ?> + + + diff --git a/app/plugins/rastreamento/vendors/correios/webservice/index.php b/app/plugins/rastreamento/vendors/correios/webservice/index.php new file mode 100644 index 0000000..73353fb --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/webservice/index.php @@ -0,0 +1,67 @@ +cached = true; + }else{ + // Senão, consulta... + $obj = new Correio($codigo); + // .. e renova o cache + file_put_contents($cache_file, serialize($obj)); + + $obj->cached = false; + } +}else{ + // Retorna erro de código inválido + $obj = json_decode('{"hash":null,"track":null,"status":null,"erro":true,"formato":"json","erro_msg":"C\u00f3digo de encomenda Inv\u00e1lido!"}'); +} + +// Muda cabeçalho padrão de content para texto simples +header("Content-Type: text/plain"); + +// Retorna no formato solicitado +switch ($formato){ + case 'serial': + exit (serialize($obj)); + case 'dump': + print_r($obj); + exit (); + case 'xml': + header("Content-Type: text/xml"); + include_once 'x2xml.php'; + exit(x2xml($obj)); + case 'json': + default: + if ($jsonp) exit ($jsonp . '(' . json_encode($obj) . ')'); + exit (json_encode($obj)); +} diff --git a/app/plugins/rastreamento/vendors/correios/webservice/x2xml.php b/app/plugins/rastreamento/vendors/correios/webservice/x2xml.php new file mode 100644 index 0000000..c656136 --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/webservice/x2xml.php @@ -0,0 +1,30 @@ + + * @param mixed $array + * @param String $container + * @param Boolean $beginning + * @param Integer $ident + * @return String + */ +function x2xml($array, $container='root', $beginning=true, $ident=0){ + if (is_object($array)) $array = (array)$array; + $output = ($beginning) ? '<'.'?'.'xml version="1.0" encoding="UTF-8"'.'?'.'>' . PHP_EOL : ''; + $output .= str_repeat("\t", $ident) . '<' . $container . '>' . PHP_EOL; + foreach ($array as $k => $v){ + if (!preg_match('@^[a-z0-9A-Z]@', $k)) continue; + if (preg_match('@^[0-9]@', $k)) $k = 'item'; + if (is_array($v) || is_object($v)) + $output .= x2xml($v, $k, false, $ident+1); + else{ + if (!preg_match('@^[0-9a-zA-Z\-_\ \.\:\,\=\/]*$@', $v)) $v = ''; + if (is_bool($v)) $v = $v ? 'true' : 'false'; + $output .= ($v==='' || $v===null) ? + str_repeat("\t", $ident+1) . '<' . $k . '/>' . PHP_EOL : + str_repeat("\t", $ident+1) . '<' . $k . '>' . $v . '' . PHP_EOL; + } + } + $output .= str_repeat("\t", $ident) . '' . PHP_EOL; + return $output; +} + diff --git a/app/plugins/rastreamento/vendors/correios/x2xml.php b/app/plugins/rastreamento/vendors/correios/x2xml.php new file mode 100644 index 0000000..c656136 --- /dev/null +++ b/app/plugins/rastreamento/vendors/correios/x2xml.php @@ -0,0 +1,30 @@ + + * @param mixed $array + * @param String $container + * @param Boolean $beginning + * @param Integer $ident + * @return String + */ +function x2xml($array, $container='root', $beginning=true, $ident=0){ + if (is_object($array)) $array = (array)$array; + $output = ($beginning) ? '<'.'?'.'xml version="1.0" encoding="UTF-8"'.'?'.'>' . PHP_EOL : ''; + $output .= str_repeat("\t", $ident) . '<' . $container . '>' . PHP_EOL; + foreach ($array as $k => $v){ + if (!preg_match('@^[a-z0-9A-Z]@', $k)) continue; + if (preg_match('@^[0-9]@', $k)) $k = 'item'; + if (is_array($v) || is_object($v)) + $output .= x2xml($v, $k, false, $ident+1); + else{ + if (!preg_match('@^[0-9a-zA-Z\-_\ \.\:\,\=\/]*$@', $v)) $v = ''; + if (is_bool($v)) $v = $v ? 'true' : 'false'; + $output .= ($v==='' || $v===null) ? + str_repeat("\t", $ident+1) . '<' . $k . '/>' . PHP_EOL : + str_repeat("\t", $ident+1) . '<' . $k . '>' . $v . '' . PHP_EOL; + } + } + $output .= str_repeat("\t", $ident) . '' . PHP_EOL; + return $output; +} + diff --git a/app/plugins/rastreamento/vendors/empty b/app/plugins/rastreamento/vendors/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/vendors/shells/tasks/empty b/app/plugins/rastreamento/vendors/shells/tasks/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/rastreamento/views/elements/admin_menu.ctp b/app/plugins/rastreamento/views/elements/admin_menu.ctp new file mode 100644 index 0000000..f402ea4 --- /dev/null +++ b/app/plugins/rastreamento/views/elements/admin_menu.ctp @@ -0,0 +1,6 @@ + +
    +
  • Html->link(__('Adicionar', true), array( 'plugin' => 'rastreamento', 'controller' => 'rastreamentos', 'action' => 'add' )); ?>
  • +
  • Html->link(__('Listar', true), array( 'plugin' => 'rastreamento', 'controller' => 'rastreamentos', 'action' => 'index' )); ?>
  • +
  • Html->link(__('Atualizar', true), array( 'plugin' => 'rastreamento', 'admin' => false, 'controller' => 'rastreamentos', 'action' => 'automatico' )); ?>
  • +
\ No newline at end of file diff --git a/app/plugins/rastreamento/views/elements/email/html/aviso.ctp b/app/plugins/rastreamento/views/elements/email/html/aviso.ctp new file mode 100644 index 0000000..a68deae --- /dev/null +++ b/app/plugins/rastreamento/views/elements/email/html/aviso.ctp @@ -0,0 +1,79 @@ +Html->url( array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'view', + $rastreamento['Rastreamento']['codigo'], + ), true); + + + // remover rastreamento + $url_cancelamento = $this->Html->url( array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'delete', + $rastreamento['Rastreamento']['id'], + $rastreamento['Rastreamento']['codigo'] + ), true); + + + // contato + $url_contato = $this->Html->url( array( + 'plugin' => false, + 'controller' => 'contacts', + 'action' => 'view', + 'contact' + ), true ); + + + // se não foi informado uma identificacao troca pelo código + if( !empty( $rastreamento['Rastreamento']['identificacao'] ) ) + { + $identificacao = $rastreamento['Rastreamento']['identificacao']; + }else{ + $identificacao = $rastreamento['Rastreamento']['codigo']; + } + + echo sprintf(__('O rastreamento de sua encomenda %s foi alterado', true), $identificacao ) . "\n \n"; +?> +erro): +?> + +

Status: status ?>

+ + + + + + + + + track as $info): ?> + + + + + + + +
DataLocalAçãoDetalhes
data ?>local ?>acao ?>detalhes ?>
+ +

Ver histórico completo do rastreamento", true ), $url_rastreamento ); ?>

+ +

+ +

clique aqui.", true), $url_cancelamento ); ?>

+ + +

erro_msg ?>

+ + + +

entre em contato.", true), $url_contato ); ?>

+ + +
Mídia Negócios - Soluções para comércio social.
+Html->link( 'http://www.midianegocios.com.br' ); ?> \ No newline at end of file diff --git a/app/plugins/rastreamento/views/elements/email/text/aviso.ctp b/app/plugins/rastreamento/views/elements/email/text/aviso.ctp new file mode 100644 index 0000000..2969cc1 --- /dev/null +++ b/app/plugins/rastreamento/views/elements/email/text/aviso.ctp @@ -0,0 +1,72 @@ +Html->url( array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'view', + $rastreamento['Rastreamento']['codigo'], + ), true); + + + // remover rastreamento + $url_cancelamento = $this->Html->url( array( + 'plugin' => 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'delete', + $rastreamento['Rastreamento']['id'], + $rastreamento['Rastreamento']['codigo'] + ), true); + + + // contato + $url_contato = $this->Html->url( array( + 'plugin' => false, + 'controller' => 'contacts', + 'action' => 'view', + 'contact' + ), true ); + + + // se não foi informado uma identificacao troca pelo código + if( !empty( $rastreamento['Rastreamento']['identificacao'] ) ) + { + $identificacao = $rastreamento['Rastreamento']['identificacao']; + }else{ + $identificacao = $rastreamento['Rastreamento']['codigo']; + } + + echo sprintf(__('O rastreamento de sua encomenda %s foi alterado', true), $identificacao ) . "\n \n"; +?> +erro): +?> + + Status: status ?> + track[ end( $correio->track ) ]->data ) )?$correio->track[ end( $correio->track ) ]->data:''; ?> + + track[ end( $correio->track ) ]->local ) )?$correio->track[ end( $correio->track ) ]->local:''; ?> + + track[ end( $correio->track ) ]->acao ) )?$correio->track[ end( $correio->track ) ]->acao:''; ?> + + track[ end( $correio->track ) ]->detalhes ) )?$correio->track[ end( $correio->track ) ]->detalhes:''; ?> + + + + Ver histórico completo do rastreamento", true ), $url_rastreamento ); ?> + + + + + clique aqui.", true), $url_cancelamento ); ?> + + + erro_msg ?> + + + +entre em contato.", true), $url_contato ); ?> + + +Mídia Negócios - Soluções para comércio social. + \ No newline at end of file diff --git a/app/plugins/rastreamento/views/layouts/json/ajax.ctp b/app/plugins/rastreamento/views/layouts/json/ajax.ctp new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/plugins/rastreamento/views/layouts/json/ajax.ctp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/views/layouts/json/default.ctp b/app/plugins/rastreamento/views/layouts/json/default.ctp new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/plugins/rastreamento/views/layouts/json/default.ctp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/views/layouts/rss/default.ctp b/app/plugins/rastreamento/views/layouts/rss/default.ctp new file mode 100644 index 0000000..a24e1ae --- /dev/null +++ b/app/plugins/rastreamento/views/layouts/rss/default.ctp @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/views/layouts/webservice/webservice.ctp b/app/plugins/rastreamento/views/layouts/webservice/webservice.ctp new file mode 100644 index 0000000..a24e1ae --- /dev/null +++ b/app/plugins/rastreamento/views/layouts/webservice/webservice.ctp @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/views/rastreamentos/add.ctp b/app/plugins/rastreamento/views/rastreamentos/add.ctp new file mode 100644 index 0000000..af4b629 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/add.ctp @@ -0,0 +1,48 @@ +
+Form->create('Rastreamento');?> + +

+ +

Informe o código de rastreamento do seu pedido e clique no botão “Rastrear pedido”, o sistema irá exibir as informações importantes referentes ao seu pedido.

+ + Form->input('codigo', array( 'class' => 'codigo campo inputSize', 'label' => 'Código de rastreamento' ) ); ?> + Form->input('rastrear', array( 'type' => 'checkbox', 'class' => 'campo', 'value' => 1 , 'label' => '', 'between' => 'Acompanhar andamento da entrega via email' )); ?> +
+ Form->input('email', array( 'class' => 'codigo campo inputSize', 'label' => 'Email para notificação' ) ); ?> + Form->input('identificacao', array( 'class' => 'campo inputSize', 'label' => 'Nome para identificar a encomenda' ) ); ?> +
+ + +Form->end(__('Enviar', true));?> + +

Depois de cadastrado o código de rastreamento você poderá acompanhar a entrega através via + Html->link( 'FEED RSS', array( 'action' => 'rss', 'SC372537049BR' )); ?>.

+
+ + + +Html->scriptBlock(' +$(document).ready(function(){ + + /** + * acoes para o cadastro de codigos para + * rastreamento + */ + if( $( "#RastreamentoRastrear" ).get(0) ) + { + + $( ".CodigoNome" ).hide(); + + + // Se o checkbox for marcado + $( "#RastreamentoRastrear:checkbox" ).click( function() + { + + // exibe o campo nome + $( ".CodigoNome" ).toggle(); + }); + } +}); +'); +?> \ No newline at end of file diff --git a/app/plugins/rastreamento/views/rastreamentos/admin_add.ctp b/app/plugins/rastreamento/views/rastreamentos/admin_add.ctp new file mode 100644 index 0000000..9c3c82c --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/admin_add.ctp @@ -0,0 +1,21 @@ +
+

+ +
+
    + +
  • Html->link(sprintf(__('Listar %s', true), __('Rastreamentos', true)), array('action' => 'index'));?>
  • +
+
+ +Form->create('Rastreamento');?> + Form->input('codigo'); + echo $this->Form->input('email'); + echo $this->Form->input('identificacao'); + echo $this->Form->input('situacao'); + echo $this->Form->input('hash'); + echo $this->Form->input('flag'); + ?> +Form->end(__('Enviar', true));?> +
diff --git a/app/plugins/rastreamento/views/rastreamentos/admin_edit.ctp b/app/plugins/rastreamento/views/rastreamentos/admin_edit.ctp new file mode 100644 index 0000000..aa8801c --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/admin_edit.ctp @@ -0,0 +1,24 @@ +
+

+ +
+
    + +
  • Html->link(__('Excluir', true), array('action' => 'delete', $this->Form->value('Rastreamento.id')), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), $this->Form->value('Rastreamento.id'))); ?>
  • +
  • Html->link(sprintf(__('Listar %s', true), __('Rastreamentos', true)), array('action' => 'index'));?>
  • +
+
+ + +Form->create('Rastreamento');?> + Form->input('id'); + echo $this->Form->input('codigo'); + echo $this->Form->input('email'); + echo $this->Form->input('identificacao'); + echo $this->Form->input('situacao'); + echo $this->Form->input('hash'); + echo $this->Form->input('flag'); + ?> +Form->end(__('Enviar', true));?> +
diff --git a/app/plugins/rastreamento/views/rastreamentos/admin_index.ctp b/app/plugins/rastreamento/views/rastreamentos/admin_index.ctp new file mode 100644 index 0000000..6b7c918 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/admin_index.ctp @@ -0,0 +1,53 @@ +
+

+
+
    +
  • Html->link(sprintf(__('Novo %s', true), __('Rastreamento', true)), array('action' => 'add')); ?>
  • +
+
+ + + + + + + + + + + + > + + + + + + + + +
Paginator->sort('id');?>Paginator->sort('codigo');?>Paginator->sort('email');?>Paginator->sort('identificacao');?>Paginator->sort('modified');?>
      + Html->link(__('Ver', true), array('action' => 'view', $rastreamento['Rastreamento']['id'])); ?> + Html->link(__('Editar', true), array('action' => 'edit', $rastreamento['Rastreamento']['id'])); ?> + Html->link(__('Excluir', true), array('action' => 'delete', $rastreamento['Rastreamento']['id']), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), $rastreamento['Rastreamento']['id'])); ?> +
+

+ Paginator->counter(array( + 'format' => __('Página %page% de %pages%, mostrando %current% registros de %count%, começando no registro %start% e terminando no %end%', true) + )); + ?>

+ +
+ Paginator->prev('<< '.__('anterior', true), array(), null, array('class'=>'disabled'));?> + | Paginator->numbers();?> + | + Paginator->next(__('próxima', true).' >>', array(), null, array('class' => 'disabled'));?> +
+
diff --git a/app/plugins/rastreamento/views/rastreamentos/admin_view.ctp b/app/plugins/rastreamento/views/rastreamentos/admin_view.ctp new file mode 100644 index 0000000..c305432 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/admin_view.ctp @@ -0,0 +1,55 @@ +
+

+
+
    +
  • Html->link(sprintf(__('Editar %s', true), __('Rastreamento', true)), array('action' => 'edit', $rastreamento['Rastreamento']['id'])); ?>
  • +
  • Html->link(sprintf(__('Excluir %s', true), __('Rastreamento', true)), array('action' => 'delete', $rastreamento['Rastreamento']['id'], $rastreamento['Rastreamento']['codigo']), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), $rastreamento['Rastreamento']['id'])); ?>
  • +
  • Html->link(sprintf(__('Listar %s', true), __('Rastreamentos', true)), array('action' => 'index')); ?>
  • +
  • Html->link(sprintf(__('Novo %s', true), __('Rastreamento', true)), array('action' => 'add')); ?>
  • +
+
+ + +
+ > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
+
diff --git a/app/plugins/rastreamento/views/rastreamentos/automatico.ctp b/app/plugins/rastreamento/views/rastreamentos/automatico.ctp new file mode 100644 index 0000000..5b888c3 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/automatico.ctp @@ -0,0 +1 @@ +Session->flash('email'); ?> \ No newline at end of file diff --git a/app/plugins/rastreamento/views/rastreamentos/edit.ctp b/app/plugins/rastreamento/views/rastreamentos/edit.ctp new file mode 100644 index 0000000..d8c93b0 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/edit.ctp @@ -0,0 +1,21 @@ +
+ +

+ +Form->create('Rastreamento');?> + Form->input('id'); + echo $this->Form->input('codigo'); + echo $this->Form->input('email'); + echo $this->Form->input('identificacao'); + ?> +Form->end(__('Enviar', true));?> +
+
+

+
    + +
  • Html->link(__('Excluir', true), array('action' => 'delete', $this->Form->value('Rastreamento.id'), $this->Form->value( 'Rastreamento.codigo' ) ), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), $this->Form->value('Rastreamento.codigo'))); ?>
  • +
  • Html->link(sprintf(__('Listar %s', true), __('Rastreamentos', true)), array('action' => 'index'));?>
  • +
+
\ No newline at end of file diff --git a/app/plugins/rastreamento/views/rastreamentos/index.ctp b/app/plugins/rastreamento/views/rastreamentos/index.ctp new file mode 100644 index 0000000..0c336dc --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/index.ctp @@ -0,0 +1,51 @@ +
+

+ + + + + + + + + + > + + + + + + + +
Paginator->sort('id');?>Paginator->sort('codigo');?>Paginator->sort('identificacao');?>Paginator->sort('situacao');?>
     + Html->link(__('Ver', true), array('action' => 'view', $rastreamento['Rastreamento']['codigo'])); ?> + Html->link(__('Editar', true), array('action' => 'edit', $rastreamento['Rastreamento']['id'])); ?> + Html->link(__('Excluir', true), array('action' => 'delete', $rastreamento['Rastreamento']['id'], $rastreamento['Rastreamento']['codigo']), null, sprintf(__('Você tem certeza que deseja excluir o id #%s?', true), $rastreamento['Rastreamento']['codigo'])); ?> +
+

+ Paginator->counter(array( + 'format' => __('Página %page% de %pages%, mostrando %current% registros de %count%, começando no registro %start% e terminando no %end%', true) + )); + ?>

+ +
+ Paginator->prev('<< '.__('anterior', true), array(), null, array('class'=>'disabled'));?> + | Paginator->numbers();?> + | + Paginator->next(__('próxima', true).' >>', array(), null, array('class' => 'disabled'));?> +
+
+
+

+
    +
  • Html->link(sprintf(__('Novo %s', true), __('Rastreamento', true)), array('action' => 'add')); ?>
  • +
+
\ No newline at end of file diff --git a/app/plugins/rastreamento/views/rastreamentos/rss.ctp b/app/plugins/rastreamento/views/rastreamentos/rss.ctp new file mode 100644 index 0000000..968e102 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/rss.ctp @@ -0,0 +1,60 @@ + +' ?> + + + Rastreando encomenda: <?php echo $codigo ?> + + + Rastreamento de encomenda via RSS oferecido por + pt-BR + erro): ?> + track = array_reverse($correio->track) ?> + track as $info): ?> + + acao == 'encaminhado'): ?> + <![CDATA[Encomenda: <?php echo $codigo ?>: <?php echo $info->detalhes ?>]]> + + <![CDATA[Encomenda: <?php echo $codigo ?>: <?php echo $info->acao ?>]]> + + + 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'view', + $codigo + )); + ?> + alterado para acao ?>. detalhes ?>]]> + + + + + + <![CDATA[<?php echo $correio->erro_msg ?>]]> + + 'rastreamento', + 'controller' => 'rastreamentos', + 'action' => 'view', + $codigo + )); + ?> + + + + + + + + + diff --git a/app/plugins/rastreamento/views/rastreamentos/view.ctp b/app/plugins/rastreamento/views/rastreamentos/view.ctp new file mode 100644 index 0000000..34a56c3 --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/view.ctp @@ -0,0 +1,30 @@ +erro): +?> + +

Resultado de rastreamento para

+

Receba o rastreamento desta encomenda diretamente no seu email, saiba como.

+ +

Status: status ?>

+ + + + + + + + + track as $info): ?> + + + + + + + +
DataLocalAçãoDetalhes
data ?>local ?>acao ?>detalhes ?>
+ + + + erro_msg ?> + diff --git a/app/plugins/rastreamento/views/rastreamentos/webservice.ctp b/app/plugins/rastreamento/views/rastreamentos/webservice.ctp new file mode 100644 index 0000000..7e9fc1b --- /dev/null +++ b/app/plugins/rastreamento/views/rastreamentos/webservice.ctp @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/app/plugins/rastreamento/webroot/css/style.css b/app/plugins/rastreamento/webroot/css/style.css new file mode 100644 index 0000000..8c6337f --- /dev/null +++ b/app/plugins/rastreamento/webroot/css/style.css @@ -0,0 +1,18 @@ + +body { + font: 0.8em Sans #333; +} + +table tr:nth-child(odd) { + background: #eee; +} + +table tr:nth-child(1) { + background: #ddd; +} + +table td { + padding: 3px; +} + + diff --git a/app/plugins/rastreamento/webroot/empty b/app/plugins/rastreamento/webroot/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/plugins/tinymce/.svn/entries b/app/plugins/tinymce/.svn/entries new file mode 100644 index 0000000..7f102ba --- /dev/null +++ b/app/plugins/tinymce/.svn/entries @@ -0,0 +1,37 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +webroot +dir + +config +dir + +views +dir + diff --git a/app/plugins/tinymce/config/.svn/entries b/app/plugins/tinymce/config/.svn/entries new file mode 100644 index 0000000..0704b04 --- /dev/null +++ b/app/plugins/tinymce/config/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/config +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +tinymce_bootstrap.php +file + + + + +2010-09-04T08:55:28.000000Z +f25ef4fb9a9c223b75727eef12678471 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +731 + +plugin.yml +file + + + + +2010-09-04T08:55:28.000000Z +d33d4e80c3591201fb3d0d7a40213497 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +164 + diff --git a/app/plugins/tinymce/config/.svn/text-base/plugin.yml.svn-base b/app/plugins/tinymce/config/.svn/text-base/plugin.yml.svn-base new file mode 100644 index 0000000..c8795dc --- /dev/null +++ b/app/plugins/tinymce/config/.svn/text-base/plugin.yml.svn-base @@ -0,0 +1,6 @@ +name: TinyMCE +description: Integrates TinyMCE WYSIWYG editor into Croogo + +author: Fahad Ibnay Heylaal +authorEmail: contact@fahad19.com +authorUrl: http://fahad19.com \ No newline at end of file diff --git a/app/plugins/tinymce/config/.svn/text-base/tinymce_bootstrap.php.svn-base b/app/plugins/tinymce/config/.svn/text-base/tinymce_bootstrap.php.svn-base new file mode 100644 index 0000000..bc66af1 --- /dev/null +++ b/app/plugins/tinymce/config/.svn/text-base/tinymce_bootstrap.php.svn-base @@ -0,0 +1,32 @@ + array( + array( + 'elements' => 'NodeBody', + ), + ), + 'Nodes/admin_edit' => array( + array( + 'elements' => 'NodeBody', + ), + ), + 'Translate/admin_edit' => array( + array( + 'elements' => 'NodeBody', + ), + ), + )); + +/** + * Hook helper + */ + foreach (Configure::read('Tinymce.actions') AS $action => $settings) { + $actionE = explode('/', $action); + Croogo::hookHelper($actionE['0'], 'Tinymce.Tinymce'); + } + Croogo::hookHelper('Attachments', 'Tinymce.Tinymce'); + +?> \ No newline at end of file diff --git a/app/plugins/tinymce/config/plugin.yml b/app/plugins/tinymce/config/plugin.yml new file mode 100644 index 0000000..c8795dc --- /dev/null +++ b/app/plugins/tinymce/config/plugin.yml @@ -0,0 +1,6 @@ +name: TinyMCE +description: Integrates TinyMCE WYSIWYG editor into Croogo + +author: Fahad Ibnay Heylaal +authorEmail: contact@fahad19.com +authorUrl: http://fahad19.com \ No newline at end of file diff --git a/app/plugins/tinymce/config/tinymce_bootstrap.php b/app/plugins/tinymce/config/tinymce_bootstrap.php new file mode 100644 index 0000000..bc66af1 --- /dev/null +++ b/app/plugins/tinymce/config/tinymce_bootstrap.php @@ -0,0 +1,32 @@ + array( + array( + 'elements' => 'NodeBody', + ), + ), + 'Nodes/admin_edit' => array( + array( + 'elements' => 'NodeBody', + ), + ), + 'Translate/admin_edit' => array( + array( + 'elements' => 'NodeBody', + ), + ), + )); + +/** + * Hook helper + */ + foreach (Configure::read('Tinymce.actions') AS $action => $settings) { + $actionE = explode('/', $action); + Croogo::hookHelper($actionE['0'], 'Tinymce.Tinymce'); + } + Croogo::hookHelper('Attachments', 'Tinymce.Tinymce'); + +?> \ No newline at end of file diff --git a/app/plugins/tinymce/views/.svn/entries b/app/plugins/tinymce/views/.svn/entries new file mode 100644 index 0000000..ff69598 --- /dev/null +++ b/app/plugins/tinymce/views/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/views +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +helpers +dir + diff --git a/app/plugins/tinymce/views/helpers/.svn/entries b/app/plugins/tinymce/views/helpers/.svn/entries new file mode 100644 index 0000000..d235329 --- /dev/null +++ b/app/plugins/tinymce/views/helpers/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/views/helpers +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +tinymce.php +file + + + + +2010-09-04T08:55:28.000000Z +a90b41bbe5173408f44c0a07ad565579 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5115 + diff --git a/app/plugins/tinymce/views/helpers/.svn/text-base/tinymce.php.svn-base b/app/plugins/tinymce/views/helpers/.svn/text-base/tinymce.php.svn-base new file mode 100644 index 0000000..dbfb1d9 --- /dev/null +++ b/app/plugins/tinymce/views/helpers/.svn/text-base/tinymce.php.svn-base @@ -0,0 +1,131 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class TinymceHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Js', + ); +/** + * Actions + * + * Format: ControllerName/action_name => settings + * + * @var array + */ + public $actions = array(); +/** + * Default settings for tinymce + * + * @var array + * @access public + */ + public $settings = array( + // General options + 'mode' => 'exact', + 'elements' => '', + 'theme' => 'advanced', + 'relative_urls' => false, + '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', + 'width' => '650px', + 'height' => '250px', + + // Theme options + 'theme_advanced_buttons1' => 'bold,italic,underline,strikethrough,|,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,|,forecolor,backcolor', + 'theme_advanced_buttons3' => 'tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen', + //'theme_advanced_buttons4' => 'insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak', + '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' => 'css/content.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', + + // Attachments browser + 'file_browser_callback' => 'fileBrowserCallBack', + ); + + public function fileBrowserCallBack() { + $output = "function fileBrowserCallBack(field_name, url, type, win) { + browserField = field_name; + browserWin = win; + window.open('".$this->Html->url(array('controller' => 'attachments', 'action' => 'browse'))."', 'browserWindow', 'modal,width=960,height=700,scrollbars=yes'); + }"; + + return $output; + } + + public function selectURL() { + $output = "function selectURL(url) { + if (url == '') return false; + + url = '".Router::url('/uploads/', true)."' + url; + + field = window.top.opener.browserWin.document.forms[0].elements[window.top.opener.browserField]; + field.value = url; + if (field.onchange != null) field.onchange(); + window.top.close(); + window.top.opener.browserWin.focus(); + }"; + + return $output; + } + + public function getSettings($settings = array()) { + $_settings = $this->settings; + $action = Inflector::camelize($this->params['controller']).'/'.$this->params['action']; + if (isset($this->actions[$action])) { + $settings = array(); + foreach ($this->actions[$action] as $action) { + $settings[] = Set::merge($_settings, $action); + } + } + $settings = Set::merge($_settings, $settings); + return $settings; + } + + public function beforeRender() { + if (is_array(Configure::read('Tinymce.actions'))) { + $this->actions = Set::merge($this->actions, Configure::read('Tinymce.actions')); + } + $action = Inflector::camelize($this->params['controller']).'/'.$this->params['action']; + if (Configure::read('Writing.wysiwyg') && isset($this->actions[$action]) && ClassRegistry::getObject('view')) { + $this->Html->script('/tinymce/js/tiny_mce', array('inline' => false)); + $this->Html->scriptBlock($this->fileBrowserCallBack(), array('inline' => false)); + $settings = $this->getSettings(); + foreach ($settings as $setting) { + $this->Html->scriptBlock('tinyMCE.init(' . $this->Js->object($setting) . ');', array('inline' => false)); + } + } + + if ($this->params['controller'] == 'attachments' && $this->params['action'] == 'admin_browse') { + $this->Html->scriptBlock($this->selectURL(), array('inline' => false)); + } + } +} + +?> \ No newline at end of file diff --git a/app/plugins/tinymce/views/helpers/tinymce.php b/app/plugins/tinymce/views/helpers/tinymce.php new file mode 100644 index 0000000..7957664 --- /dev/null +++ b/app/plugins/tinymce/views/helpers/tinymce.php @@ -0,0 +1,131 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class TinymceHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Js', + ); +/** + * Actions + * + * Format: ControllerName/action_name => settings + * + * @var array + */ + public $actions = array(); +/** + * Default settings for tinymce + * + * @var array + * @access public + */ + public $settings = array( + // General options + 'mode' => 'exact', + 'elements' => '', + 'theme' => 'advanced', + 'relative_urls' => false, + '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', + 'width' => '100%', + 'height' => '250px', + + // Theme options + 'theme_advanced_buttons1' => 'bold,italic,underline,strikethrough,|,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,|,forecolor,backcolor', + 'theme_advanced_buttons3' => 'tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen', + //'theme_advanced_buttons4' => 'insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak', + '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' => 'css/content.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', + + // Attachments browser + 'file_browser_callback' => 'fileBrowserCallBack', + ); + + public function fileBrowserCallBack() { + $output = "function fileBrowserCallBack(field_name, url, type, win) { + browserField = field_name; + browserWin = win; + window.open('".$this->Html->url(array('plugin' => false, 'controller' => 'attachments', 'action' => 'browse'))."', 'browserWindow', 'modal,width=960,height=700,scrollbars=yes'); + }"; + + return $output; + } + + public function selectURL() { + $output = "function selectURL(url) { + if (url == '') return false; + + url = '".Router::url('/uploads/', true)."' + url; + + field = window.top.opener.browserWin.document.forms[0].elements[window.top.opener.browserField]; + field.value = url; + if (field.onchange != null) field.onchange(); + window.top.close(); + window.top.opener.browserWin.focus(); + }"; + + return $output; + } + + public function getSettings($settings = array()) { + $_settings = $this->settings; + $action = Inflector::camelize($this->params['controller']).'/'.$this->params['action']; + if (isset($this->actions[$action])) { + $settings = array(); + foreach ($this->actions[$action] as $action) { + $settings[] = Set::merge($_settings, $action); + } + } + $settings = Set::merge($_settings, $settings); + return $settings; + } + + public function beforeRender() { + if (is_array(Configure::read('Tinymce.actions'))) { + $this->actions = Set::merge($this->actions, Configure::read('Tinymce.actions')); + } + $action = Inflector::camelize($this->params['controller']).'/'.$this->params['action']; + if (Configure::read('Writing.wysiwyg') && isset($this->actions[$action]) && ClassRegistry::getObject('view')) { + $this->Html->script('/tinymce/js/tiny_mce', array('inline' => false)); + $this->Html->scriptBlock($this->fileBrowserCallBack(), array('inline' => false)); + $settings = $this->getSettings(); + foreach ($settings as $setting) { + $this->Html->scriptBlock('tinyMCE.init(' . $this->Js->object($setting) . ');', array('inline' => false)); + } + } + + if ($this->params['controller'] == 'attachments' && $this->params['action'] == 'admin_browse') { + $this->Html->scriptBlock($this->selectURL(), array('inline' => false)); + } + } +} + +?> \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/.svn/entries b/app/plugins/tinymce/webroot/.svn/entries new file mode 100644 index 0000000..5ce9e63 --- /dev/null +++ b/app/plugins/tinymce/webroot/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/.svn/entries b/app/plugins/tinymce/webroot/js/.svn/entries new file mode 100644 index 0000000..b757219 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/.svn/entries @@ -0,0 +1,142 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +license.txt +file + + + + +2010-09-04T08:55:28.000000Z +045d04e17422d99e338da75b9c749b7c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +26427 + +utils +dir + +plugins +dir + +tiny_mce.js +file + + + + +2010-09-04T08:55:28.000000Z +a6c24549800937d4d792b4376d4afd94 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +180300 + +langs +dir + +themes +dir + +tiny_mce_popup.js +file + + + + +2010-09-04T08:55:28.000000Z +677d2f88ae991728c80ef15d112652b2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5189 + diff --git a/app/plugins/tinymce/webroot/js/.svn/text-base/license.txt.svn-base b/app/plugins/tinymce/webroot/js/.svn/text-base/license.txt.svn-base new file mode 100644 index 0000000..1837b0a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/.svn/text-base/license.txt.svn-base @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. 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 library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/app/plugins/tinymce/webroot/js/.svn/text-base/tiny_mce.js.svn-base b/app/plugins/tinymce/webroot/js/.svn/text-base/tiny_mce.js.svn-base new file mode 100644 index 0000000..14d3570 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/.svn/text-base/tiny_mce.js.svn-base @@ -0,0 +1 @@ +(function(c){var a=/^\s*|\s*$/g,d;var b={majorVersion:"3",minorVersion:"3.8",releaseDate:"2010-06-30",_init:function(){var r=this,o=document,m=navigator,f=m.userAgent,l,e,k,j,h,q;r.isOpera=c.opera&&opera.buildNumber;r.isWebKit=/WebKit/.test(f);r.isIE=!r.isWebKit&&!r.isOpera&&(/MSIE/gi).test(f)&&(/Explorer/gi).test(m.appName);r.isIE6=r.isIE&&/MSIE [56]/.test(f);r.isGecko=!r.isWebKit&&/Gecko/.test(f);r.isMac=f.indexOf("Mac")!=-1;r.isAir=/adobeair/i.test(f);r.isIDevice=/(iPad|iPhone)/.test(f);if(c.tinyMCEPreInit){r.suffix=tinyMCEPreInit.suffix;r.baseURL=tinyMCEPreInit.base;r.query=tinyMCEPreInit.query;return}r.suffix="";e=o.getElementsByTagName("base");for(l=0;l=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&",'"':""","<":"<",">":">"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat";p.stdMode=u.documentMode===8;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},select:function(q,p){var o=this;return m.dom.Sizzle(q,o.get(p)||o.get(o.settings.root_element)||o.doc,[])},is:function(q,o){var p;if(q.length===undefined){if(o==="*"){return q.nodeType==1}if(b.test(o)){o=o.toLowerCase().split(/,/);q=q.nodeName.toLowerCase();for(p=o.length-1;p>=0;p--){if(o[p]==q){return true}}return false}}return m.dom.Sizzle.matches(o,q.nodeType?[q]:q).length>0},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(m.is(s)){return u+">"+s+""}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=(""+o).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="
"+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="
"+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/

<\/p>|]+)><\/p>|/gi,' 

')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/

]+)>|

/ig,'

');p=p.replace(/<\/p>/gi,"
");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r]+)\/>|/gi,"");if(q.keep_values){if(/)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return""})}r=r.replace(//g,"");function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=z.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){return}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null};if(g.dom.boxModel){(function(){var q=d.doc,l=q.body,n,o;q.documentElement.unselectable=c;function p(r,u){var s=l.createTextRange();try{s.moveToPoint(r,u)}catch(t){s=null}return s}function m(s){var r;if(s.button){r=p(s.x,s.y);if(r){if(r.compareEndPoints("StartToStart",o)>0){r.setEndPoint("StartToStart",o)}else{r.setEndPoint("EndToEnd",o)}r.select()}}else{k()}}function k(){d.unbind(q,"mouseup",k);d.unbind(q,"mousemove",m);n=0}d.bind(q,"mousedown",function(r){if(r.target.nodeName==="HTML"){if(n){k()}n=1;o=p(r.x,r.y);if(o){d.bind(q,"mouseup",k);d.bind(q,"mousemove",m);o.select()}}})})()}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return re[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="

";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j_';if(j.startContainer==k&&j.endContainer==k){k.body.innerHTML=i}else{j.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=i}else{j.insertNode(j.createContextualFragment(i))}}l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndBefore(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML(''+l+"");if(!n){j.collapse(false);j.pasteHTML(''+l+"")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='
'}return t}k("start");k("end");f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=g.win.document.createRange?g.win.document.createRange():g.win.document.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>||<\/html>||]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,">")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"<";case">":return">";case"&":return"&";case'"':return"""}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(
\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^
\s*<\//.test(n)){return""}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(]*>)(.*?)(<\/script>)/g},{pattern:/(]*>)(.*?)(<\/noscript>)/g},{pattern:/(]*>)(.*?)(<\/style>)/g},{pattern:/(]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/()/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/

\s+<\/p>|]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?" 

":" 

");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(//g,"");if(k.entity_encoding=="raw"){j=j.replace(/

 <\/p>|]+)> <\/p>/g,"\u00a0

")}j=j.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return""+i.dom.decode(o.replace(//g,""))+""})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+""+p}))});return j},_unprotect:function(i,j){i=i.replace(/\"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,""))}}if(b.stdMode){e+=''+j.renderHTML()+""}else{e+=""+j.renderHTML()+""}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,""))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,""));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},""+e+"")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+=''}E.iframeHTML+='';if(m.relaxedDomain){E.iframeHTML+=' + + + + + + +
+ + +
+
+ + + + + + + + + + + + + +
+ + +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/entries new file mode 100644 index 0000000..b2f1d1a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advhr/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +advhr.css +file + + + + +2010-09-04T08:55:28.000000Z +2d33b4333e29436b2102747f2ee2f395 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +235 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/text-base/advhr.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/text-base/advhr.css.svn-base new file mode 100644 index 0000000..3fe369c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/css/.svn/text-base/advhr.css.svn-base @@ -0,0 +1,5 @@ +input.radio {border:1px none #000; background:transparent; vertical-align:middle;} +.panel_wrapper div.current {height:80px;} +#width {width:50px; vertical-align:middle;} +#width2 {width:50px; vertical-align:middle;} +#size {width:100px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/css/advhr.css b/app/plugins/tinymce/webroot/js/plugins/advhr/css/advhr.css new file mode 100644 index 0000000..3fe369c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/css/advhr.css @@ -0,0 +1,5 @@ +input.radio {border:1px none #000; background:transparent; vertical-align:middle;} +.panel_wrapper div.current {height:80px;} +#width {width:50px; vertical-align:middle;} +#width2 {width:50px; vertical-align:middle;} +#size {width:100px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin.js new file mode 100644 index 0000000..4d3b062 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin_src.js new file mode 100644 index 0000000..5a4b725 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/editor_plugin_src.js @@ -0,0 +1,57 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedHRPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceAdvancedHr', function() { + ed.windowManager.open({ + file : url + '/rule.htm', + width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)), + height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('advhr', { + title : 'advhr.advhr_desc', + cmd : 'mceAdvancedHr' + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('advhr', n.nodeName == 'HR'); + }); + + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'HR') + ed.selection.select(e); + }); + }, + + getInfo : function() { + return { + longname : 'Advanced HR', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/entries new file mode 100644 index 0000000..db50532 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advhr/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +rule.js +file + + + + +2010-09-04T08:55:28.000000Z +2fa441f1684a33d3ea89bb31cdea1ba5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1279 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/text-base/rule.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/text-base/rule.js.svn-base new file mode 100644 index 0000000..a60c35f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advhr/js/.svn/text-base/rule.js.svn-base @@ -0,0 +1,43 @@ +var AdvHRDialog = { + init : function(ed) { + var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w; + + w = dom.getAttrib(n, 'width'); + f.width.value = w ? parseInt(w) : (dom.getStyle('width') || ''); + f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || ''; + f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width'); + selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px'); + }, + + update : function() { + var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = ''; + + h = ' + + + {#advhr.advhr_desc} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + +
+ + +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/entries new file mode 100644 index 0000000..9f077dc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/entries @@ -0,0 +1,142 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advimage +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +6634dc710b837855baff6d4d3a4f290e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +788 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +fad031c4e7c3d5ebe2d326ce9312a37d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1338 + +css +dir + +image.htm +file + + + + +2010-09-04T08:55:28.000000Z +61844535ef8571bcdd32c7965457edd2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11119 + +img +dir + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..4c7a9c3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..351542f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,50 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedImagePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceAdvImage', function() { + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + file : url + '/image.htm', + width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), + height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('image', { + title : 'advimage.image_desc', + cmd : 'mceAdvImage' + }); + }, + + getInfo : function() { + return { + longname : 'Advanced image', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/image.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/image.htm.svn-base new file mode 100644 index 0000000..7af5a00 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/.svn/text-base/image.htm.svn-base @@ -0,0 +1,232 @@ + + + + {#advimage_dlg.dialog_title} + + + + + + + + + +
+ + +
+
+
+ {#advimage_dlg.general} + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+ +
+ {#advimage_dlg.preview} + +
+
+ +
+
+ {#advimage_dlg.tab_appearance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ {#advimage_dlg.example_img} + Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam + nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum + edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam + erat volutpat. +
+
+ x + px +
  + + + + +
+
+
+
+ +
+
+ {#advimage_dlg.swap_image} + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ + + + +
 
+
+ +
+ {#advimage_dlg.misc} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + +
 
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/entries new file mode 100644 index 0000000..e2d50c7 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advimage/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +advimage.css +file + + + + +2010-09-04T08:55:28.000000Z +cce2bc7334ac52894124133d62c8d09c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +659 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/text-base/advimage.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/text-base/advimage.css.svn-base new file mode 100644 index 0000000..228530f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/css/.svn/text-base/advimage.css.svn-base @@ -0,0 +1,13 @@ +#src_list, #over_list, #out_list {width:280px;} +.mceActionPanel {margin-top:7px;} +.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} +.checkbox {border:0;} +.panel_wrapper div.current {height:305px;} +#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} +#align, #classlist {width:150px;} +#width, #height {vertical-align:middle; width:50px; text-align:center;} +#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} +#class_list {width:180px;} +input {width: 280px;} +#constrain, #onmousemovecheck {width:auto;} +#id, #dir, #lang, #usemap, #longdesc {width:200px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/css/advimage.css b/app/plugins/tinymce/webroot/js/plugins/advimage/css/advimage.css new file mode 100644 index 0000000..228530f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/css/advimage.css @@ -0,0 +1,13 @@ +#src_list, #over_list, #out_list {width:280px;} +.mceActionPanel {margin-top:7px;} +.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} +.checkbox {border:0;} +.panel_wrapper div.current {height:305px;} +#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} +#align, #classlist {width:150px;} +#width, #height {vertical-align:middle; width:50px; text-align:center;} +#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} +#class_list {width:180px;} +input {width: 280px;} +#constrain, #onmousemovecheck {width:auto;} +#id, #dir, #lang, #usemap, #longdesc {width:200px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin.js new file mode 100644 index 0000000..4c7a9c3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin_src.js new file mode 100644 index 0000000..351542f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/editor_plugin_src.js @@ -0,0 +1,50 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedImagePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceAdvImage', function() { + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + file : url + '/image.htm', + width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), + height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('image', { + title : 'advimage.image_desc', + cmd : 'mceAdvImage' + }); + }, + + getInfo : function() { + return { + longname : 'Advanced image', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/image.htm b/app/plugins/tinymce/webroot/js/plugins/advimage/image.htm new file mode 100644 index 0000000..7af5a00 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/image.htm @@ -0,0 +1,232 @@ + + + + {#advimage_dlg.dialog_title} + + + + + + + + + +
+ + +
+
+
+ {#advimage_dlg.general} + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+ +
+ {#advimage_dlg.preview} + +
+
+ +
+
+ {#advimage_dlg.tab_appearance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ {#advimage_dlg.example_img} + Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam + nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum + edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam + erat volutpat. +
+
+ x + px +
  + + + + +
+
+
+
+ +
+
+ {#advimage_dlg.swap_image} + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ + + + +
 
+
+ +
+ {#advimage_dlg.misc} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + +
 
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/entries new file mode 100644 index 0000000..eda3a02 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advimage/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +sample.gif +file + + + + +2010-09-04T08:55:28.000000Z +b9c7057c46716340e8967340ad11766e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1624 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/prop-base/sample.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/prop-base/sample.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/prop-base/sample.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/text-base/sample.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/img/.svn/text-base/sample.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..53bf6890b507741c10910c9e2217ad8247b98e8d GIT binary patch literal 1624 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'); + }, + + init : function(ed) { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(); + + tinyMCEPopup.resizeToInnerSize(); + this.fillClassList('class_list'); + this.fillFileList('src_list', 'tinyMCEImageList'); + this.fillFileList('over_list', 'tinyMCEImageList'); + this.fillFileList('out_list', 'tinyMCEImageList'); + TinyMCE_EditableSelects.init(); + + if (n.nodeName == 'IMG') { + nl.src.value = dom.getAttrib(n, 'src'); + nl.width.value = dom.getAttrib(n, 'width'); + nl.height.value = dom.getAttrib(n, 'height'); + nl.alt.value = dom.getAttrib(n, 'alt'); + nl.title.value = dom.getAttrib(n, 'title'); + nl.vspace.value = this.getAttrib(n, 'vspace'); + nl.hspace.value = this.getAttrib(n, 'hspace'); + nl.border.value = this.getAttrib(n, 'border'); + selectByValue(f, 'align', this.getAttrib(n, 'align')); + selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); + nl.style.value = dom.getAttrib(n, 'style'); + nl.id.value = dom.getAttrib(n, 'id'); + nl.dir.value = dom.getAttrib(n, 'dir'); + nl.lang.value = dom.getAttrib(n, 'lang'); + nl.usemap.value = dom.getAttrib(n, 'usemap'); + nl.longdesc.value = dom.getAttrib(n, 'longdesc'); + nl.insert.value = ed.getLang('update'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) + nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) + nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (ed.settings.inline_styles) { + // Move attribs to styles + if (dom.getAttrib(n, 'align')) + this.updateStyle('align'); + + if (dom.getAttrib(n, 'hspace')) + this.updateStyle('hspace'); + + if (dom.getAttrib(n, 'border')) + this.updateStyle('border'); + + if (dom.getAttrib(n, 'vspace')) + this.updateStyle('vspace'); + } + } + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); + if (isVisible('overbrowser')) + document.getElementById('onmouseoversrc').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); + if (isVisible('outbrowser')) + document.getElementById('onmouseoutsrc').style.width = '260px'; + + // If option enabled default contrain proportions to checked + if (ed.getParam("advimage_constrain_proportions", true)) + f.constrain.checked = true; + + // Check swap image if valid data + if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) + this.setSwapImage(true); + else + this.setSwapImage(false); + + this.changeAppearance(); + this.showPreviewImage(nl.src.value, 1); + }, + + insert : function(file, title) { + var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { + if (!f.alt.value) { + tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { + if (s) + t.insertAndClose(); + }); + + return; + } + } + + t.insertAndClose(); + }, + + insertAndClose : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + // Fixes crash in Safari + if (tinymce.isWebKit) + ed.getWin().focus(); + + if (!ed.settings.inline_styles) { + args = { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }; + } else { + // Remove deprecated values + args = { + vspace : '', + hspace : '', + border : '', + align : '' + }; + } + + tinymce.extend(args, { + src : nl.src.value, + width : nl.width.value, + height : nl.height.value, + alt : nl.alt.value, + title : nl.title.value, + 'class' : getSelectValue(f, 'class_list'), + style : nl.style.value, + id : nl.id.value, + dir : nl.dir.value, + lang : nl.lang.value, + usemap : nl.usemap.value, + longdesc : nl.longdesc.value + }); + + args.onmouseover = args.onmouseout = ''; + + if (f.onmousemovecheck.checked) { + if (nl.onmouseoversrc.value) + args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; + + if (nl.onmouseoutsrc.value) + args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; + } + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + setSwapImage : function(st) { + var f = document.forms[0]; + + f.onmousemovecheck.checked = st; + setBrowserDisabled('overbrowser', !st); + setBrowserDisabled('outbrowser', !st); + + if (f.over_list) + f.over_list.disabled = !st; + + if (f.out_list) + f.out_list.disabled = !st; + + f.onmouseoversrc.disabled = !st; + f.onmouseoutsrc.disabled = !st; + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options.length = 0; + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + lst.options.length = 0; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.elements.width.value = f.elements.height.value = ''; + }, + + updateImageData : function(img, st) { + var f = document.forms[0]; + + if (!st) { + f.elements.width.value = img.width; + f.elements.height.value = img.height; + } + + this.preloadImg = img; + }, + + changeAppearance : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); + + if (img) { + if (ed.getParam('inline_styles')) { + ed.dom.setAttrib(img, 'style', f.style.value); + } else { + img.align = f.align.value; + img.border = f.border.value; + img.hspace = f.hspace.value; + img.vspace = f.vspace.value; + } + } + }, + + changeHeight : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; + f.height.value = tp.toFixed(0); + }, + + changeWidth : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; + f.width.value = tp.toFixed(0); + }, + + updateStyle : function(ty) { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); + + if (tinyMCEPopup.editor.settings.inline_styles) { + // Handle align + if (ty == 'align') { + dom.setStyle(img, 'float', ''); + dom.setStyle(img, 'vertical-align', ''); + + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') + dom.setStyle(img, 'float', v); + else + img.style.verticalAlign = v; + } + } + + // Handle border + if (ty == 'border') { + dom.setStyle(img, 'border', ''); + + v = f.border.value; + if (v || v == '0') { + if (v == '0') + img.style.border = '0'; + else + img.style.border = v + 'px solid black'; + } + } + + // Handle hspace + if (ty == 'hspace') { + dom.setStyle(img, 'marginLeft', ''); + dom.setStyle(img, 'marginRight', ''); + + v = f.hspace.value; + if (v) { + img.style.marginLeft = v + 'px'; + img.style.marginRight = v + 'px'; + } + } + + // Handle vspace + if (ty == 'vspace') { + dom.setStyle(img, 'marginTop', ''); + dom.setStyle(img, 'marginBottom', ''); + + v = f.vspace.value; + if (v) { + img.style.marginTop = v + 'px'; + img.style.marginBottom = v + 'px'; + } + } + + // Merge + dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); + } + }, + + changeMouseMove : function() { + }, + + showPreviewImage : function(u, st) { + if (!u) { + tinyMCEPopup.dom.setHTML('prev', ''); + return; + } + + if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) + this.resetImageData(); + + u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); + + if (!st) + tinyMCEPopup.dom.setHTML('prev', ''); + else + tinyMCEPopup.dom.setHTML('prev', ''); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/js/image.js b/app/plugins/tinymce/webroot/js/plugins/advimage/js/image.js new file mode 100644 index 0000000..d08e469 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/js/image.js @@ -0,0 +1,443 @@ +var ImageDialog = { + preInit : function() { + var url; + + tinyMCEPopup.requireLangPack(); + + if (url = tinyMCEPopup.getParam("external_image_list_url")) + document.write(''); + }, + + init : function(ed) { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(); + + tinyMCEPopup.resizeToInnerSize(); + this.fillClassList('class_list'); + this.fillFileList('src_list', 'tinyMCEImageList'); + this.fillFileList('over_list', 'tinyMCEImageList'); + this.fillFileList('out_list', 'tinyMCEImageList'); + TinyMCE_EditableSelects.init(); + + if (n.nodeName == 'IMG') { + nl.src.value = dom.getAttrib(n, 'src'); + nl.width.value = dom.getAttrib(n, 'width'); + nl.height.value = dom.getAttrib(n, 'height'); + nl.alt.value = dom.getAttrib(n, 'alt'); + nl.title.value = dom.getAttrib(n, 'title'); + nl.vspace.value = this.getAttrib(n, 'vspace'); + nl.hspace.value = this.getAttrib(n, 'hspace'); + nl.border.value = this.getAttrib(n, 'border'); + selectByValue(f, 'align', this.getAttrib(n, 'align')); + selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); + nl.style.value = dom.getAttrib(n, 'style'); + nl.id.value = dom.getAttrib(n, 'id'); + nl.dir.value = dom.getAttrib(n, 'dir'); + nl.lang.value = dom.getAttrib(n, 'lang'); + nl.usemap.value = dom.getAttrib(n, 'usemap'); + nl.longdesc.value = dom.getAttrib(n, 'longdesc'); + nl.insert.value = ed.getLang('update'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) + nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) + nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); + + if (ed.settings.inline_styles) { + // Move attribs to styles + if (dom.getAttrib(n, 'align')) + this.updateStyle('align'); + + if (dom.getAttrib(n, 'hspace')) + this.updateStyle('hspace'); + + if (dom.getAttrib(n, 'border')) + this.updateStyle('border'); + + if (dom.getAttrib(n, 'vspace')) + this.updateStyle('vspace'); + } + } + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); + if (isVisible('overbrowser')) + document.getElementById('onmouseoversrc').style.width = '260px'; + + // Setup browse button + document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); + if (isVisible('outbrowser')) + document.getElementById('onmouseoutsrc').style.width = '260px'; + + // If option enabled default contrain proportions to checked + if (ed.getParam("advimage_constrain_proportions", true)) + f.constrain.checked = true; + + // Check swap image if valid data + if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) + this.setSwapImage(true); + else + this.setSwapImage(false); + + this.changeAppearance(); + this.showPreviewImage(nl.src.value, 1); + }, + + insert : function(file, title) { + var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { + if (!f.alt.value) { + tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { + if (s) + t.insertAndClose(); + }); + + return; + } + } + + t.insertAndClose(); + }, + + insertAndClose : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + // Fixes crash in Safari + if (tinymce.isWebKit) + ed.getWin().focus(); + + if (!ed.settings.inline_styles) { + args = { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }; + } else { + // Remove deprecated values + args = { + vspace : '', + hspace : '', + border : '', + align : '' + }; + } + + tinymce.extend(args, { + src : nl.src.value, + width : nl.width.value, + height : nl.height.value, + alt : nl.alt.value, + title : nl.title.value, + 'class' : getSelectValue(f, 'class_list'), + style : nl.style.value, + id : nl.id.value, + dir : nl.dir.value, + lang : nl.lang.value, + usemap : nl.usemap.value, + longdesc : nl.longdesc.value + }); + + args.onmouseover = args.onmouseout = ''; + + if (f.onmousemovecheck.checked) { + if (nl.onmouseoversrc.value) + args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; + + if (nl.onmouseoutsrc.value) + args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; + } + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + setSwapImage : function(st) { + var f = document.forms[0]; + + f.onmousemovecheck.checked = st; + setBrowserDisabled('overbrowser', !st); + setBrowserDisabled('outbrowser', !st); + + if (f.over_list) + f.over_list.disabled = !st; + + if (f.out_list) + f.out_list.disabled = !st; + + f.onmouseoversrc.disabled = !st; + f.onmouseoutsrc.disabled = !st; + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options.length = 0; + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + lst.options.length = 0; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.elements.width.value = f.elements.height.value = ''; + }, + + updateImageData : function(img, st) { + var f = document.forms[0]; + + if (!st) { + f.elements.width.value = img.width; + f.elements.height.value = img.height; + } + + this.preloadImg = img; + }, + + changeAppearance : function() { + var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); + + if (img) { + if (ed.getParam('inline_styles')) { + ed.dom.setAttrib(img, 'style', f.style.value); + } else { + img.align = f.align.value; + img.border = f.border.value; + img.hspace = f.hspace.value; + img.vspace = f.vspace.value; + } + } + }, + + changeHeight : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; + f.height.value = tp.toFixed(0); + }, + + changeWidth : function() { + var f = document.forms[0], tp, t = this; + + if (!f.constrain.checked || !t.preloadImg) { + return; + } + + if (f.width.value == "" || f.height.value == "") + return; + + tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; + f.width.value = tp.toFixed(0); + }, + + updateStyle : function(ty) { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); + + if (tinyMCEPopup.editor.settings.inline_styles) { + // Handle align + if (ty == 'align') { + dom.setStyle(img, 'float', ''); + dom.setStyle(img, 'vertical-align', ''); + + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') + dom.setStyle(img, 'float', v); + else + img.style.verticalAlign = v; + } + } + + // Handle border + if (ty == 'border') { + dom.setStyle(img, 'border', ''); + + v = f.border.value; + if (v || v == '0') { + if (v == '0') + img.style.border = '0'; + else + img.style.border = v + 'px solid black'; + } + } + + // Handle hspace + if (ty == 'hspace') { + dom.setStyle(img, 'marginLeft', ''); + dom.setStyle(img, 'marginRight', ''); + + v = f.hspace.value; + if (v) { + img.style.marginLeft = v + 'px'; + img.style.marginRight = v + 'px'; + } + } + + // Handle vspace + if (ty == 'vspace') { + dom.setStyle(img, 'marginTop', ''); + dom.setStyle(img, 'marginBottom', ''); + + v = f.vspace.value; + if (v) { + img.style.marginTop = v + 'px'; + img.style.marginBottom = v + 'px'; + } + } + + // Merge + dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); + } + }, + + changeMouseMove : function() { + }, + + showPreviewImage : function(u, st) { + if (!u) { + tinyMCEPopup.dom.setHTML('prev', ''); + return; + } + + if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) + this.resetImageData(); + + u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); + + if (!st) + tinyMCEPopup.dom.setHTML('prev', ''); + else + tinyMCEPopup.dom.setHTML('prev', ''); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/entries new file mode 100644 index 0000000..732b037 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advimage/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +11192eee56b945762dd843279ba34b81 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1244 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..ef81f78 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,43 @@ +tinyMCE.addI18n('en.advimage_dlg',{ +tab_general:"General", +tab_appearance:"Appearance", +tab_advanced:"Advanced", +general:"General", +title:"Title", +preview:"Preview", +constrain_proportions:"Constrain proportions", +langdir:"Language direction", +langcode:"Language code", +long_desc:"Long description link", +style:"Style", +classes:"Classes", +ltr:"Left to right", +rtl:"Right to left", +id:"Id", +map:"Image map", +swap_image:"Swap image", +alt_image:"Alternative image", +mouseover:"for mouse over", +mouseout:"for mouse out", +misc:"Miscellaneous", +example_img:"Appearance preview image", +missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.", +dialog_title:"Insert/edit image", +src:"Image URL", +alt:"Image description", +list:"Image list", +border:"Border", +dimensions:"Dimensions", +vspace:"Vertical space", +hspace:"Horizontal space", +align:"Alignment", +align_baseline:"Baseline", +align_top:"Top", +align_middle:"Middle", +align_bottom:"Bottom", +align_texttop:"Text top", +align_textbottom:"Text bottom", +align_left:"Left", +align_right:"Right", +image_list:"Image list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advimage/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/en_dlg.js new file mode 100644 index 0000000..ef81f78 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advimage/langs/en_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('en.advimage_dlg',{ +tab_general:"General", +tab_appearance:"Appearance", +tab_advanced:"Advanced", +general:"General", +title:"Title", +preview:"Preview", +constrain_proportions:"Constrain proportions", +langdir:"Language direction", +langcode:"Language code", +long_desc:"Long description link", +style:"Style", +classes:"Classes", +ltr:"Left to right", +rtl:"Right to left", +id:"Id", +map:"Image map", +swap_image:"Swap image", +alt_image:"Alternative image", +mouseover:"for mouse over", +mouseout:"for mouse out", +misc:"Miscellaneous", +example_img:"Appearance preview image", +missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.", +dialog_title:"Insert/edit image", +src:"Image URL", +alt:"Image description", +list:"Image list", +border:"Border", +dimensions:"Dimensions", +vspace:"Vertical space", +hspace:"Horizontal space", +align:"Alignment", +align_baseline:"Baseline", +align_top:"Top", +align_middle:"Middle", +align_bottom:"Bottom", +align_texttop:"Text top", +align_textbottom:"Text bottom", +align_left:"Left", +align_right:"Right", +image_list:"Image list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/entries new file mode 100644 index 0000000..d81c297 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/entries @@ -0,0 +1,139 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advlink +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +5e440c6bcb7fd94e7fd597f8a183e16f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +973 + +langs +dir + +link.htm +file + + + + +2010-09-04T08:55:28.000000Z +5fad3e4e68aa4a717cc9947eebd00996 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +14660 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +879025e024380947a404ae3523347c24 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1573 + +css +dir + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..32ea8f3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,61 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { + init : function(ed, url) { + this.editor = ed; + + // Register commands + ed.addCommand('mceAdvLink', function() { + var se = ed.selection; + + // No selection and not in link + if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) + return; + + ed.windowManager.open({ + file : url + '/link.htm', + width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), + height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('link', { + title : 'advlink.link_desc', + cmd : 'mceAdvLink' + }); + + ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); + + ed.onNodeChange.add(function(ed, cm, n, co) { + cm.setDisabled('link', co && n.nodeName != 'A'); + cm.setActive('link', n.nodeName == 'A' && !n.name); + }); + }, + + getInfo : function() { + return { + longname : 'Advanced link', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/link.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/link.htm.svn-base new file mode 100644 index 0000000..0b0e0bc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/.svn/text-base/link.htm.svn-base @@ -0,0 +1,333 @@ + + + + {#advlink_dlg.title} + + + + + + + + +
+ + +
+
+
+ {#advlink_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ +
+
+
+ + + +
+
+ {#advlink_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+ +
+
+ {#advlink_dlg.event_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/entries new file mode 100644 index 0000000..d4a82eb --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advlink/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +advlink.css +file + + + + +2010-09-04T08:55:28.000000Z +19558f5e2b7a7d11968aacdc37e6e436 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +472 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/text-base/advlink.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/text-base/advlink.css.svn-base new file mode 100644 index 0000000..66c6549 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/css/.svn/text-base/advlink.css.svn-base @@ -0,0 +1,8 @@ +.mceLinkList, .mceAnchorList, #targetlist {width:280px;} +.mceActionPanel {margin-top:7px;} +.panel_wrapper div.current {height:320px;} +#classlist, #title, #href {width:280px;} +#popupurl, #popupname {width:200px;} +#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} +#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} +#events_panel input {width:200px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/css/advlink.css b/app/plugins/tinymce/webroot/js/plugins/advlink/css/advlink.css new file mode 100644 index 0000000..66c6549 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/css/advlink.css @@ -0,0 +1,8 @@ +.mceLinkList, .mceAnchorList, #targetlist {width:280px;} +.mceActionPanel {margin-top:7px;} +.panel_wrapper div.current {height:320px;} +#classlist, #title, #href {width:280px;} +#popupurl, #popupname {width:200px;} +#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} +#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} +#events_panel input {width:200px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin.js new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin_src.js new file mode 100644 index 0000000..32ea8f3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/editor_plugin_src.js @@ -0,0 +1,61 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { + init : function(ed, url) { + this.editor = ed; + + // Register commands + ed.addCommand('mceAdvLink', function() { + var se = ed.selection; + + // No selection and not in link + if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) + return; + + ed.windowManager.open({ + file : url + '/link.htm', + width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), + height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('link', { + title : 'advlink.link_desc', + cmd : 'mceAdvLink' + }); + + ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); + + ed.onNodeChange.add(function(ed, cm, n, co) { + cm.setDisabled('link', co && n.nodeName != 'A'); + cm.setActive('link', n.nodeName == 'A' && !n.name); + }); + }, + + getInfo : function() { + return { + longname : 'Advanced link', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/entries new file mode 100644 index 0000000..74f745c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advlink/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +advlink.js +file + + + + +2010-09-04T08:55:28.000000Z +33a77205da3c0f09473f499d71dc1c49 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +16706 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/text-base/advlink.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/text-base/advlink.js.svn-base new file mode 100644 index 0000000..6fa37e8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/js/.svn/text-base/advlink.js.svn-base @@ -0,0 +1,528 @@ +/* Functions for the advlink plugin popup */ + +tinyMCEPopup.requireLangPack(); + +var templates = { + "window.open" : "window.open('${url}','${target}','${options}')" +}; + +function preinit() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); +} + +function changeClass() { + var f = document.forms[0]; + + f.classes.value = getSelectValue(f, 'classlist'); +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + var formObj = document.forms[0]; + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + var action = "insert"; + var html; + + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); + document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); + document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); + document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); + document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); + + // Link list + html = getLinkListHTML('linklisthref','href'); + if (html == "") + document.getElementById("linklisthrefrow").style.display = 'none'; + else + document.getElementById("linklisthrefcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '260px'; + + if (isVisible('popupurlbrowser')) + document.getElementById('popupurl').style.width = '180px'; + + elm = inst.dom.getParent(elm, "A"); + if (elm != null && elm.nodeName == "A") + action = "update"; + + formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); + + setPopupControlsDisabled(true); + + if (action == "update") { + var href = inst.dom.getAttrib(elm, 'href'); + var onclick = inst.dom.getAttrib(elm, 'onclick'); + + // Setup form data + setFormValue('href', href); + setFormValue('title', inst.dom.getAttrib(elm, 'title')); + setFormValue('id', inst.dom.getAttrib(elm, 'id')); + setFormValue('style', inst.dom.getAttrib(elm, "style")); + setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); + setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); + setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); + setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); + setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); + setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('type', inst.dom.getAttrib(elm, 'type')); + setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); + setFormValue('target', inst.dom.getAttrib(elm, 'target')); + setFormValue('classes', inst.dom.getAttrib(elm, 'class')); + + // Parse onclick data + if (onclick != null && onclick.indexOf('window.open') != -1) + parseWindowOpen(onclick); + else + parseFunction(onclick); + + // Select by the values + selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); + selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); + selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); + selectByValue(formObj, 'linklisthref', href); + + if (href.charAt(0) == '#') + selectByValue(formObj, 'anchorlist', href); + + addClassesToList('classlist', 'advlink_styles'); + + selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); + selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true); + } else + addClassesToList('classlist', 'advlink_styles'); +} + +function checkPrefix(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) + n.value = 'http://' + n.value; +} + +function setFormValue(name, value) { + document.forms[0].elements[name].value = value; +} + +function parseWindowOpen(onclick) { + var formObj = document.forms[0]; + + // Preprocess center code + if (onclick.indexOf('return false;') != -1) { + formObj.popupreturn.checked = true; + onclick = onclick.replace('return false;', ''); + } else + formObj.popupreturn.checked = false; + + var onClickData = parseLink(onclick); + + if (onClickData != null) { + formObj.ispopup.checked = true; + setPopupControlsDisabled(false); + + var onClickWindowOptions = parseOptions(onClickData['options']); + var url = onClickData['url']; + + formObj.popupname.value = onClickData['target']; + formObj.popupurl.value = url; + formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); + formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); + + formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); + formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); + + if (formObj.popupleft.value.indexOf('screen') != -1) + formObj.popupleft.value = "c"; + + if (formObj.popuptop.value.indexOf('screen') != -1) + formObj.popuptop.value = "c"; + + formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; + formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; + formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; + formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; + formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; + formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; + formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; + + buildOnClick(); + } +} + +function parseFunction(onclick) { + var formObj = document.forms[0]; + var onClickData = parseLink(onclick); + + // TODO: Add stuff here +} + +function getOption(opts, name) { + return typeof(opts[name]) == "undefined" ? "" : opts[name]; +} + +function setPopupControlsDisabled(state) { + var formObj = document.forms[0]; + + formObj.popupname.disabled = state; + formObj.popupurl.disabled = state; + formObj.popupwidth.disabled = state; + formObj.popupheight.disabled = state; + formObj.popupleft.disabled = state; + formObj.popuptop.disabled = state; + formObj.popuplocation.disabled = state; + formObj.popupscrollbars.disabled = state; + formObj.popupmenubar.disabled = state; + formObj.popupresizable.disabled = state; + formObj.popuptoolbar.disabled = state; + formObj.popupstatus.disabled = state; + formObj.popupreturn.disabled = state; + formObj.popupdependent.disabled = state; + + setBrowserDisabled('popupurlbrowser', state); +} + +function parseLink(link) { + link = link.replace(new RegExp(''', 'g'), "'"); + + var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); + + // Is function name a template function + var template = templates[fnName]; + if (template) { + // Build regexp + var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); + var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; + var replaceStr = ""; + for (var i=0; i'); + for (var i=0; i'; + html += ''; + + for (i=0; i' + name + ''; + } + + html += ''; + + return html; +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm, elementArray, i; + + elm = inst.selection.getNode(); + checkPrefix(document.forms[0].href); + + elm = inst.dom.getParent(elm, "A"); + + // Remove element if there is no href + if (!document.forms[0].href.value) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + i = inst.selection.getBookmark(); + inst.dom.remove(elm, 1); + inst.selection.moveToBookmark(i); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (elm == null) { + inst.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); + + elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); + for (i=0; i' + tinyMCELinkList[i][0] + ''; + + html += ''; + + return html; + + // tinyMCE.debug('-- image list start --', html, '-- image list end --'); +} + +function getTargetListHTML(elm_id, target_form_element) { + var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); + var html = ''; + + html += ''; + + return html; +} + +// While loading +preinit(); +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/js/advlink.js b/app/plugins/tinymce/webroot/js/plugins/advlink/js/advlink.js new file mode 100644 index 0000000..6fa37e8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/js/advlink.js @@ -0,0 +1,528 @@ +/* Functions for the advlink plugin popup */ + +tinyMCEPopup.requireLangPack(); + +var templates = { + "window.open" : "window.open('${url}','${target}','${options}')" +}; + +function preinit() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); +} + +function changeClass() { + var f = document.forms[0]; + + f.classes.value = getSelectValue(f, 'classlist'); +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + var formObj = document.forms[0]; + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + var action = "insert"; + var html; + + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); + document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); + document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); + document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); + document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); + + // Link list + html = getLinkListHTML('linklisthref','href'); + if (html == "") + document.getElementById("linklisthrefrow").style.display = 'none'; + else + document.getElementById("linklisthrefcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '260px'; + + if (isVisible('popupurlbrowser')) + document.getElementById('popupurl').style.width = '180px'; + + elm = inst.dom.getParent(elm, "A"); + if (elm != null && elm.nodeName == "A") + action = "update"; + + formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); + + setPopupControlsDisabled(true); + + if (action == "update") { + var href = inst.dom.getAttrib(elm, 'href'); + var onclick = inst.dom.getAttrib(elm, 'onclick'); + + // Setup form data + setFormValue('href', href); + setFormValue('title', inst.dom.getAttrib(elm, 'title')); + setFormValue('id', inst.dom.getAttrib(elm, 'id')); + setFormValue('style', inst.dom.getAttrib(elm, "style")); + setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); + setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); + setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); + setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); + setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); + setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('type', inst.dom.getAttrib(elm, 'type')); + setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); + setFormValue('target', inst.dom.getAttrib(elm, 'target')); + setFormValue('classes', inst.dom.getAttrib(elm, 'class')); + + // Parse onclick data + if (onclick != null && onclick.indexOf('window.open') != -1) + parseWindowOpen(onclick); + else + parseFunction(onclick); + + // Select by the values + selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); + selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); + selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); + selectByValue(formObj, 'linklisthref', href); + + if (href.charAt(0) == '#') + selectByValue(formObj, 'anchorlist', href); + + addClassesToList('classlist', 'advlink_styles'); + + selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); + selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true); + } else + addClassesToList('classlist', 'advlink_styles'); +} + +function checkPrefix(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) + n.value = 'http://' + n.value; +} + +function setFormValue(name, value) { + document.forms[0].elements[name].value = value; +} + +function parseWindowOpen(onclick) { + var formObj = document.forms[0]; + + // Preprocess center code + if (onclick.indexOf('return false;') != -1) { + formObj.popupreturn.checked = true; + onclick = onclick.replace('return false;', ''); + } else + formObj.popupreturn.checked = false; + + var onClickData = parseLink(onclick); + + if (onClickData != null) { + formObj.ispopup.checked = true; + setPopupControlsDisabled(false); + + var onClickWindowOptions = parseOptions(onClickData['options']); + var url = onClickData['url']; + + formObj.popupname.value = onClickData['target']; + formObj.popupurl.value = url; + formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); + formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); + + formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); + formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); + + if (formObj.popupleft.value.indexOf('screen') != -1) + formObj.popupleft.value = "c"; + + if (formObj.popuptop.value.indexOf('screen') != -1) + formObj.popuptop.value = "c"; + + formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; + formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; + formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; + formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; + formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; + formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; + formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; + + buildOnClick(); + } +} + +function parseFunction(onclick) { + var formObj = document.forms[0]; + var onClickData = parseLink(onclick); + + // TODO: Add stuff here +} + +function getOption(opts, name) { + return typeof(opts[name]) == "undefined" ? "" : opts[name]; +} + +function setPopupControlsDisabled(state) { + var formObj = document.forms[0]; + + formObj.popupname.disabled = state; + formObj.popupurl.disabled = state; + formObj.popupwidth.disabled = state; + formObj.popupheight.disabled = state; + formObj.popupleft.disabled = state; + formObj.popuptop.disabled = state; + formObj.popuplocation.disabled = state; + formObj.popupscrollbars.disabled = state; + formObj.popupmenubar.disabled = state; + formObj.popupresizable.disabled = state; + formObj.popuptoolbar.disabled = state; + formObj.popupstatus.disabled = state; + formObj.popupreturn.disabled = state; + formObj.popupdependent.disabled = state; + + setBrowserDisabled('popupurlbrowser', state); +} + +function parseLink(link) { + link = link.replace(new RegExp(''', 'g'), "'"); + + var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); + + // Is function name a template function + var template = templates[fnName]; + if (template) { + // Build regexp + var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); + var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; + var replaceStr = ""; + for (var i=0; i'); + for (var i=0; i'; + html += ''; + + for (i=0; i' + name + ''; + } + + html += ''; + + return html; +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm, elementArray, i; + + elm = inst.selection.getNode(); + checkPrefix(document.forms[0].href); + + elm = inst.dom.getParent(elm, "A"); + + // Remove element if there is no href + if (!document.forms[0].href.value) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + i = inst.selection.getBookmark(); + inst.dom.remove(elm, 1); + inst.selection.moveToBookmark(i); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (elm == null) { + inst.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); + + elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); + for (i=0; i' + tinyMCELinkList[i][0] + ''; + + html += ''; + + return html; + + // tinyMCE.debug('-- image list start --', html, '-- image list end --'); +} + +function getTargetListHTML(elm_id, target_form_element) { + var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); + var html = ''; + + html += ''; + + return html; +} + +// While loading +preinit(); +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/entries new file mode 100644 index 0000000..f2857aa --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advlink/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +a8f914a5c88714aee11eda0d75c98e71 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1622 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..8ef9c79 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,52 @@ +tinyMCE.addI18n('en.advlink_dlg',{ +title:"Insert/edit link", +url:"Link URL", +target:"Target", +titlefield:"Title", +is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +list:"Link list", +general_tab:"General", +popup_tab:"Popup", +events_tab:"Events", +advanced_tab:"Advanced", +general_props:"General properties", +popup_props:"Popup properties", +event_props:"Events", +advanced_props:"Advanced properties", +popup_opts:"Options", +anchor_names:"Anchors", +target_same:"Open in this window / frame", +target_parent:"Open in parent window / frame", +target_top:"Open in top frame (replaces all frames)", +target_blank:"Open in new window", +popup:"Javascript popup", +popup_url:"Popup URL", +popup_name:"Window name", +popup_return:"Insert 'return false'", +popup_scrollbars:"Show scrollbars", +popup_statusbar:"Show status bar", +popup_toolbar:"Show toolbars", +popup_menubar:"Show menu bar", +popup_location:"Show location bar", +popup_resizable:"Make window resizable", +popup_dependent:"Dependent (Mozilla/Firefox only)", +popup_size:"Size", +popup_position:"Position (X/Y)", +id:"Id", +style:"Style", +classes:"Classes", +target_name:"Target name", +langdir:"Language direction", +target_langcode:"Target language", +langcode:"Language code", +encoding:"Target character encoding", +mime:"Target MIME type", +rel:"Relationship page to target", +rev:"Relationship target to page", +tabindex:"Tabindex", +accesskey:"Accesskey", +ltr:"Left to right", +rtl:"Right to left", +link_list:"Link list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/en_dlg.js new file mode 100644 index 0000000..8ef9c79 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/langs/en_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('en.advlink_dlg',{ +title:"Insert/edit link", +url:"Link URL", +target:"Target", +titlefield:"Title", +is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +list:"Link list", +general_tab:"General", +popup_tab:"Popup", +events_tab:"Events", +advanced_tab:"Advanced", +general_props:"General properties", +popup_props:"Popup properties", +event_props:"Events", +advanced_props:"Advanced properties", +popup_opts:"Options", +anchor_names:"Anchors", +target_same:"Open in this window / frame", +target_parent:"Open in parent window / frame", +target_top:"Open in top frame (replaces all frames)", +target_blank:"Open in new window", +popup:"Javascript popup", +popup_url:"Popup URL", +popup_name:"Window name", +popup_return:"Insert 'return false'", +popup_scrollbars:"Show scrollbars", +popup_statusbar:"Show status bar", +popup_toolbar:"Show toolbars", +popup_menubar:"Show menu bar", +popup_location:"Show location bar", +popup_resizable:"Make window resizable", +popup_dependent:"Dependent (Mozilla/Firefox only)", +popup_size:"Size", +popup_position:"Position (X/Y)", +id:"Id", +style:"Style", +classes:"Classes", +target_name:"Target name", +langdir:"Language direction", +target_langcode:"Target language", +langcode:"Language code", +encoding:"Target character encoding", +mime:"Target MIME type", +rel:"Relationship page to target", +rev:"Relationship target to page", +tabindex:"Tabindex", +accesskey:"Accesskey", +ltr:"Left to right", +rtl:"Right to left", +link_list:"Link list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlink/link.htm b/app/plugins/tinymce/webroot/js/plugins/advlink/link.htm new file mode 100644 index 0000000..0b0e0bc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlink/link.htm @@ -0,0 +1,333 @@ + + + + {#advlink_dlg.title} + + + + + + + + +
+ + +
+
+
+ {#advlink_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ +
+
+
+ + + +
+
+ {#advlink_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+ +
+
+ {#advlink_dlg.event_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/entries new file mode 100644 index 0000000..4e2680a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/advlist +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +ee82521107bc8980b09527a1917e5ccd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2039 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +ef1b759d30dde6e9cc68b766b64e9aa3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3948 + diff --git a/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..02d1697 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..7a665fa --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlist/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,154 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each; + + tinymce.create('tinymce.plugins.AdvListPlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + function buildFormats(str) { + var formats = []; + + each(str.split(/,/), function(type) { + formats.push({ + title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), + styles : { + listStyleType : type == 'default' ? '' : type + } + }); + }); + + return formats; + }; + + // Setup number formats from config or default + t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); + t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); + }, + + createControl: function(name, cm) { + var t = this, btn, format; + + if (name == 'numlist' || name == 'bullist') { + // Default to first item if it's a default item + if (t[name][0].title == 'advlist.def') + format = t[name][0]; + + function hasFormat(node, format) { + var state = true; + + each(format.styles, function(value, name) { + // Format doesn't match + if (t.editor.dom.getStyle(node, name) != value) { + state = false; + return false; + } + }); + + return state; + }; + + function applyListFormat() { + var list, ed = t.editor, dom = ed.dom, sel = ed.selection; + + // Check for existing list element + list = dom.getParent(sel.getNode(), 'ol,ul'); + + // Switch/add list type if needed + if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) + ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); + + // Append styles to new list element + if (format) { + list = dom.getParent(sel.getNode(), 'ol,ul'); + + if (list) { + dom.setStyles(list, format.styles); + list.removeAttribute('_mce_style'); + } + } + }; + + btn = cm.createSplitButton(name, { + title : 'advanced.' + name + '_desc', + 'class' : 'mce_' + name, + onclick : function() { + applyListFormat(); + } + }); + + btn.onRenderMenu.add(function(btn, menu) { + menu.onShowMenu.add(function() { + var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList; + + if (list || format) { + fmtList = t[name]; + + // Unselect existing items + each(menu.items, function(item) { + var state = true; + + item.setSelected(0); + + if (list && !item.isDisabled()) { + each(fmtList, function(fmt) { + if (fmt.id == item.id) { + if (!hasFormat(list, fmt)) { + state = false; + return false; + } + } + }); + + if (state) + item.setSelected(1); + } + }); + + // Select the current format + if (!list) + menu.items[format.id].setSelected(1); + } + }); + + menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + each(t[name], function(item) { + item.id = t.editor.dom.uniqueId(); + + menu.add({id : item.id, title : item.title, onclick : function() { + format = item; + applyListFormat(); + }}); + }); + }); + + return btn; + } + }, + + getInfo : function() { + return { + longname : 'Advanced lists', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin.js new file mode 100644 index 0000000..02d1697 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin_src.js new file mode 100644 index 0000000..7a665fa --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/advlist/editor_plugin_src.js @@ -0,0 +1,154 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each; + + tinymce.create('tinymce.plugins.AdvListPlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + function buildFormats(str) { + var formats = []; + + each(str.split(/,/), function(type) { + formats.push({ + title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), + styles : { + listStyleType : type == 'default' ? '' : type + } + }); + }); + + return formats; + }; + + // Setup number formats from config or default + t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); + t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); + }, + + createControl: function(name, cm) { + var t = this, btn, format; + + if (name == 'numlist' || name == 'bullist') { + // Default to first item if it's a default item + if (t[name][0].title == 'advlist.def') + format = t[name][0]; + + function hasFormat(node, format) { + var state = true; + + each(format.styles, function(value, name) { + // Format doesn't match + if (t.editor.dom.getStyle(node, name) != value) { + state = false; + return false; + } + }); + + return state; + }; + + function applyListFormat() { + var list, ed = t.editor, dom = ed.dom, sel = ed.selection; + + // Check for existing list element + list = dom.getParent(sel.getNode(), 'ol,ul'); + + // Switch/add list type if needed + if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) + ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); + + // Append styles to new list element + if (format) { + list = dom.getParent(sel.getNode(), 'ol,ul'); + + if (list) { + dom.setStyles(list, format.styles); + list.removeAttribute('_mce_style'); + } + } + }; + + btn = cm.createSplitButton(name, { + title : 'advanced.' + name + '_desc', + 'class' : 'mce_' + name, + onclick : function() { + applyListFormat(); + } + }); + + btn.onRenderMenu.add(function(btn, menu) { + menu.onShowMenu.add(function() { + var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList; + + if (list || format) { + fmtList = t[name]; + + // Unselect existing items + each(menu.items, function(item) { + var state = true; + + item.setSelected(0); + + if (list && !item.isDisabled()) { + each(fmtList, function(fmt) { + if (fmt.id == item.id) { + if (!hasFormat(list, fmt)) { + state = false; + return false; + } + } + }); + + if (state) + item.setSelected(1); + } + }); + + // Select the current format + if (!list) + menu.items[format.id].setSelected(1); + } + }); + + menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + each(t[name], function(item) { + item.id = t.editor.dom.uniqueId(); + + menu.add({id : item.id, title : item.title, onclick : function() { + format = item; + applyListFormat(); + }}); + }); + }); + + return btn; + } + }, + + getInfo : function() { + return { + longname : 'Advanced lists', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/entries new file mode 100644 index 0000000..95db994 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/autoresize +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +8f831bdcf6a177b5b23c7b79ec6f8a06 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1222 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +98bb9d5fd2ea763fdbf3a506c9580ce1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3656 + diff --git a/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..1676b15 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..c260b7a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autoresize/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,119 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + /** + * Auto Resize + * + * This plugin automatically resizes the content area to fit its content height. + * It will retain a minimum height, which is the height of the content area when + * it's initialized. + */ + tinymce.create('tinymce.plugins.AutoResizePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + var t = this; + + if (ed.getParam('fullscreen_is_enabled')) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; + + // Get height differently depending on the browser used + myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight; + + // Don't make it smaller than the minimum height + if (myHeight > t.autoresize_min_height) + resizeHeight = myHeight; + + // Resize content element + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + + // if we're throbbing, we'll re-throb to match the new size + if (t.throbbing) { + ed.setProgressState(false); + ed.setProgressState(true); + } + }; + + t.editor = ed; + + // Define minimum height + t.autoresize_min_height = ed.getElement().offsetHeight; + + // Add appropriate listeners for resizing content area + ed.onChange.add(resize); + ed.onSetContent.add(resize); + ed.onPaste.add(resize); + ed.onKeyUp.add(resize); + ed.onPostRender.add(resize); + + if (ed.getParam('autoresize_on_init', true)) { + // Things to do when the editor is ready + ed.onInit.add(function(ed, l) { + // Show throbber until content area is resized properly + ed.setProgressState(true); + t.throbbing = true; + + // Hide scrollbars + ed.getBody().style.overflowY = "hidden"; + }); + + ed.onLoadContent.add(function(ed, l) { + resize(); + + // Because the content area resizes when its content CSS loads, + // and we can't easily add a listener to its onload event, + // we'll just trigger a resize after a short loading period + setTimeout(function() { + resize(); + + // Disable throbber + ed.setProgressState(false); + t.throbbing = false; + }, 1250); + }); + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceAutoResize', resize); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto Resize', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin.js new file mode 100644 index 0000000..1676b15 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin_src.js new file mode 100644 index 0000000..c260b7a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autoresize/editor_plugin_src.js @@ -0,0 +1,119 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + /** + * Auto Resize + * + * This plugin automatically resizes the content area to fit its content height. + * It will retain a minimum height, which is the height of the content area when + * it's initialized. + */ + tinymce.create('tinymce.plugins.AutoResizePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + var t = this; + + if (ed.getParam('fullscreen_is_enabled')) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; + + // Get height differently depending on the browser used + myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight; + + // Don't make it smaller than the minimum height + if (myHeight > t.autoresize_min_height) + resizeHeight = myHeight; + + // Resize content element + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + + // if we're throbbing, we'll re-throb to match the new size + if (t.throbbing) { + ed.setProgressState(false); + ed.setProgressState(true); + } + }; + + t.editor = ed; + + // Define minimum height + t.autoresize_min_height = ed.getElement().offsetHeight; + + // Add appropriate listeners for resizing content area + ed.onChange.add(resize); + ed.onSetContent.add(resize); + ed.onPaste.add(resize); + ed.onKeyUp.add(resize); + ed.onPostRender.add(resize); + + if (ed.getParam('autoresize_on_init', true)) { + // Things to do when the editor is ready + ed.onInit.add(function(ed, l) { + // Show throbber until content area is resized properly + ed.setProgressState(true); + t.throbbing = true; + + // Hide scrollbars + ed.getBody().style.overflowY = "hidden"; + }); + + ed.onLoadContent.add(function(ed, l) { + resize(); + + // Because the content area resizes when its content CSS loads, + // and we can't easily add a listener to its onload event, + // we'll just trigger a resize after a short loading period + setTimeout(function() { + resize(); + + // Disable throbber + ed.setProgressState(false); + t.throbbing = false; + }, 1250); + }); + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceAutoResize', resize); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto Resize', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/entries new file mode 100644 index 0000000..798c030 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/entries @@ -0,0 +1,99 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/autosave +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +2dd40fe291d69c9b0049707517a79930 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3549 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +2c2a22c1bfe144cab45a0d3503dcb4ec +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +13007 + diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..6e48540 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { + // Show confirm dialog if the editor isn't empty + ed.windowManager.confirm( + PLUGIN_NAME + ".warning_message", + function(ok) { + if (ok) + self.restoreDraft(); + } + ); + } else + self.restoreDraft(); + } + }); + + // Enable/disable restoredraft button depending on if there is a draft stored or not + ed.onNodeChange.add(function() { + var controlManager = ed.controlManager; + + if (controlManager.get(RESTORE_DRAFT)) + controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); + }); + + ed.onInit.add(function() { + // Check if the user added the restore button, then setup auto storage logic + if (ed.controlManager.get(RESTORE_DRAFT)) { + // Setup storage engine + self.setupStorage(ed); + + // Auto save contents each interval time + setInterval(function() { + self.storeDraft(); + ed.nodeChanged(); + }, settings.autosave_interval); + } + }); + + /** + * This event gets fired when a draft is stored to local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onStoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft is restored from local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRestoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft removed/expired. + * + * @event onRemoveDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRemoveDraft = new Dispatcher(self); + + // Add ask before unload dialog only add one unload handler + if (!unloadHandlerAdded) { + window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; + unloadHandlerAdded = TRUE; + } + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + /** + * Returns an expiration date UTC string. + * + * @method getExpDate + * @return {String} Expiration date UTC string. + */ + getExpDate : function() { + return new Date( + new Date().getTime() + this.editor.settings.autosave_retention + ).toUTCString(); + }, + + /** + * This method will setup the storage engine. If the browser has support for it. + * + * @method setupStorage + */ + setupStorage : function(ed) { + var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; + + self.key = PLUGIN_NAME + ed.id; + + // Loop though each storage engine type until we find one that works + tinymce.each([ + function() { + // Try HTML5 Local Storage + if (localStorage) { + localStorage.setItem(testKey, testVal); + + if (localStorage.getItem(testKey) === testVal) { + localStorage.removeItem(testKey); + + return localStorage; + } + } + }, + + function() { + // Try HTML5 Session Storage + if (sessionStorage) { + sessionStorage.setItem(testKey, testVal); + + if (sessionStorage.getItem(testKey) === testVal) { + sessionStorage.removeItem(testKey); + + return sessionStorage; + } + } + }, + + function() { + // Try IE userData + if (tinymce.isIE) { + ed.getElement().style.behavior = "url('#default#userData')"; + + // Fake localStorage on old IE + return { + autoExpires : TRUE, + + setItem : function(key, value) { + var userDataElement = ed.getElement(); + + userDataElement.setAttribute(key, value); + userDataElement.expires = self.getExpDate(); + userDataElement.save("TinyMCE"); + }, + + getItem : function(key) { + var userDataElement = ed.getElement(); + + userDataElement.load("TinyMCE"); + + return userDataElement.getAttribute(key); + }, + + removeItem : function(key) { + ed.getElement().removeAttribute(key); + } + }; + } + }, + ], function(setup) { + // Try executing each function to find a suitable storage engine + try { + self.storage = setup(); + + if (self.storage) + return false; + } catch (e) { + // Ignore + } + }); + }, + + /** + * This method will store the current contents in the the storage engine. + * + * @method storeDraft + */ + storeDraft : function() { + var self = this, storage = self.storage, editor = self.editor, expires, content; + + // Is the contents dirty + if (storage) { + // If there is no existing key and the contents hasn't been changed since + // it's original value then there is no point in saving a draft + if (!storage.getItem(self.key) && !editor.isDirty()) + return; + + // Store contents if the contents if longer than the minlength of characters + content = editor.getContent({draft: true}); + if (content.length > editor.settings.autosave_minlength) { + expires = self.getExpDate(); + + // Store expiration date if needed IE userData has auto expire built in + if (!self.storage.autoExpires) + self.storage.setItem(self.key + "_expires", expires); + + self.storage.setItem(self.key, content); + self.onStoreDraft.dispatch(self, { + expires : expires, + content : content + }); + } + } + }, + + /** + * This method will restore the contents from the storage engine back to the editor. + * + * @method restoreDraft + */ + restoreDraft : function() { + var self = this, storage = self.storage; + + if (storage) { + content = storage.getItem(self.key); + + if (content) { + self.editor.setContent(content); + self.onRestoreDraft.dispatch(self, { + content : content + }); + } + } + }, + + /** + * This method will return true/false if there is a local storage draft available. + * + * @method hasDraft + * @return {boolean} true/false state if there is a local draft. + */ + hasDraft : function() { + var self = this, storage = self.storage, expDate, exists; + + if (storage) { + // Does the item exist at all + exists = !!storage.getItem(self.key); + if (exists) { + // Storage needs autoexpire + if (!self.storage.autoExpires) { + expDate = new Date(storage.getItem(self.key + "_expires")); + + // Contents hasn't expired + if (new Date().getTime() < expDate.getTime()) + return TRUE; + + // Remove it if it has + self.removeDraft(); + } else + return TRUE; + } + } + + return false; + }, + + /** + * Removes the currently stored draft. + * + * @method removeDraft + */ + removeDraft : function() { + var self = this, storage = self.storage, key = self.key, content; + + if (storage) { + // Get current contents and remove the existing draft + content = storage.getItem(key); + storage.removeItem(key); + storage.removeItem(key + "_expires"); + + // Dispatch remove event if we had any contents + if (content) { + self.onRemoveDraft.dispatch(self, { + content : content + }); + } + } + }, + + "static" : { + // Internal unload handler will be called before the page is unloaded + _beforeUnloadHandler : function(e) { + var msg; + + tinymce.each(tinyMCE.editors, function(ed) { + // Store a draft for each editor instance + if (ed.plugins.autosave) + ed.plugins.autosave.storeDraft(); + + // Never ask in fullscreen mode + if (ed.getParam("fullscreen_is_enabled")) + return; + + // Setup a return message if the editor is dirty + if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) + msg = ed.getLang("autosave.unload_msg"); + }); + + return msg; + } + } + }); + + tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); +})(tinymce); diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/autosave/editor_plugin.js new file mode 100644 index 0000000..6e48540 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/editor_plugin.js @@ -0,0 +1 @@ +(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { + // Show confirm dialog if the editor isn't empty + ed.windowManager.confirm( + PLUGIN_NAME + ".warning_message", + function(ok) { + if (ok) + self.restoreDraft(); + } + ); + } else + self.restoreDraft(); + } + }); + + // Enable/disable restoredraft button depending on if there is a draft stored or not + ed.onNodeChange.add(function() { + var controlManager = ed.controlManager; + + if (controlManager.get(RESTORE_DRAFT)) + controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); + }); + + ed.onInit.add(function() { + // Check if the user added the restore button, then setup auto storage logic + if (ed.controlManager.get(RESTORE_DRAFT)) { + // Setup storage engine + self.setupStorage(ed); + + // Auto save contents each interval time + setInterval(function() { + self.storeDraft(); + ed.nodeChanged(); + }, settings.autosave_interval); + } + }); + + /** + * This event gets fired when a draft is stored to local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onStoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft is restored from local storage. + * + * @event onStoreDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRestoreDraft = new Dispatcher(self); + + /** + * This event gets fired when a draft removed/expired. + * + * @event onRemoveDraft + * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. + * @param {Object} draft Draft object containing the HTML contents of the editor. + */ + self.onRemoveDraft = new Dispatcher(self); + + // Add ask before unload dialog only add one unload handler + if (!unloadHandlerAdded) { + window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; + unloadHandlerAdded = TRUE; + } + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Auto save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + /** + * Returns an expiration date UTC string. + * + * @method getExpDate + * @return {String} Expiration date UTC string. + */ + getExpDate : function() { + return new Date( + new Date().getTime() + this.editor.settings.autosave_retention + ).toUTCString(); + }, + + /** + * This method will setup the storage engine. If the browser has support for it. + * + * @method setupStorage + */ + setupStorage : function(ed) { + var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; + + self.key = PLUGIN_NAME + ed.id; + + // Loop though each storage engine type until we find one that works + tinymce.each([ + function() { + // Try HTML5 Local Storage + if (localStorage) { + localStorage.setItem(testKey, testVal); + + if (localStorage.getItem(testKey) === testVal) { + localStorage.removeItem(testKey); + + return localStorage; + } + } + }, + + function() { + // Try HTML5 Session Storage + if (sessionStorage) { + sessionStorage.setItem(testKey, testVal); + + if (sessionStorage.getItem(testKey) === testVal) { + sessionStorage.removeItem(testKey); + + return sessionStorage; + } + } + }, + + function() { + // Try IE userData + if (tinymce.isIE) { + ed.getElement().style.behavior = "url('#default#userData')"; + + // Fake localStorage on old IE + return { + autoExpires : TRUE, + + setItem : function(key, value) { + var userDataElement = ed.getElement(); + + userDataElement.setAttribute(key, value); + userDataElement.expires = self.getExpDate(); + userDataElement.save("TinyMCE"); + }, + + getItem : function(key) { + var userDataElement = ed.getElement(); + + userDataElement.load("TinyMCE"); + + return userDataElement.getAttribute(key); + }, + + removeItem : function(key) { + ed.getElement().removeAttribute(key); + } + }; + } + }, + ], function(setup) { + // Try executing each function to find a suitable storage engine + try { + self.storage = setup(); + + if (self.storage) + return false; + } catch (e) { + // Ignore + } + }); + }, + + /** + * This method will store the current contents in the the storage engine. + * + * @method storeDraft + */ + storeDraft : function() { + var self = this, storage = self.storage, editor = self.editor, expires, content; + + // Is the contents dirty + if (storage) { + // If there is no existing key and the contents hasn't been changed since + // it's original value then there is no point in saving a draft + if (!storage.getItem(self.key) && !editor.isDirty()) + return; + + // Store contents if the contents if longer than the minlength of characters + content = editor.getContent({draft: true}); + if (content.length > editor.settings.autosave_minlength) { + expires = self.getExpDate(); + + // Store expiration date if needed IE userData has auto expire built in + if (!self.storage.autoExpires) + self.storage.setItem(self.key + "_expires", expires); + + self.storage.setItem(self.key, content); + self.onStoreDraft.dispatch(self, { + expires : expires, + content : content + }); + } + } + }, + + /** + * This method will restore the contents from the storage engine back to the editor. + * + * @method restoreDraft + */ + restoreDraft : function() { + var self = this, storage = self.storage; + + if (storage) { + content = storage.getItem(self.key); + + if (content) { + self.editor.setContent(content); + self.onRestoreDraft.dispatch(self, { + content : content + }); + } + } + }, + + /** + * This method will return true/false if there is a local storage draft available. + * + * @method hasDraft + * @return {boolean} true/false state if there is a local draft. + */ + hasDraft : function() { + var self = this, storage = self.storage, expDate, exists; + + if (storage) { + // Does the item exist at all + exists = !!storage.getItem(self.key); + if (exists) { + // Storage needs autoexpire + if (!self.storage.autoExpires) { + expDate = new Date(storage.getItem(self.key + "_expires")); + + // Contents hasn't expired + if (new Date().getTime() < expDate.getTime()) + return TRUE; + + // Remove it if it has + self.removeDraft(); + } else + return TRUE; + } + } + + return false; + }, + + /** + * Removes the currently stored draft. + * + * @method removeDraft + */ + removeDraft : function() { + var self = this, storage = self.storage, key = self.key, content; + + if (storage) { + // Get current contents and remove the existing draft + content = storage.getItem(key); + storage.removeItem(key); + storage.removeItem(key + "_expires"); + + // Dispatch remove event if we had any contents + if (content) { + self.onRemoveDraft.dispatch(self, { + content : content + }); + } + } + }, + + "static" : { + // Internal unload handler will be called before the page is unloaded + _beforeUnloadHandler : function(e) { + var msg; + + tinymce.each(tinyMCE.editors, function(ed) { + // Store a draft for each editor instance + if (ed.plugins.autosave) + ed.plugins.autosave.storeDraft(); + + // Never ask in fullscreen mode + if (ed.getParam("fullscreen_is_enabled")) + return; + + // Setup a return message if the editor is dirty + if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) + msg = ed.getLang("autosave.unload_msg"); + }); + + return msg; + } + } + }); + + tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); +})(tinymce); diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/entries new file mode 100644 index 0000000..7640377 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/autosave/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en.js +file + + + + +2010-09-04T08:55:28.000000Z +2afbb334b74594f116bbc1d08e7217ba +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +253 + diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/text-base/en.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/text-base/en.js.svn-base new file mode 100644 index 0000000..219f769 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/.svn/text-base/en.js.svn-base @@ -0,0 +1,4 @@ +tinyMCE.addI18n('en.autosave',{ +restore_content: "Restore auto-saved content", +warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/autosave/langs/en.js b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/en.js new file mode 100644 index 0000000..219f769 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/autosave/langs/en.js @@ -0,0 +1,4 @@ +tinyMCE.addI18n('en.autosave',{ +restore_content: "Restore auto-saved content", +warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/entries new file mode 100644 index 0000000..02f99c2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/bbcode +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +0539055daa100b90540707c5eb5ea67b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3224 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +021acbeadcc796e8e04b1bef65388132 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4235 + diff --git a/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..930fdff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/(.*?)<\/span>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
/gi,"\n");b(//gi,"\n");b(/
/gi,"\n");b(/

/gi,"");b(/<\/p>/gi,"\n");b(/ /gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..3d27c46 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/bbcode/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,120 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.BBCodePlugin', { + init : function(ed, url) { + var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t['_' + dialect + '_bbcode2html'](o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t['_' + dialect + '_bbcode2html'](o.content); + + if (o.get) + o.content = t['_' + dialect + '_html2bbcode'](o.content); + }); + }, + + getInfo : function() { + return { + longname : 'BBCode Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + // HTML -> BBCode in PunBB dialect + _punbb_html2bbcode : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); + rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); + rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); + rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); + rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); + rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); + rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); + rep(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); + rep(/<\/(strong|b)>/gi,"[/b]"); + rep(/<(strong|b)>/gi,"[b]"); + rep(/<\/(em|i)>/gi,"[/i]"); + rep(/<(em|i)>/gi,"[i]"); + rep(/<\/u>/gi,"[/u]"); + rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
/gi,"\n"); + rep(//gi,"\n"); + rep(/
/gi,"\n"); + rep(/

/gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ /gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/gi,"&"); + + return s; + }, + + // BBCode -> HTML from PunBB dialect + _punbb_bbcode2html : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: [b] to + rep(/\n/gi,"
"); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin.js new file mode 100644 index 0000000..930fdff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/(.*?)<\/span>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
/gi,"\n");b(//gi,"\n");b(/
/gi,"\n");b(/

/gi,"");b(/<\/p>/gi,"\n");b(/ /gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000..3d27c46 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/bbcode/editor_plugin_src.js @@ -0,0 +1,120 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.BBCodePlugin', { + init : function(ed, url) { + var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t['_' + dialect + '_bbcode2html'](o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t['_' + dialect + '_bbcode2html'](o.content); + + if (o.get) + o.content = t['_' + dialect + '_html2bbcode'](o.content); + }); + }, + + getInfo : function() { + return { + longname : 'BBCode Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + // HTML -> BBCode in PunBB dialect + _punbb_html2bbcode : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); + rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); + rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); + rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); + rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); + rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); + rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); + rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); + rep(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); + rep(/<\/(strong|b)>/gi,"[/b]"); + rep(/<(strong|b)>/gi,"[b]"); + rep(/<\/(em|i)>/gi,"[/i]"); + rep(/<(em|i)>/gi,"[i]"); + rep(/<\/u>/gi,"[/u]"); + rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
/gi,"\n"); + rep(//gi,"\n"); + rep(/
/gi,"\n"); + rep(/

/gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ /gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/gi,"&"); + + return s; + }, + + // BBCode -> HTML from PunBB dialect + _punbb_bbcode2html : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: [b] to + rep(/\n/gi,"
"); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/entries new file mode 100644 index 0000000..4815f59 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/contextmenu +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +af9c25cf256c5c815310cba1c702ab5f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2308 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +07dcb54cf01c8fce4d896f9b1e388fbd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4512 + diff --git a/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..9749e51 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..0bf76a3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/contextmenu/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,147 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; + + /** + * This plugin a context menu to TinyMCE editor instances. + * + * @class tinymce.plugins.ContextMenu + */ + tinymce.create('tinymce.plugins.ContextMenu', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @method init + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed) { + var t = this, lastRng; + + t.editor = ed; + + /** + * This event gets fired when the context menu is shown. + * + * @event onContextMenu + * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. + * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. + */ + t.onContextMenu = new tinymce.util.Dispatcher(this); + + ed.onContextMenu.add(function(ed, e) { + if (!e.ctrlKey) { + // Restore the last selection since it was removed + if (lastRng) + ed.selection.setRng(lastRng); + + t._getMenu(ed).showMenu(e.clientX, e.clientY); + Event.add(ed.getDoc(), 'click', function(e) { + hide(ed, e); + }); + Event.cancel(e); + } + }); + + ed.onRemove.add(function() { + if (t._menu) + t._menu.removeAll(); + }); + + function hide(ed, e) { + lastRng = null; + + // Since the contextmenu event moves + // the selection we need to store it away + if (e && e.button == 2) { + lastRng = ed.selection.getRng(); + return; + } + + if (t._menu) { + t._menu.removeAll(); + t._menu.destroy(); + Event.remove(ed.getDoc(), 'click', hide); + } + }; + + ed.onMouseDown.add(hide); + ed.onKeyDown.add(hide); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Contextmenu', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _getMenu : function(ed) { + var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2; + + if (m) { + m.removeAll(); + m.destroy(); + } + + p1 = DOM.getPos(ed.getContentAreaContainer()); + p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('contextmenu', { + offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), + offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), + constrain : 1 + }); + + t._menu = m; + + m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col); + m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col); + m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'}); + + if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) { + m.addSeparator(); + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + } + + m.addSeparator(); + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + + m.addSeparator(); + am = m.addMenu({title : 'contextmenu.align'}); + am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'}); + am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'}); + am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'}); + am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'}); + + t.onContextMenu.dispatch(t, m, el, col); + + return m; + } + }); + + // Register plugin + tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin.js new file mode 100644 index 0000000..9749e51 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin_src.js new file mode 100644 index 0000000..0bf76a3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/contextmenu/editor_plugin_src.js @@ -0,0 +1,147 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; + + /** + * This plugin a context menu to TinyMCE editor instances. + * + * @class tinymce.plugins.ContextMenu + */ + tinymce.create('tinymce.plugins.ContextMenu', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @method init + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed) { + var t = this, lastRng; + + t.editor = ed; + + /** + * This event gets fired when the context menu is shown. + * + * @event onContextMenu + * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. + * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. + */ + t.onContextMenu = new tinymce.util.Dispatcher(this); + + ed.onContextMenu.add(function(ed, e) { + if (!e.ctrlKey) { + // Restore the last selection since it was removed + if (lastRng) + ed.selection.setRng(lastRng); + + t._getMenu(ed).showMenu(e.clientX, e.clientY); + Event.add(ed.getDoc(), 'click', function(e) { + hide(ed, e); + }); + Event.cancel(e); + } + }); + + ed.onRemove.add(function() { + if (t._menu) + t._menu.removeAll(); + }); + + function hide(ed, e) { + lastRng = null; + + // Since the contextmenu event moves + // the selection we need to store it away + if (e && e.button == 2) { + lastRng = ed.selection.getRng(); + return; + } + + if (t._menu) { + t._menu.removeAll(); + t._menu.destroy(); + Event.remove(ed.getDoc(), 'click', hide); + } + }; + + ed.onMouseDown.add(hide); + ed.onKeyDown.add(hide); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @method getInfo + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Contextmenu', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _getMenu : function(ed) { + var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2; + + if (m) { + m.removeAll(); + m.destroy(); + } + + p1 = DOM.getPos(ed.getContentAreaContainer()); + p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('contextmenu', { + offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), + offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), + constrain : 1 + }); + + t._menu = m; + + m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col); + m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col); + m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'}); + + if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) { + m.addSeparator(); + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + } + + m.addSeparator(); + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + + m.addSeparator(); + am = m.addMenu({title : 'contextmenu.align'}); + am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'}); + am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'}); + am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'}); + am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'}); + + t.onContextMenu.dispatch(t, m, el, col); + + return m; + } + }); + + // Register plugin + tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/entries new file mode 100644 index 0000000..fa734cd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/directionality +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +653c3a89058b610fd12242faf4f01cdf +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1333 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +7a8992f2005bd63d97c151edb2d67ce9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1994 + diff --git a/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..bce8e73 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..205d02c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/directionality/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,82 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Directionality', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + ed.addCommand('mceDirectionLTR', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "ltr") + ed.dom.setAttrib(e, "dir", "ltr"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addCommand('mceDirectionRTL', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "rtl") + ed.dom.setAttrib(e, "dir", "rtl"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); + ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); + + ed.onNodeChange.add(t._nodeChange, t); + }, + + getInfo : function() { + return { + longname : 'Directionality', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var dom = ed.dom, dir; + + n = dom.getParent(n, dom.isBlock); + if (!n) { + cm.setDisabled('ltr', 1); + cm.setDisabled('rtl', 1); + return; + } + + dir = dom.getAttrib(n, 'dir'); + cm.setActive('ltr', dir == "ltr"); + cm.setDisabled('ltr', 0); + cm.setActive('rtl', dir == "rtl"); + cm.setDisabled('rtl', 0); + } + }); + + // Register plugin + tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin.js new file mode 100644 index 0000000..bce8e73 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin_src.js new file mode 100644 index 0000000..205d02c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/directionality/editor_plugin_src.js @@ -0,0 +1,82 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Directionality', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + ed.addCommand('mceDirectionLTR', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "ltr") + ed.dom.setAttrib(e, "dir", "ltr"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addCommand('mceDirectionRTL', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "rtl") + ed.dom.setAttrib(e, "dir", "rtl"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); + ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); + + ed.onNodeChange.add(t._nodeChange, t); + }, + + getInfo : function() { + return { + longname : 'Directionality', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var dom = ed.dom, dir; + + n = dom.getParent(n, dom.isBlock); + if (!n) { + cm.setDisabled('ltr', 1); + cm.setDisabled('rtl', 1); + return; + } + + dir = dom.getAttrib(n, 'dir'); + cm.setActive('ltr', dir == "ltr"); + cm.setDisabled('ltr', 0); + cm.setActive('rtl', dir == "rtl"); + cm.setDisabled('rtl', 0); + } + }); + + // Register plugin + tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/entries new file mode 100644 index 0000000..34e455b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/entries @@ -0,0 +1,139 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/emotions +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +98cba02e33fc108024f3e993be0b0b62 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +676 + +emotions.htm +file + + + + +2010-09-04T08:55:28.000000Z +f806f30d6961fa7d1964458a310749a7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4445 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +11848fa746a3fa7390731389d25c79bb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1178 + +img +dir + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..dbdd8ff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..aeee199 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,43 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + tinymce.create('tinymce.plugins.EmotionsPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceEmotion', function() { + ed.windowManager.open({ + file : url + '/emotions.htm', + width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)), + height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'}); + }, + + getInfo : function() { + return { + longname : 'Emotions', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/emotions.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/emotions.htm.svn-base new file mode 100644 index 0000000..5927b60 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/.svn/text-base/emotions.htm.svn-base @@ -0,0 +1,40 @@ + + + + {#emotions_dlg.title} + + + + +

+
{#emotions_dlg.title}:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{#emotions_dlg.cool}{#emotions_dlg.cry}{#emotions_dlg.embarassed}{#emotions_dlg.foot_in_mouth}
{#emotions_dlg.frown}{#emotions_dlg.innocent}{#emotions_dlg.kiss}{#emotions_dlg.laughing}
{#emotions_dlg.money_mouth}{#emotions_dlg.sealed}{#emotions_dlg.smile}{#emotions_dlg.surprised}
{#emotions_dlg.tongue-out}{#emotions_dlg.undecided}{#emotions_dlg.wink}{#emotions_dlg.yell}
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin.js new file mode 100644 index 0000000..dbdd8ff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin.js @@ -0,0 +1 @@ +(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin_src.js new file mode 100644 index 0000000..aeee199 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/editor_plugin_src.js @@ -0,0 +1,43 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + tinymce.create('tinymce.plugins.EmotionsPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceEmotion', function() { + ed.windowManager.open({ + file : url + '/emotions.htm', + width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)), + height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'}); + }, + + getInfo : function() { + return { + longname : 'Emotions', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/emotions.htm b/app/plugins/tinymce/webroot/js/plugins/emotions/emotions.htm new file mode 100644 index 0000000..5927b60 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/emotions.htm @@ -0,0 +1,40 @@ + + + + {#emotions_dlg.title} + + + + +
+
{#emotions_dlg.title}:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{#emotions_dlg.cool}{#emotions_dlg.cry}{#emotions_dlg.embarassed}{#emotions_dlg.foot_in_mouth}
{#emotions_dlg.frown}{#emotions_dlg.innocent}{#emotions_dlg.kiss}{#emotions_dlg.laughing}
{#emotions_dlg.money_mouth}{#emotions_dlg.sealed}{#emotions_dlg.smile}{#emotions_dlg.surprised}
{#emotions_dlg.tongue-out}{#emotions_dlg.undecided}{#emotions_dlg.wink}{#emotions_dlg.yell}
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/entries new file mode 100644 index 0000000..ebadce3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/entries @@ -0,0 +1,572 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/emotions/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +smiley-innocent.gif +file + + + + +2010-09-04T08:55:28.000000Z +ec0477c8a206ff250782e40f9bae4b4c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +336 + +smiley-surprised.gif +file + + + + +2010-09-04T08:55:28.000000Z +eff5a6fbfb80ca2d3ae929b0a1c15638 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +342 + +smiley-money-mouth.gif +file + + + + +2010-09-04T08:55:28.000000Z +11c14bd1496afd0e21df115d25b68e96 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +321 + +smiley-undecided.gif +file + + + + +2010-09-04T08:55:28.000000Z +3c0c011d16b1a2331385ed97e160a42a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +337 + +smiley-frown.gif +file + + + + +2010-09-04T08:55:28.000000Z +59930208822fe755f651a67ef4b70530 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +340 + +smiley-cool.gif +file + + + + +2010-09-04T08:55:28.000000Z +e26e97a318f82ec144b0818e5a8f8edb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +354 + +smiley-cry.gif +file + + + + +2010-09-04T08:55:28.000000Z +e72bf995ceca9230273ed9909c5db9c8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +329 + +smiley-sealed.gif +file + + + + +2010-09-04T08:55:28.000000Z +28b9401b59fb7ad10b96f57aaa2630c4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +325 + +smiley-laughing.gif +file + + + + +2010-09-04T08:55:28.000000Z +b691cfd07d8181059f8a4b041d534cc4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +344 + +smiley-foot-in-mouth.gif +file + + + + +2010-09-04T08:55:28.000000Z +905294088277f201be5a8e0285fb7998 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +344 + +smiley-yell.gif +file + + + + +2010-09-04T08:55:28.000000Z +19bb8ebfe3c2f5ef3ffb9aa4a027900d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +336 + +smiley-embarassed.gif +file + + + + +2010-09-04T08:55:28.000000Z +d59171236e6b0b96091eeda1f7b57ce3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +331 + +smiley-tongue-out.gif +file + + + + +2010-09-04T08:55:28.000000Z +5ec3bb4781c8e43a51d3a1a948b98fc0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +328 + +smiley-wink.gif +file + + + + +2010-09-04T08:55:28.000000Z +4ae6aa98aa63363c16ea74f927696bd9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +351 + +smiley-kiss.gif +file + + + + +2010-09-04T08:55:28.000000Z +4ae8945f3960751b5d294f18242e144d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +338 + +smiley-smile.gif +file + + + + +2010-09-04T08:55:28.000000Z +c676407db519bdf42481870746f097d8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +345 + diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cool.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cool.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cool.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cry.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cry.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-cry.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-embarassed.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-embarassed.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-embarassed.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-foot-in-mouth.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-foot-in-mouth.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-foot-in-mouth.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-frown.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-frown.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-frown.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-innocent.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-innocent.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-innocent.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-kiss.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-kiss.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-kiss.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-laughing.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-laughing.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-laughing.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-money-mouth.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-money-mouth.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-money-mouth.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-sealed.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-sealed.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-sealed.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-smile.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-smile.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-smile.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-surprised.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-surprised.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-surprised.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-tongue-out.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-tongue-out.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-tongue-out.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-undecided.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-undecided.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-undecided.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-wink.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-wink.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-wink.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-yell.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-yell.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/prop-base/smiley-yell.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cool.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cool.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..ba90cc36fb0415d0273d1cd206bff63fd9c91fde GIT binary patch literal 354 zcmV-o0iFIwNk%w1VG;lm0Mr!#3ke00dJfFY%i+lrhK7V(RutUQJhPY;?(XfrsZKgL z7WLQ^zPO&zzav{)SL^9nBOw~z(=orMEH5uC-P_gr`uhCnASMa|$-iRw?m_(dUwU8) zq>Kx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cry.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-cry.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-embarassed.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-embarassed.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kfFn;iS@Hvj+tA^8LW0018VEC2ui01^Na000Hm;3tYuX_jM3Mo7199TGt*Nf;R= zNmOPKwA8_2Q6MTDP6eT`I1VESVj-zGIG(JdB3U44kcdI@;AAq{Gv^^O%%ltj2GdB) z>vIL;d*~=0a|w1Bf^!cF9R~+vb94;_0}TxWlnMrlj2MuVoSYAreF`3(0|pHS8VLgr zi3bP_qZ;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-innocent.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-innocent.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-laughing.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-laughing.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..1606c119e75678c4031f384e0d50849906e8f533 GIT binary patch literal 344 zcmV-e0jK^)Nk%w1VG;lm0MruzQauf>s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyCjsu$J9F8}}lA^8LW0018VEC2ui01^Na000HT;3tYxX_jM37RWXX8&XUv=@{Oj zX@_Sxw3H&!kzgQ?2LvPOL=>Y5VxieY9+_+eqFEql6OKWXd3Ze8Ggf2Zln@U|mI9d9 zGm^(wVUTA5cYs-V1`2#+a})^z6chrF5`~8k5e6@pmkW`GeGw<069yTQaGnH)s0suV zR|pCd0ZtRCsjM9VB^L+~7X%f*zyuc%2p3=#ycf#L%McYo9|{Z&5D^#_78qL%3{WW( X7Xb)FP6z?UH6ODVz!ev-DIowmgll^P literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-smile.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-smile.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e6a9e60d5ddd1243fbbf2197b4dc6cd9c1b58b93 GIT binary patch literal 345 zcmV-f0jB;(Nk%w1VG;lm0MrlwCJF+^#>SR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UVAU=FH^0ssI2A^8LW0018VEC2ui01^Na000Hn;3tYuX_jM3Mn>j&nGr!MNh}v4 zNyxPjwA7*EKx`%q#$Vl9SM>N9ReH-cn1&^4jYXf0KotqjT;UWC94U(4-NtX4#i!%9}pHA2?&dg3>XLr r8Wuqx2Nnhn1xrT-4h9xbDb^GQ8V(K`1{C5o)#U;I0p5-K5CQ-@9%ySnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*+__>9}pJ}3JDSl85wB_3Jn)Q o9|so(4+|I^92g4^1{Y8%(iR3pP6ig=HPPY$`~mLZA3^{CJDB=?L;wH) literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-tongue-out.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-tongue-out.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-undecided.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-undecided.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-wink.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-wink.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9faf1aff8f4b28e02f4f414975fe1859c43b6b54 GIT binary patch literal 351 zcmV-l0igazNk%w1VG;lm0MrryC=CL}#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfH#!YTdnIsgCwA^8LW0018VEC2ui01^Na000Ht;3tYwX_jM3P6j6koH0o%Sun&A zMF+tYv=pL2IcOdp&qH&dG!P?+ArV0)J)O=Yk}%LD6Go&#@MJn3he8=)%%lWOM*#pN zEDD9iq9J$@90v~;83`GC4i0+{2OJ0pVtacF5E}yn8<`pmkCBv_pqZEtoPY-l0}P>= z3WE6cr`19U7DgF9{F}at6R35*Q5~ x2OgBy9tRx_7(pKh7zPvsOGgA01{hE&-4zBzP6id}HMp@0Krnzkbss_i06S`>cdh^c literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-yell.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/emotions/img/.svn/text-base/smiley-yell.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..648e6e879123fe49beebbc1f3635141864a79a9c GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryG8O{K#>IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkpKx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-cry.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-embarassed.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-embarassed.gif new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kfFn;iS@Hvj+tA^8LW0018VEC2ui01^Na000Hm;3tYuX_jM3Mo7199TGt*Nf;R= zNmOPKwA8_2Q6MTDP6eT`I1VESVj-zGIG(JdB3U44kcdI@;AAq{Gv^^O%%ltj2GdB) z>vIL;d*~=0a|w1Bf^!cF9R~+vb94;_0}TxWlnMrlj2MuVoSYAreF`3(0|pHS8VLgr zi3bP_qZ;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-innocent.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-innocent.gif new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-laughing.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-laughing.gif new file mode 100644 index 0000000000000000000000000000000000000000..1606c119e75678c4031f384e0d50849906e8f533 GIT binary patch literal 344 zcmV-e0jK^)Nk%w1VG;lm0MruzQauf>s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyCjsu$J9F8}}lA^8LW0018VEC2ui01^Na000HT;3tYxX_jM37RWXX8&XUv=@{Oj zX@_Sxw3H&!kzgQ?2LvPOL=>Y5VxieY9+_+eqFEql6OKWXd3Ze8Ggf2Zln@U|mI9d9 zGm^(wVUTA5cYs-V1`2#+a})^z6chrF5`~8k5e6@pmkW`GeGw<069yTQaGnH)s0suV zR|pCd0ZtRCsjM9VB^L+~7X%f*zyuc%2p3=#ycf#L%McYo9|{Z&5D^#_78qL%3{WW( X7Xb)FP6z?UH6ODVz!ev-DIowmgll^P literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-smile.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6a9e60d5ddd1243fbbf2197b4dc6cd9c1b58b93 GIT binary patch literal 345 zcmV-f0jB;(Nk%w1VG;lm0MrlwCJF+^#>SR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UVAU=FH^0ssI2A^8LW0018VEC2ui01^Na000Hn;3tYuX_jM3Mn>j&nGr!MNh}v4 zNyxPjwA7*EKx`%q#$Vl9SM>N9ReH-cn1&^4jYXf0KotqjT;UWC94U(4-NtX4#i!%9}pHA2?&dg3>XLr r8Wuqx2Nnhn1xrT-4h9xbDb^GQ8V(K`1{C5o)#U;I0p5-K5CQ-@9%ySnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*+__>9}pJ}3JDSl85wB_3Jn)Q o9|so(4+|I^92g4^1{Y8%(iR3pP6ig=HPPY$`~mLZA3^{CJDB=?L;wH) literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-tongue-out.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-tongue-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-undecided.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-undecided.gif new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-wink.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..9faf1aff8f4b28e02f4f414975fe1859c43b6b54 GIT binary patch literal 351 zcmV-l0igazNk%w1VG;lm0MrryC=CL}#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfH#!YTdnIsgCwA^8LW0018VEC2ui01^Na000Ht;3tYwX_jM3P6j6koH0o%Sun&A zMF+tYv=pL2IcOdp&qH&dG!P?+ArV0)J)O=Yk}%LD6Go&#@MJn3he8=)%%lWOM*#pN zEDD9iq9J$@90v~;83`GC4i0+{2OJ0pVtacF5E}yn8<`pmkCBv_pqZEtoPY-l0}P>= z3WE6cr`19U7DgF9{F}at6R35*Q5~ x2OgBy9tRx_7(pKh7zPvsOGgA01{hE&-4zBzP6id}HMp@0Krnzkbss_i06S`>cdh^c literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-yell.gif b/app/plugins/tinymce/webroot/js/plugins/emotions/img/smiley-yell.gif new file mode 100644 index 0000000000000000000000000000000000000000..648e6e879123fe49beebbc1f3635141864a79a9c GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryG8O{K#>IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkp + + + {#example_dlg.title} + + + + + +
+

Here is a example dialog.

+

Selected text:

+

Custom arg:

+ +
+ + +
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..edc1e77 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,84 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + // Load plugin specific language pack + tinymce.PluginManager.requireLangPack('example'); + + tinymce.create('tinymce.plugins.ExamplePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceExample', function() { + ed.windowManager.open({ + file : url + '/dialog.htm', + width : 320 + parseInt(ed.getLang('example.delta_width', 0)), + height : 120 + parseInt(ed.getLang('example.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, // Plugin absolute URL + some_custom_arg : 'custom arg' // Custom argument + }); + }); + + // Register example button + ed.addButton('example', { + title : 'example.desc', + cmd : 'mceExample', + image : url + '/img/example.gif' + }); + + // Add a node change handler, selects the button in the UI when a image is selected + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('example', n.nodeName == 'IMG'); + }); + }, + + /** + * Creates control instances based in the incomming name. This method is normally not + * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons + * but you sometimes need to create more complex controls like listboxes, split buttons etc then this + * method can be used to create those. + * + * @param {String} n Name of the control to create. + * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. + * @return {tinymce.ui.Control} New control instance or null if no control was created. + */ + createControl : function(n, cm) { + return null; + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Example plugin', + author : 'Some author', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', + version : "1.0" + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/example/dialog.htm b/app/plugins/tinymce/webroot/js/plugins/example/dialog.htm new file mode 100644 index 0000000..d6f2856 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/dialog.htm @@ -0,0 +1,22 @@ + + + + {#example_dlg.title} + + + + + +
+

Here is a example dialog.

+

Selected text:

+

Custom arg:

+ +
+ + +
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin.js new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin_src.js new file mode 100644 index 0000000..edc1e77 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/editor_plugin_src.js @@ -0,0 +1,84 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + // Load plugin specific language pack + tinymce.PluginManager.requireLangPack('example'); + + tinymce.create('tinymce.plugins.ExamplePlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceExample', function() { + ed.windowManager.open({ + file : url + '/dialog.htm', + width : 320 + parseInt(ed.getLang('example.delta_width', 0)), + height : 120 + parseInt(ed.getLang('example.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, // Plugin absolute URL + some_custom_arg : 'custom arg' // Custom argument + }); + }); + + // Register example button + ed.addButton('example', { + title : 'example.desc', + cmd : 'mceExample', + image : url + '/img/example.gif' + }); + + // Add a node change handler, selects the button in the UI when a image is selected + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('example', n.nodeName == 'IMG'); + }); + }, + + /** + * Creates control instances based in the incomming name. This method is normally not + * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons + * but you sometimes need to create more complex controls like listboxes, split buttons etc then this + * method can be used to create those. + * + * @param {String} n Name of the control to create. + * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. + * @return {tinymce.ui.Control} New control instance or null if no control was created. + */ + createControl : function(n, cm) { + return null; + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Example plugin', + author : 'Some author', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', + version : "1.0" + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/entries new file mode 100644 index 0000000..b07e79a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/example/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +example.gif +file + + + + +2010-09-04T08:55:28.000000Z +6036655a01df362267183a8b23fead10 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +87 + diff --git a/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/prop-base/example.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/prop-base/example.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/prop-base/example.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/text-base/example.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/example/img/.svn/text-base/example.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..1ab5da4461113d2af579898528246fdbe52ecd00 GIT binary patch literal 87 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*pGzw+SQ`#f{}FJ-?!v#V)e mtsGNfpJeCKSAiOz**>0`XR2{OVa>-G_df0vaY0`XR2{OVa>-G_df0vaY/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c",a);h.head=f.substring(0,a+1);j=f.indexOf("\n'}h.head+=d.getParam("fullpage_default_doctype",'');h.head+="\n\n\n"+d.getParam("fullpage_default_title","Untitled document")+"\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="\n\n";h.foot="\n\n"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..f07bdaf --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,153 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.FullPagePlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullPageProperties', function() { + ed.windowManager.open({ + file : url + '/fullpage.htm', + width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)), + height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + head_html : t.head + }); + }); + + // Register buttons + ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); + + ed.onBeforeSetContent.add(t._setContent, t); + ed.onSetContent.add(t._setBodyAttribs, t); + ed.onGetContent.add(t._getContent, t); + }, + + getInfo : function() { + return { + longname : 'Fullpage', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private plugin internal methods + + _setBodyAttribs : function(ed, o) { + var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i); + + if (attr && attr[1]) { + bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g); + + if (bdattr) { + for(i = 0, len = bdattr.length; i < len; i++) { + kv = bdattr[i].split('='); + k = kv[0].replace(/\s/,''); + v = kv[1]; + + if (v) { + v = v.replace(/^\s+/,'').replace(/\s+$/,''); + t = v.match(/^["'](.*)["']$/); + + if (t) + v = t[1]; + } else + v = k; + + ed.dom.setAttrib(ed.getBody(), 'style', v); + } + } + } + }, + + _createSerializer : function() { + return new tinymce.dom.Serializer({ + dom : this.editor.dom, + apply_source_formatting : true + }); + }, + + _setContent : function(ed, o) { + var t = this, sp, ep, c = o.content, v, st = ''; + + // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate + if (o.format == 'raw' && t.head) + return; + + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + return; + + // Parse out head, body and footer + c = c.replace(/<(\/?)BODY/gi, '<$1body'); + sp = c.indexOf('', sp); + t.head = c.substring(0, sp + 1); + + ep = c.indexOf('\n'; + + t.head += ed.getParam('fullpage_default_doctype', ''); + t.head += '\n\n\n' + ed.getParam('fullpage_default_title', 'Untitled document') + '\n'; + + if (v = ed.getParam('fullpage_default_encoding')) + t.head += '\n'; + + if (v = ed.getParam('fullpage_default_font_family')) + st += 'font-family: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_font_size')) + st += 'font-size: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_text_color')) + st += 'color: ' + v + ';'; + + t.head += '\n\n'; + t.foot = '\n\n'; + } + }, + + _getContent : function(ed, o) { + var t = this; + + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot); + } + }); + + // Register plugin + tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/fullpage.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/fullpage.htm.svn-base new file mode 100644 index 0000000..d8e62fb --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/.svn/text-base/fullpage.htm.svn-base @@ -0,0 +1,571 @@ + + + + {#fullpage_dlg.title} + + + + + + + +
+ + +
+
+
+ {#fullpage_dlg.meta_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
 
 
 
 
  + +
+
+ +
+ {#fullpage_dlg.langprops} + + + + + + + + + + + + + + + + + + + + + + +
+ +
  + +
 
+ +
 
+
+
+ +
+
+ {#fullpage_dlg.appearance_textprops} + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+
+ +
+ {#fullpage_dlg.appearance_bgprops} + + + + + + + + + + +
+ + + + + +
 
+
+ + + + + +
 
+
+
+ +
+ {#fullpage_dlg.appearance_marginprops} + + + + + + + + + + + + + + +
+
+ +
+ {#fullpage_dlg.appearance_linkprops} + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
 
+
+ + + + + +
 
+
  
+
+ +
+ {#fullpage_dlg.appearance_style} + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+ {#fullpage_dlg.head_elements} + +
+
+
+ + +
+
+ + +
+
+
+ +
+
+ +
+ {#fullpage_dlg.meta_element} + + + + + + + + + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.title_element} + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.script_element} + + + +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.style_element} + + + +
+ +
+
+ + + + + + + + + +
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.base_element} + + + + + + + + + + +
+ + +
+ + + +
+ {#fullpage_dlg.comment_element} + + + + +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/entries new file mode 100644 index 0000000..1f8a642 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/fullpage/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +fullpage.css +file + + + + +2010-09-04T08:55:28.000000Z +5aacff00f15c644c2edda317d39d480e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2806 + diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/text-base/fullpage.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/text-base/fullpage.css.svn-base new file mode 100644 index 0000000..1854eca --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/.svn/text-base/fullpage.css.svn-base @@ -0,0 +1,182 @@ +/* Hide the advanced tab */ +#advanced_tab { + display: none; +} + +#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright { + width: 280px; +} + +#doctype, #docencoding { + width: 200px; +} + +#langcode { + width: 30px; +} + +#bgimage { + width: 220px; +} + +#fontface { + width: 240px; +} + +#leftmargin, #rightmargin, #topmargin, #bottommargin { + width: 50px; +} + +.panel_wrapper div.current { + height: 400px; +} + +#stylesheet, #style { + width: 240px; +} + +/* Head list classes */ + +.headlistwrapper { + width: 100%; +} + +.addbutton, .removebutton, .moveupbutton, .movedownbutton { + border-top: 1px solid; + border-left: 1px solid; + border-bottom: 1px solid; + border-right: 1px solid; + border-color: #F0F0EE; + cursor: default; + display: block; + width: 20px; + height: 20px; +} + +#doctypes { + width: 200px; +} + +.addbutton:hover, .removebutton:hover, .moveupbutton:hover, .movedownbutton:hover { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +.addbutton { + background-image: url('../images/add.gif'); + float: left; + margin-right: 3px; +} + +.removebutton { + background-image: url('../images/remove.gif'); + float: left; +} + +.moveupbutton { + background-image: url('../images/move_up.gif'); + float: left; + margin-right: 3px; +} + +.movedownbutton { + background-image: url('../images/move_down.gif'); + float: left; +} + +.selected { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +.toolbar { + width: 100%; +} + +#headlist { + width: 100%; + margin-top: 3px; + font-size: 11px; +} + +#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element { + display: none; +} + +#addmenu { + position: absolute; + border: 1px solid gray; + display: none; + z-index: 100; + background-color: white; +} + +#addmenu a { + display: block; + width: 100%; + line-height: 20px; + text-decoration: none; + background-color: white; +} + +#addmenu a:hover { + background-color: #B6BDD2; + color: black; +} + +#addmenu span { + padding-left: 10px; + padding-right: 10px; +} + +#updateElementPanel { + display: none; +} + +#script_element .panel_wrapper div.current { + height: 108px; +} + +#style_element .panel_wrapper div.current { + height: 108px; +} + +#link_element .panel_wrapper div.current { + height: 140px; +} + +#element_script_value { + width: 100%; + height: 100px; +} + +#element_comment_value { + width: 100%; + height: 120px; +} + +#element_style_value { + width: 100%; + height: 100px; +} + +#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title { + width: 250px; +} + +.updateElementButton { + margin-top: 3px; +} + +/* MSIE specific styles */ + +* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton { + width: 22px; + height: 22px; +} + +textarea { + height: 55px; +} + +.panel_wrapper div.current {height:420px;} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/css/fullpage.css b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/fullpage.css new file mode 100644 index 0000000..1854eca --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/css/fullpage.css @@ -0,0 +1,182 @@ +/* Hide the advanced tab */ +#advanced_tab { + display: none; +} + +#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright { + width: 280px; +} + +#doctype, #docencoding { + width: 200px; +} + +#langcode { + width: 30px; +} + +#bgimage { + width: 220px; +} + +#fontface { + width: 240px; +} + +#leftmargin, #rightmargin, #topmargin, #bottommargin { + width: 50px; +} + +.panel_wrapper div.current { + height: 400px; +} + +#stylesheet, #style { + width: 240px; +} + +/* Head list classes */ + +.headlistwrapper { + width: 100%; +} + +.addbutton, .removebutton, .moveupbutton, .movedownbutton { + border-top: 1px solid; + border-left: 1px solid; + border-bottom: 1px solid; + border-right: 1px solid; + border-color: #F0F0EE; + cursor: default; + display: block; + width: 20px; + height: 20px; +} + +#doctypes { + width: 200px; +} + +.addbutton:hover, .removebutton:hover, .moveupbutton:hover, .movedownbutton:hover { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +.addbutton { + background-image: url('../images/add.gif'); + float: left; + margin-right: 3px; +} + +.removebutton { + background-image: url('../images/remove.gif'); + float: left; +} + +.moveupbutton { + background-image: url('../images/move_up.gif'); + float: left; + margin-right: 3px; +} + +.movedownbutton { + background-image: url('../images/move_down.gif'); + float: left; +} + +.selected { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +.toolbar { + width: 100%; +} + +#headlist { + width: 100%; + margin-top: 3px; + font-size: 11px; +} + +#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element { + display: none; +} + +#addmenu { + position: absolute; + border: 1px solid gray; + display: none; + z-index: 100; + background-color: white; +} + +#addmenu a { + display: block; + width: 100%; + line-height: 20px; + text-decoration: none; + background-color: white; +} + +#addmenu a:hover { + background-color: #B6BDD2; + color: black; +} + +#addmenu span { + padding-left: 10px; + padding-right: 10px; +} + +#updateElementPanel { + display: none; +} + +#script_element .panel_wrapper div.current { + height: 108px; +} + +#style_element .panel_wrapper div.current { + height: 108px; +} + +#link_element .panel_wrapper div.current { + height: 140px; +} + +#element_script_value { + width: 100%; + height: 100px; +} + +#element_comment_value { + width: 100%; + height: 120px; +} + +#element_style_value { + width: 100%; + height: 100px; +} + +#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title { + width: 250px; +} + +.updateElementButton { + margin-top: 3px; +} + +/* MSIE specific styles */ + +* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton { + width: 22px; + height: 22px; +} + +textarea { + height: 55px; +} + +.panel_wrapper div.current {height:420px;} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin.js new file mode 100644 index 0000000..aeaa669 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceFullPageProperties",function(){a.windowManager.open({file:b+"/fullpage.htm",width:430+parseInt(a.getLang("fullpage.delta_width",0)),height:495+parseInt(a.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:b,head_html:c.head})});a.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});a.onBeforeSetContent.add(c._setContent,c);a.onSetContent.add(c._setBodyAttribs,c);a.onGetContent.add(c._getContent,c)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_setBodyAttribs:function(d,a){var l,c,e,g,b,h,j,f=this.head.match(/body(.*?)>/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c",a);h.head=f.substring(0,a+1);j=f.indexOf("\n'}h.head+=d.getParam("fullpage_default_doctype",'');h.head+="\n\n\n"+d.getParam("fullpage_default_title","Untitled document")+"\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="\n\n";h.foot="\n\n"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin_src.js new file mode 100644 index 0000000..f07bdaf --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/editor_plugin_src.js @@ -0,0 +1,153 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.FullPagePlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullPageProperties', function() { + ed.windowManager.open({ + file : url + '/fullpage.htm', + width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)), + height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + head_html : t.head + }); + }); + + // Register buttons + ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); + + ed.onBeforeSetContent.add(t._setContent, t); + ed.onSetContent.add(t._setBodyAttribs, t); + ed.onGetContent.add(t._getContent, t); + }, + + getInfo : function() { + return { + longname : 'Fullpage', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private plugin internal methods + + _setBodyAttribs : function(ed, o) { + var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i); + + if (attr && attr[1]) { + bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g); + + if (bdattr) { + for(i = 0, len = bdattr.length; i < len; i++) { + kv = bdattr[i].split('='); + k = kv[0].replace(/\s/,''); + v = kv[1]; + + if (v) { + v = v.replace(/^\s+/,'').replace(/\s+$/,''); + t = v.match(/^["'](.*)["']$/); + + if (t) + v = t[1]; + } else + v = k; + + ed.dom.setAttrib(ed.getBody(), 'style', v); + } + } + } + }, + + _createSerializer : function() { + return new tinymce.dom.Serializer({ + dom : this.editor.dom, + apply_source_formatting : true + }); + }, + + _setContent : function(ed, o) { + var t = this, sp, ep, c = o.content, v, st = ''; + + // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate + if (o.format == 'raw' && t.head) + return; + + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + return; + + // Parse out head, body and footer + c = c.replace(/<(\/?)BODY/gi, '<$1body'); + sp = c.indexOf('', sp); + t.head = c.substring(0, sp + 1); + + ep = c.indexOf('\n'; + + t.head += ed.getParam('fullpage_default_doctype', ''); + t.head += '\n\n\n' + ed.getParam('fullpage_default_title', 'Untitled document') + '\n'; + + if (v = ed.getParam('fullpage_default_encoding')) + t.head += '\n'; + + if (v = ed.getParam('fullpage_default_font_family')) + st += 'font-family: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_font_size')) + st += 'font-size: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_text_color')) + st += 'color: ' + v + ';'; + + t.head += '\n\n'; + t.foot = '\n\n'; + } + }, + + _getContent : function(ed, o) { + var t = this; + + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot); + } + }); + + // Register plugin + tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/fullpage.htm b/app/plugins/tinymce/webroot/js/plugins/fullpage/fullpage.htm new file mode 100644 index 0000000..d8e62fb --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/fullpage.htm @@ -0,0 +1,571 @@ + + + + {#fullpage_dlg.title} + + + + + + + +
+ + +
+
+
+ {#fullpage_dlg.meta_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
 
 
 
 
  + +
+
+ +
+ {#fullpage_dlg.langprops} + + + + + + + + + + + + + + + + + + + + + + +
+ +
  + +
 
+ +
 
+
+
+ +
+
+ {#fullpage_dlg.appearance_textprops} + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+
+ +
+ {#fullpage_dlg.appearance_bgprops} + + + + + + + + + + +
+ + + + + +
 
+
+ + + + + +
 
+
+
+ +
+ {#fullpage_dlg.appearance_marginprops} + + + + + + + + + + + + + + +
+
+ +
+ {#fullpage_dlg.appearance_linkprops} + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
 
+
+ + + + + +
 
+
  
+
+ +
+ {#fullpage_dlg.appearance_style} + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+ {#fullpage_dlg.head_elements} + +
+
+
+ + +
+
+ + +
+
+
+ +
+
+ +
+ {#fullpage_dlg.meta_element} + + + + + + + + + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.title_element} + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.script_element} + + + +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.style_element} + + + +
+ +
+
+ + + + + + + + + +
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.base_element} + + + + + + + + + + +
+ + +
+ + + +
+ {#fullpage_dlg.comment_element} + + + + +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/entries new file mode 100644 index 0000000..d36e6c8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/fullpage/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +fullpage.js +file + + + + +2010-09-04T08:55:28.000000Z +7ed13e7cdcd38a72af4a53df2d5d1f26 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +15371 + diff --git a/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/text-base/fullpage.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/text-base/fullpage.js.svn-base new file mode 100644 index 0000000..7a80fcd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullpage/js/.svn/text-base/fullpage.js.svn-base @@ -0,0 +1,471 @@ +/** + * fullpage.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +tinyMCEPopup.requireLangPack(); + +var doc; + +var defaultDocTypes = + 'XHTML 1.0 Transitional=,' + + 'XHTML 1.0 Frameset=,' + + 'XHTML 1.0 Strict=,' + + 'XHTML 1.1=,' + + 'HTML 4.01 Transitional=,' + + 'HTML 4.01 Strict=,' + + 'HTML 4.01 Frameset='; + +var defaultEncodings = + 'Western european (iso-8859-1)=iso-8859-1,' + + 'Central European (iso-8859-2)=iso-8859-2,' + + 'Unicode (UTF-8)=utf-8,' + + 'Chinese traditional (Big5)=big5,' + + 'Cyrillic (iso-8859-5)=iso-8859-5,' + + 'Japanese (iso-2022-jp)=iso-2022-jp,' + + 'Greek (iso-8859-7)=iso-8859-7,' + + 'Korean (iso-2022-kr)=iso-2022-kr,' + + 'ASCII (us-ascii)=us-ascii'; + +var defaultMediaTypes = + 'all=all,' + + 'screen=screen,' + + 'print=print,' + + 'tty=tty,' + + 'tv=tv,' + + 'projection=projection,' + + 'handheld=handheld,' + + 'braille=braille,' + + 'aural=aural'; + +var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; +var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px'; + +function init() { + var f = document.forms['fullpage'], el = f.elements, e, i, p, doctypes, encodings, mediaTypes, fonts, ed = tinyMCEPopup.editor, dom = tinyMCEPopup.dom, style; + + // Setup doctype select box + doctypes = ed.getParam("fullpage_doctypes", defaultDocTypes).split(','); + for (i=0; i 1) + addSelectValue(f, 'doctypes', p[0], p[1]); + } + + // Setup fonts select box + fonts = ed.getParam("fullpage_fonts", defaultFontNames).split(';'); + for (i=0; i 1) + addSelectValue(f, 'fontface', p[0], p[1]); + } + + // Setup fontsize select box + fonts = ed.getParam("fullpage_fontsizes", defaultFontSizes).split(','); + for (i=0; i 1) { + addSelectValue(f, 'element_style_media', p[0], p[1]); + addSelectValue(f, 'element_link_media', p[0], p[1]); + } + } + + // Setup encodings select box + encodings = ed.getParam("fullpage_encodings", defaultEncodings).split(','); + for (i=0; i 1) { + addSelectValue(f, 'docencoding', p[0], p[1]); + addSelectValue(f, 'element_script_charset', p[0], p[1]); + addSelectValue(f, 'element_link_charset', p[0], p[1]); + } + } + + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); + //document.getElementById('hover_color_pickcontainer').innerHTML = getColorPickerHTML('hover_color_pick','hover_color'); + document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color'); + document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color'); + document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor'); + document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage'); + document.getElementById('link_href_pickcontainer').innerHTML = getBrowserHTML('link_href_browser','element_link_href','file','fullpage'); + document.getElementById('script_src_pickcontainer').innerHTML = getBrowserHTML('script_src_browser','element_script_src','file','fullpage'); + document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage'); + + // Resize some elements + if (isVisible('stylesheetbrowser')) + document.getElementById('stylesheet').style.width = '220px'; + + if (isVisible('link_href_browser')) + document.getElementById('element_link_href').style.width = '230px'; + + if (isVisible('bgimage_browser')) + document.getElementById('bgimage').style.width = '210px'; + + // Add iframe + dom.add(document.body, 'iframe', {id : 'documentIframe', src : 'javascript:""', style : {display : 'none'}}); + doc = dom.get('documentIframe').contentWindow.document; + h = tinyMCEPopup.getWindowArg('head_html'); + + // Preprocess the HTML disable scripts and urls + h = h.replace(/ + + + +
+ +
+ + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin.js new file mode 100644 index 0000000..4437bd2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(c,d){var e=this,f={},b;e.editor=c;c.addCommand("mceFullScreen",function(){var h,i=a.doc.documentElement;if(c.getParam("fullscreen_is_enabled")){if(c.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",e.resizeFunc);tinyMCE.get(c.getParam("fullscreen_editor_id")).setContent(c.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(c);a.remove("mce_fullscreen_container");i.style.overflow=c.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",c.getParam("fullscreen_overflow"));a.win.scrollTo(c.getParam("fullscreen_scrollx"),c.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(c.getParam("fullscreen_new_window")){h=a.win.open(d+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{h.resizeTo(screen.availWidth,screen.availHeight)}catch(g){}}else{tinyMCE.oldSettings=tinyMCE.settings;f.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";f.fullscreen_html_overflow=a.getStyle(i,"overflow",1);b=a.getViewPort();f.fullscreen_scrollx=b.x;f.fullscreen_scrolly=b.y;if(tinymce.isOpera&&f.fullscreen_overflow=="visible"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&f.fullscreen_overflow=="scroll"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&(f.fullscreen_html_overflow=="visible"||f.fullscreen_html_overflow=="scroll")){f.fullscreen_html_overflow="auto"}if(f.fullscreen_overflow=="0px"){f.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");i.style.overflow="hidden";b=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){b.h-=1}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+(tinymce.isIE6||(tinymce.isIE&&!a.boxModel)?"absolute":"fixed")+";top:0;left:0;width:"+b.w+"px;height:"+b.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(c.settings,function(j,k){f[k]=j});f.id="mce_fullscreen";f.width=n.clientWidth;f.height=n.clientHeight-15;f.fullscreen_is_enabled=true;f.fullscreen_editor_id=c.id;f.theme_advanced_resizing=false;f.save_onsavecallback=function(){c.setContent(tinyMCE.get(f.id).getContent({format:"raw"}),{format:"raw"});c.execCommand("mceSave")};tinymce.each(c.getParam("fullscreen_settings"),function(l,j){f[j]=l});if(f.theme_advanced_toolbar_location==="external"){f.theme_advanced_toolbar_location="top"}e.fullscreenEditor=new tinymce.Editor("mce_fullscreen",f);e.fullscreenEditor.onInit.add(function(){e.fullscreenEditor.setContent(c.getContent());e.fullscreenEditor.focus()});e.fullscreenEditor.render();e.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");e.fullscreenElement.update();e.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var m=tinymce.DOM.getViewPort(),k=e.fullscreenEditor,j,l;j=k.dom.getSize(k.getContainer().firstChild);l=k.dom.getSize(k.getContainer().getElementsByTagName("iframe")[0]);k.theme.resizeTo(m.w-j.w+l.w,m.h-j.h+l.h)})}});c.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});c.onNodeChange.add(function(h,g){g.setActive("fullscreen",h.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin_src.js new file mode 100644 index 0000000..950c036 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullscreen/editor_plugin_src.js @@ -0,0 +1,151 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.FullScreenPlugin', { + init : function(ed, url) { + var t = this, s = {}, vp; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullScreen', function() { + var win, de = DOM.doc.documentElement; + + if (ed.getParam('fullscreen_is_enabled')) { + if (ed.getParam('fullscreen_new_window')) + closeFullscreen(); // Call to close in new window + else { + DOM.win.setTimeout(function() { + tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); + tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format : 'raw'}), {format : 'raw'}); + tinyMCE.remove(ed); + DOM.remove('mce_fullscreen_container'); + de.style.overflow = ed.getParam('fullscreen_html_overflow'); + DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); + DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); + tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + }, 10); + } + + return; + } + + if (ed.getParam('fullscreen_new_window')) { + win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); + try { + win.resizeTo(screen.availWidth, screen.availHeight); + } catch (e) { + // Ignore + } + } else { + tinyMCE.oldSettings = tinyMCE.settings; // Store old settings + s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; + s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); + vp = DOM.getViewPort(); + s.fullscreen_scrollx = vp.x; + s.fullscreen_scrolly = vp.y; + + // Fixes an Opera bug where the scrollbars doesn't reappear + if (tinymce.isOpera && s.fullscreen_overflow == 'visible') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where horizontal scrollbars would appear + if (tinymce.isIE && s.fullscreen_overflow == 'scroll') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where the scrollbars doesn't reappear + if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) + s.fullscreen_html_overflow = 'auto'; + + if (s.fullscreen_overflow == '0px') + s.fullscreen_overflow = ''; + + DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); + de.style.overflow = 'hidden'; //Fix for IE6/7 + vp = DOM.getViewPort(); + DOM.win.scrollTo(0, 0); + + if (tinymce.isIE) + vp.h -= 1; + + n = DOM.add(DOM.doc.body, 'div', {id : 'mce_fullscreen_container', style : 'position:' + (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel) ? 'absolute' : 'fixed') + ';top:0;left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'}); + DOM.add(n, 'div', {id : 'mce_fullscreen'}); + + tinymce.each(ed.settings, function(v, n) { + s[n] = v; + }); + + s.id = 'mce_fullscreen'; + s.width = n.clientWidth; + s.height = n.clientHeight - 15; + s.fullscreen_is_enabled = true; + s.fullscreen_editor_id = ed.id; + s.theme_advanced_resizing = false; + s.save_onsavecallback = function() { + ed.setContent(tinyMCE.get(s.id).getContent({format : 'raw'}), {format : 'raw'}); + ed.execCommand('mceSave'); + }; + + tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) { + s[k] = v; + }); + + if (s.theme_advanced_toolbar_location === 'external') + s.theme_advanced_toolbar_location = 'top'; + + t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); + t.fullscreenEditor.onInit.add(function() { + t.fullscreenEditor.setContent(ed.getContent()); + t.fullscreenEditor.focus(); + }); + + t.fullscreenEditor.render(); + + t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container'); + t.fullscreenElement.update(); + //document.body.overflow = 'hidden'; + + t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() { + var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize; + + // Get outer/inner size to get a delta size that can be used to calc the new iframe size + outerSize = fed.dom.getSize(fed.getContainer().firstChild); + innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]); + + fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h); + }); + } + }); + + // Register buttons + ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'}); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); + }); + }, + + getInfo : function() { + return { + longname : 'Fullscreen', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/fullscreen/fullscreen.htm b/app/plugins/tinymce/webroot/js/plugins/fullscreen/fullscreen.htm new file mode 100644 index 0000000..2bf6a37 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/fullscreen/fullscreen.htm @@ -0,0 +1,109 @@ + + + + + + + + +
+ +
+ + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/entries new file mode 100644 index 0000000..20cf634 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/iespell +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +22526393cacb6447a0e3bfff2fb47773 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +909 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +6197421bd9a75291fa89a245fdca5f47 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1431 + diff --git a/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..61edf1e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/iespell/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,54 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.IESpell', { + init : function(ed, url) { + var t = this, sp; + + if (!tinymce.isIE) + return; + + t.editor = ed; + + // Register commands + ed.addCommand('mceIESpell', function() { + try { + sp = new ActiveXObject("ieSpell.ieSpellExtension"); + sp.CheckDocumentNode(ed.getDoc().documentElement); + } catch (e) { + if (e.number == -2146827859) { + ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) { + if (s) + window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); + }); + } else + ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number); + } + }); + + // Register buttons + ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'}); + }, + + getInfo : function() { + return { + longname : 'IESpell (IE Only)', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin.js new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin_src.js new file mode 100644 index 0000000..61edf1e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/iespell/editor_plugin_src.js @@ -0,0 +1,54 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.IESpell', { + init : function(ed, url) { + var t = this, sp; + + if (!tinymce.isIE) + return; + + t.editor = ed; + + // Register commands + ed.addCommand('mceIESpell', function() { + try { + sp = new ActiveXObject("ieSpell.ieSpellExtension"); + sp.CheckDocumentNode(ed.getDoc().documentElement); + } catch (e) { + if (e.number == -2146827859) { + ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) { + if (s) + window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); + }); + } else + ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number); + } + }); + + // Register buttons + ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'}); + }, + + getInfo : function() { + return { + longname : 'IESpell (IE Only)', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/entries new file mode 100644 index 0000000..1898a5c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/entries @@ -0,0 +1,133 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/inlinepopups +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +bfaaa63c2867a7c1aa80783e423a9b87 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +10677 + +template.htm +file + + + + +2010-09-04T08:55:28.000000Z +c01f15cd357d8dba4610c3eae6321930 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +12491 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +2a889681ca366871a41e7f29330e4330 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +16819 + +skins +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..07ea477 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","
"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..10ce4d9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,635 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is; + + tinymce.create('tinymce.plugins.InlinePopups', { + init : function(ed, url) { + // Replace window manager + ed.onBeforeRenderUI.add(function() { + ed.windowManager = new tinymce.InlineWindowManager(ed); + DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css"); + }); + }, + + getInfo : function() { + return { + longname : 'InlinePopups', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', { + InlineWindowManager : function(ed) { + var t = this; + + t.parent(ed); + t.zIndex = 300000; + t.count = 0; + t.windows = {}; + }, + + open : function(f, p) { + var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + // Only store selection if the type is a normal window + if (!f.type) + t.bookmark = ed.selection.getBookmark(1); + + id = DOM.uniqueId(); + vp = DOM.getViewPort(); + f.width = parseInt(f.width || 320); + f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); + f.min_width = parseInt(f.min_width || 150); + f.min_height = parseInt(f.min_height || 100); + f.max_width = parseInt(f.max_width || 2000); + f.max_height = parseInt(f.max_height || 2000); + f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0))); + f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0))); + f.movable = f.resizable = true; + p.mce_width = f.width; + p.mce_height = f.height; + p.mce_inline = true; + p.mce_window_id = id; + p.mce_auto_focus = f.auto_focus; + + // Transpose +// po = DOM.getPos(ed.getContainer()); +// f.left -= po.x; +// f.top -= po.y; + + t.features = f; + t.params = p; + t.onOpen.dispatch(t, f, p); + + if (f.type) { + opt += ' mceModal'; + + if (f.type) + opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1); + + f.resizable = false; + } + + if (f.statusbar) + opt += ' mceStatusbar'; + + if (f.resizable) + opt += ' mceResizable'; + + if (f.minimizable) + opt += ' mceMinimizable'; + + if (f.maximizable) + opt += ' mceMaximizable'; + + if (f.movable) + opt += ' mceMovable'; + + // Create DOM objects + t._addAll(DOM.doc.body, + ['div', {id : id, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', style : 'width:100px;height:100px'}, + ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, + ['div', {id : id + '_top', 'class' : 'mceTop'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_title'}, f.title || ''] + ], + + ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, + ['div', {id : id + '_left', 'class' : 'mceLeft'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight'}] + ], + + ['div', {id : id + '_bottom', 'class' : 'mceBottom'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_status'}, 'Content'] + ], + + ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}], + ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}] + ] + ] + ); + + DOM.setStyles(id, {top : -10000, left : -10000}); + + // Fix gecko rendering bug, where the editors iframe messed with window contents + if (tinymce.isGecko) + DOM.setStyle(id, 'overflow', 'auto'); + + // Measure borders + if (!f.type) { + dw += DOM.get(id + '_left').clientWidth; + dw += DOM.get(id + '_right').clientWidth; + dh += DOM.get(id + '_top').clientHeight; + dh += DOM.get(id + '_bottom').clientHeight; + } + + // Resize window + DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh}); + + u = f.url || f.file; + if (u) { + if (tinymce.relaxedDomain) + u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; + + u = tinymce._addVer(u); + } + + if (!f.type) { + DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'}); + DOM.setStyles(id + '_ifr', {width : f.width, height : f.height}); + DOM.setAttrib(id + '_ifr', 'src', u); + } else { + DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok'); + + if (f.type == 'confirm') + DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel'); + + DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); + DOM.setHTML(id + '_content', f.content.replace('\n', '
')); + } + + // Register events + mdf = Event.add(id, 'mousedown', function(e) { + var n = e.target, w, vp; + + w = t.windows[id]; + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + if (n.className == 'mceMax') { + w.oldPos = w.element.getXY(); + w.oldSize = w.element.getSize(); + + vp = DOM.getViewPort(); + + // Reduce viewport size to avoid scrollbars + vp.w -= 2; + vp.h -= 2; + + w.element.moveTo(vp.x, vp.y); + w.element.resizeTo(vp.w, vp.h); + DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); + DOM.addClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMed') { + // Reset to old size + w.element.moveTo(w.oldPos.x, w.oldPos.y); + w.element.resizeTo(w.oldSize.w, w.oldSize.h); + w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); + + DOM.removeClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMove') + return t._startDrag(id, e, n.className); + else if (DOM.hasClass(n, 'mceResize')) + return t._startDrag(id, e, n.className.substring(13)); + } + }); + + clf = Event.add(id, 'click', function(e) { + var n = e.target; + + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + switch (n.className) { + case 'mceClose': + t.close(null, id); + return Event.cancel(e); + + case 'mceButton mceOk': + case 'mceButton mceCancel': + f.button_func(n.className == 'mceButton mceOk'); + return Event.cancel(e); + } + } + }); + + // Add window + w = t.windows[id] = { + id : id, + mousedown_func : mdf, + click_func : clf, + element : new Element(id, {blocker : 1, container : ed.getContainer()}), + iframeElement : new Element(id + '_ifr'), + features : f, + deltaWidth : dw, + deltaHeight : dh + }; + + w.iframeElement.on('focus', function() { + t.focus(id); + }); + + // Setup blocker + if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') { + DOM.add(DOM.doc.body, 'div', { + id : 'mceModalBlocker', + 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker', + style : {zIndex : t.zIndex - 1} + }); + + DOM.show('mceModalBlocker'); // Reduces flicker in IE + } else + DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); + + if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) + DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); + + t.focus(id); + t._fixIELayout(id, 1); + + // Focus ok button + if (DOM.get(id + '_ok')) + DOM.get(id + '_ok').focus(); + + t.count++; + + return w; + }, + + focus : function(id) { + var t = this, w; + + if (w = t.windows[id]) { + w.zIndex = this.zIndex++; + w.element.setStyle('zIndex', w.zIndex); + w.element.update(); + + id = id + '_wrapper'; + DOM.removeClass(t.lastId, 'mceFocus'); + DOM.addClass(id, 'mceFocus'); + t.lastId = id; + } + }, + + _addAll : function(te, ne) { + var i, n, t = this, dom = tinymce.DOM; + + if (is(ne, 'string')) + te.appendChild(dom.doc.createTextNode(ne)); + else if (ne.length) { + te = te.appendChild(dom.create(ne[0], ne[1])); + + for (i=2; i ix) { + fw = w; + ix = w.zIndex; + } + }); + + if (fw) + t.focus(fw.id); + } + }, + + setTitle : function(w, ti) { + var e; + + w = this._findId(w); + + if (e = DOM.get(w + '_title')) + e.innerHTML = DOM.encode(ti); + }, + + alert : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'alert', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + confirm : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'confirm', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + // Internal functions + + _findId : function(w) { + var t = this; + + if (typeof(w) == 'string') + return w; + + each(t.windows, function(wo) { + var ifr = DOM.get(wo.id + '_ifr'); + + if (ifr && w == ifr.contentWindow) { + w = wo.id; + return false; + } + }); + + return w; + }, + + _fixIELayout : function(id, s) { + var w, img; + + if (!tinymce.isIE6) + return; + + // Fixes the bug where hover flickers and does odd things in IE6 + each(['n','s','w','e','nw','ne','sw','se'], function(v) { + var e = DOM.get(id + '_resize_' + v); + + DOM.setStyles(e, { + width : s ? e.clientWidth : '', + height : s ? e.clientHeight : '', + cursor : DOM.getStyle(e, 'cursor', 1) + }); + + DOM.setStyle(id + "_bottom", 'bottom', '-1px'); + + e = 0; + }); + + // Fixes graphics glitch + if (w = this.windows[id]) { + // Fixes rendering bug after resize + w.element.hide(); + w.element.show(); + + // Forced a repaint of the window + //DOM.get(id).style.filter = ''; + + // IE has a bug where images used in CSS won't get loaded + // sometimes when the cache in the browser is disabled + // This fix tries to solve it by loading the images using the image object + each(DOM.select('div,a', id), function(e, i) { + if (e.currentStyle.backgroundImage != 'none') { + img = new Image(); + img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1'); + } + }); + + DOM.get(id).style.filter = ''; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups); +})(); + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/template.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/template.htm.svn-base new file mode 100644 index 0000000..c98fe41 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/.svn/text-base/template.htm.svn-base @@ -0,0 +1,387 @@ + + + +Template for dialogs + + + + +
+
+
+
+
+
+
+ Blured +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Focused +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Statusbar +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Statusbar, Resizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Resizable, Maximizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Blurred, Maximizable, Statusbar, Resizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Maximized, Maximizable, Minimizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Blured +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Alert +
+ +
+
+ + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + +
+
+
+ +
+
+
+
+
+ + + Ok + +
+
+ +
+
+
+
+
+
+ Confirm +
+ +
+
+ + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + +
+
+
+ +
+
+
+
+
+ + + Ok + Cancel + +
+
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin.js new file mode 100644 index 0000000..07ea477 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin.js @@ -0,0 +1 @@ +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","
"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 0000000..10ce4d9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/editor_plugin_src.js @@ -0,0 +1,635 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is; + + tinymce.create('tinymce.plugins.InlinePopups', { + init : function(ed, url) { + // Replace window manager + ed.onBeforeRenderUI.add(function() { + ed.windowManager = new tinymce.InlineWindowManager(ed); + DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css"); + }); + }, + + getInfo : function() { + return { + longname : 'InlinePopups', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', { + InlineWindowManager : function(ed) { + var t = this; + + t.parent(ed); + t.zIndex = 300000; + t.count = 0; + t.windows = {}; + }, + + open : function(f, p) { + var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + // Only store selection if the type is a normal window + if (!f.type) + t.bookmark = ed.selection.getBookmark(1); + + id = DOM.uniqueId(); + vp = DOM.getViewPort(); + f.width = parseInt(f.width || 320); + f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); + f.min_width = parseInt(f.min_width || 150); + f.min_height = parseInt(f.min_height || 100); + f.max_width = parseInt(f.max_width || 2000); + f.max_height = parseInt(f.max_height || 2000); + f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0))); + f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0))); + f.movable = f.resizable = true; + p.mce_width = f.width; + p.mce_height = f.height; + p.mce_inline = true; + p.mce_window_id = id; + p.mce_auto_focus = f.auto_focus; + + // Transpose +// po = DOM.getPos(ed.getContainer()); +// f.left -= po.x; +// f.top -= po.y; + + t.features = f; + t.params = p; + t.onOpen.dispatch(t, f, p); + + if (f.type) { + opt += ' mceModal'; + + if (f.type) + opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1); + + f.resizable = false; + } + + if (f.statusbar) + opt += ' mceStatusbar'; + + if (f.resizable) + opt += ' mceResizable'; + + if (f.minimizable) + opt += ' mceMinimizable'; + + if (f.maximizable) + opt += ' mceMaximizable'; + + if (f.movable) + opt += ' mceMovable'; + + // Create DOM objects + t._addAll(DOM.doc.body, + ['div', {id : id, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', style : 'width:100px;height:100px'}, + ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, + ['div', {id : id + '_top', 'class' : 'mceTop'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_title'}, f.title || ''] + ], + + ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, + ['div', {id : id + '_left', 'class' : 'mceLeft'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight'}] + ], + + ['div', {id : id + '_bottom', 'class' : 'mceBottom'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_status'}, 'Content'] + ], + + ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}], + ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}] + ] + ] + ); + + DOM.setStyles(id, {top : -10000, left : -10000}); + + // Fix gecko rendering bug, where the editors iframe messed with window contents + if (tinymce.isGecko) + DOM.setStyle(id, 'overflow', 'auto'); + + // Measure borders + if (!f.type) { + dw += DOM.get(id + '_left').clientWidth; + dw += DOM.get(id + '_right').clientWidth; + dh += DOM.get(id + '_top').clientHeight; + dh += DOM.get(id + '_bottom').clientHeight; + } + + // Resize window + DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh}); + + u = f.url || f.file; + if (u) { + if (tinymce.relaxedDomain) + u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; + + u = tinymce._addVer(u); + } + + if (!f.type) { + DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'}); + DOM.setStyles(id + '_ifr', {width : f.width, height : f.height}); + DOM.setAttrib(id + '_ifr', 'src', u); + } else { + DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok'); + + if (f.type == 'confirm') + DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel'); + + DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); + DOM.setHTML(id + '_content', f.content.replace('\n', '
')); + } + + // Register events + mdf = Event.add(id, 'mousedown', function(e) { + var n = e.target, w, vp; + + w = t.windows[id]; + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + if (n.className == 'mceMax') { + w.oldPos = w.element.getXY(); + w.oldSize = w.element.getSize(); + + vp = DOM.getViewPort(); + + // Reduce viewport size to avoid scrollbars + vp.w -= 2; + vp.h -= 2; + + w.element.moveTo(vp.x, vp.y); + w.element.resizeTo(vp.w, vp.h); + DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); + DOM.addClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMed') { + // Reset to old size + w.element.moveTo(w.oldPos.x, w.oldPos.y); + w.element.resizeTo(w.oldSize.w, w.oldSize.h); + w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); + + DOM.removeClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMove') + return t._startDrag(id, e, n.className); + else if (DOM.hasClass(n, 'mceResize')) + return t._startDrag(id, e, n.className.substring(13)); + } + }); + + clf = Event.add(id, 'click', function(e) { + var n = e.target; + + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + switch (n.className) { + case 'mceClose': + t.close(null, id); + return Event.cancel(e); + + case 'mceButton mceOk': + case 'mceButton mceCancel': + f.button_func(n.className == 'mceButton mceOk'); + return Event.cancel(e); + } + } + }); + + // Add window + w = t.windows[id] = { + id : id, + mousedown_func : mdf, + click_func : clf, + element : new Element(id, {blocker : 1, container : ed.getContainer()}), + iframeElement : new Element(id + '_ifr'), + features : f, + deltaWidth : dw, + deltaHeight : dh + }; + + w.iframeElement.on('focus', function() { + t.focus(id); + }); + + // Setup blocker + if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') { + DOM.add(DOM.doc.body, 'div', { + id : 'mceModalBlocker', + 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker', + style : {zIndex : t.zIndex - 1} + }); + + DOM.show('mceModalBlocker'); // Reduces flicker in IE + } else + DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); + + if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) + DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); + + t.focus(id); + t._fixIELayout(id, 1); + + // Focus ok button + if (DOM.get(id + '_ok')) + DOM.get(id + '_ok').focus(); + + t.count++; + + return w; + }, + + focus : function(id) { + var t = this, w; + + if (w = t.windows[id]) { + w.zIndex = this.zIndex++; + w.element.setStyle('zIndex', w.zIndex); + w.element.update(); + + id = id + '_wrapper'; + DOM.removeClass(t.lastId, 'mceFocus'); + DOM.addClass(id, 'mceFocus'); + t.lastId = id; + } + }, + + _addAll : function(te, ne) { + var i, n, t = this, dom = tinymce.DOM; + + if (is(ne, 'string')) + te.appendChild(dom.doc.createTextNode(ne)); + else if (ne.length) { + te = te.appendChild(dom.create(ne[0], ne[1])); + + for (i=2; i ix) { + fw = w; + ix = w.zIndex; + } + }); + + if (fw) + t.focus(fw.id); + } + }, + + setTitle : function(w, ti) { + var e; + + w = this._findId(w); + + if (e = DOM.get(w + '_title')) + e.innerHTML = DOM.encode(ti); + }, + + alert : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'alert', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + confirm : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'confirm', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + // Internal functions + + _findId : function(w) { + var t = this; + + if (typeof(w) == 'string') + return w; + + each(t.windows, function(wo) { + var ifr = DOM.get(wo.id + '_ifr'); + + if (ifr && w == ifr.contentWindow) { + w = wo.id; + return false; + } + }); + + return w; + }, + + _fixIELayout : function(id, s) { + var w, img; + + if (!tinymce.isIE6) + return; + + // Fixes the bug where hover flickers and does odd things in IE6 + each(['n','s','w','e','nw','ne','sw','se'], function(v) { + var e = DOM.get(id + '_resize_' + v); + + DOM.setStyles(e, { + width : s ? e.clientWidth : '', + height : s ? e.clientHeight : '', + cursor : DOM.getStyle(e, 'cursor', 1) + }); + + DOM.setStyle(id + "_bottom", 'bottom', '-1px'); + + e = 0; + }); + + // Fixes graphics glitch + if (w = this.windows[id]) { + // Fixes rendering bug after resize + w.element.hide(); + w.element.show(); + + // Forced a repaint of the window + //DOM.get(id).style.filter = ''; + + // IE has a bug where images used in CSS won't get loaded + // sometimes when the cache in the browser is disabled + // This fix tries to solve it by loading the images using the image object + each(DOM.select('div,a', id), function(e, i) { + if (e.currentStyle.backgroundImage != 'none') { + img = new Image(); + img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1'); + } + }); + + DOM.get(id).style.filter = ''; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups); +})(); + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/.svn/entries new file mode 100644 index 0000000..5f6b8ba --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +clearlooks2 +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/entries new file mode 100644 index 0000000..966dcaf --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/entries @@ -0,0 +1,65 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +img +dir + +window.css +file + + + + +2010-09-04T08:55:28.000000Z +5e33280ecbcbc97d23f44ba1d23b578a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6625 + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/text-base/window.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/text-base/window.css.svn-base new file mode 100644 index 0000000..5e6fd7d --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/.svn/text-base/window.css.svn-base @@ -0,0 +1,90 @@ +/* Clearlooks 2 */ + +/* Reset */ +.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block} + +/* General */ +.clearlooks2 {position:absolute; direction:ltr} +.clearlooks2 .mceWrapper {position:static} +.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%} +.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)} +.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none} + +/* Top */ +.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px} +.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)} +.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)} +.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0} +.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold} +.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0} +.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px} +.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0} +.clearlooks2 .mceFocus .mceTop span {color:#FFF} + +/* Middle */ +.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0} +.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)} +.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0} +.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF} +.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)} + +/* Bottom */ +.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px} +.clearlooks2 .mceBottom {left:0; bottom:0; width:100%} +.clearlooks2 .mceBottom div {top:0} +.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px} +.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px} +.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0} +.clearlooks2 .mceBottom span {display:none} +.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px} +.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0} +.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px} +.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0} +.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px} + +/* Actions */ +.clearlooks2 a {width:29px; height:16px; top:3px;} +.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0} +.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0} +.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0} +.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0} +.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px} +.clearlooks2 .mceMovable .mceMove {display:block} +.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px} +.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px} +.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px} +.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px} +.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px} +.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px} + +/* Resize */ +.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px} +.clearlooks2 .mceResizable .mceResize {display:block} +.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none} +.clearlooks2 .mceMinimizable .mceMin {display:block} +.clearlooks2 .mceMaximizable .mceMax {display:block} +.clearlooks2 .mceMaximized .mceMed {display:block} +.clearlooks2 .mceMaximized .mceMax {display:none} +.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize} +.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize} +.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize} +.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;} +.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize} +.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize} +.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize} +.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize} + +/* Alert/Confirm */ +.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0} +.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px} +.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal} +.clearlooks2 a:hover {font-weight:bold;} +.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5} +.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px} +.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)} +.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px} +.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto} +.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/entries new file mode 100644 index 0000000..d5a8b26 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +button.gif +file + + + + +2010-09-04T08:55:28.000000Z +9e911a2c3cb4720d44844ef2d1832a51 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +280 + +corners.gif +file + + + + +2010-09-04T08:55:28.000000Z +2e89a17a473f0e488f3e789ce998f064 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +911 + +confirm.gif +file + + + + +2010-09-04T08:55:28.000000Z +44f1d55b14fbc66b98f3899d90611c3c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +915 + +buttons.gif +file + + + + +2010-09-04T08:55:28.000000Z +1743ac9f7f2267a6edafefc536a2265d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1195 + +alert.gif +file + + + + +2010-09-04T08:55:28.000000Z +56646a5e811547c8bc3d1b9790496b89 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +818 + +horizontal.gif +file + + + + +2010-09-04T08:55:28.000000Z +0365e75dd4a9ad61dc98dcb641207c21 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +769 + +vertical.gif +file + + + + +2010-09-04T08:55:28.000000Z +193884a332e91059643448ed4bde2e04 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +92 + diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/alert.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/alert.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/alert.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/button.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/button.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/button.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/buttons.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/buttons.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/buttons.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/confirm.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/confirm.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/confirm.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/corners.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/corners.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/corners.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/horizontal.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/horizontal.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/horizontal.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/vertical.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/vertical.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/prop-base/vertical.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/alert.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/alert.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..94abd08763fffdaa0dd5c5afb470a97294f2b94d GIT binary patch literal 818 zcmV-21I_$LNk%w1VITk?0OkMyy?1uhZf>Is3*B5?sT&&Hqoc$;Jkrt6&k+&QHa5gV zL)l77I5;@fLqpYMWV+*+oUyj*ia`4%)P|vrSClaB!?EE7K$--(_XZ zOH0lO2-#9n!;Fik78a-!6wR}-yS%#378ch%J=j4(x@2V5*3{b0&C|=t(mFcQDJi8A z60bTsucxKY8XD3{O5bW~+gDfHP*AZbD54S)*gHGL#>A(co5`c08yg$Yzr7_TCCA9d zs-U0MFfhzxW4%d9s-K?K($LSkxy-Sz(7?Xdn3%wSe#oDmxL#e?qN1My0^C(q&nzt3 zjEvWFbJcly)5*uu)6w93eACp@*{!X#QBc56PRYv1%goBm&CA4*kj9vnyFxN00960|JK*lA^8LV00000EC2ui z03ZM$000O7fPaF6goTEOh>41ejE#5-A-Y zDMkRMg$FSdD>XGe76Lo4g8*}CUeivLI}B6rYIE)9Vh306CXDUKb=Dfx`}wT=u<6# zD$n)U&_b6YEgl901IUC4zyf`27&(S$$E;fb{Wx)wm4^u-0H zv*CdXLINn%=tH`+>C>qDxJcmTfS@*Z45S!AI|Ya#EOHOnP2`2|1;88Ju#tey5e=^) w9O1*fx%21Hn;(HtX3!cMK%gku&b_<$??7lEkM$&p`Sa-0r)T3DnWI1eJD_KQDgXcg literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/button.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/button.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e671094cb0eb210b756117f992cf5ca2caa698fd GIT binary patch literal 280 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/horizontal.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/horizontal.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c2a2ad454db194e428a7b9da40f62d5376a17428 GIT binary patch literal 769 zcmb7?=`WiB0LI^D)(HC`v6*aD4AW#LGRb0Oi$tH~CP=nb%N%8n zy02ceuewTUUDeW|RaMp*TlLV6R$o=rQOY{@AME+?`}QQiCwU%4Jq)?`{5B8=ECT1T z+wH!7{zji$)-UA>D9({)xO1SJGLHK54Mat(}s4_unMiKjB85EHng*~!Ddt+?(c5uHG4ZI zsc>jP#5Y6w6Wj5!Y=0^oK*&D+R;Yh@ze z7vfi;qFW{owiOfGqcB@XkwUZ0j?Km4{qjE- z6c!Z|O1!?5l~+^}tE#*^aCo0?lZ$rLKBwT;dI+nLO(UEMvb-ad9elEWPw8Xg(t zx$y<#6T+{PQ@$ecjAT|iC%dxnP5yoH$I`OLFU5*drPiz>bidcu^@a^2v}rP3-`?4^ z?Cl>M-Z(n8ot*x$0~Z|;ku35!-qAHSQN*GM3tW8AN#VWJNrHQD+6qXfO_zB^6eFVU zOjzupAb0*`W8} zQVeE5Djt<a0+Owme6r2OGio7DoTWqkhGKj0`0*1-*<$#uL5YH*kC8Z>wpCvYO~asp;G r-~A;>$wp)vkltB=c_?k6Zw*FUgrbAm;sB08O9+}m=}H3OFd*zN8L+JA literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/vertical.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/.svn/text-base/vertical.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..43a735f22c81d6d7d99c1ba9f034f38bfdd1a92b GIT binary patch literal 92 zcmZ?wbhEHb&D4o4FLHO9PR)B literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif new file mode 100644 index 0000000000000000000000000000000000000000..94abd08763fffdaa0dd5c5afb470a97294f2b94d GIT binary patch literal 818 zcmV-21I_$LNk%w1VITk?0OkMyy?1uhZf>Is3*B5?sT&&Hqoc$;Jkrt6&k+&QHa5gV zL)l77I5;@fLqpYMWV+*+oUyj*ia`4%)P|vrSClaB!?EE7K$--(_XZ zOH0lO2-#9n!;Fik78a-!6wR}-yS%#378ch%J=j4(x@2V5*3{b0&C|=t(mFcQDJi8A z60bTsucxKY8XD3{O5bW~+gDfHP*AZbD54S)*gHGL#>A(co5`c08yg$Yzr7_TCCA9d zs-U0MFfhzxW4%d9s-K?K($LSkxy-Sz(7?Xdn3%wSe#oDmxL#e?qN1My0^C(q&nzt3 zjEvWFbJcly)5*uu)6w93eACp@*{!X#QBc56PRYv1%goBm&CA4*kj9vnyFxN00960|JK*lA^8LV00000EC2ui z03ZM$000O7fPaF6goTEOh>41ejE#5-A-Y zDMkRMg$FSdD>XGe76Lo4g8*}CUeivLI}B6rYIE)9Vh306CXDUKb=Dfx`}wT=u<6# zD$n)U&_b6YEgl901IUC4zyf`27&(S$$E;fb{Wx)wm4^u-0H zv*CdXLINn%=tH`+>C>qDxJcmTfS@*Z45S!AI|Ya#EOHOnP2`2|1;88Ju#tey5e=^) w9O1*fx%21Hn;(HtX3!cMK%gku&b_<$??7lEkM$&p`Sa-0r)T3DnWI1eJD_KQDgXcg literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif new file mode 100644 index 0000000000000000000000000000000000000000..e671094cb0eb210b756117f992cf5ca2caa698fd GIT binary patch literal 280 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2a2ad454db194e428a7b9da40f62d5376a17428 GIT binary patch literal 769 zcmb7?=`WiB0LI^D)(HC`v6*aD4AW#LGRb0Oi$tH~CP=nb%N%8n zy02ceuewTUUDeW|RaMp*TlLV6R$o=rQOY{@AME+?`}QQiCwU%4Jq)?`{5B8=ECT1T z+wH!7{zji$)-UA>D9({)xO1SJGLHK54Mat(}s4_unMiKjB85EHng*~!Ddt+?(c5uHG4ZI zsc>jP#5Y6w6Wj5!Y=0^oK*&D+R;Yh@ze z7vfi;qFW{owiOfGqcB@XkwUZ0j?Km4{qjE- z6c!Z|O1!?5l~+^}tE#*^aCo0?lZ$rLKBwT;dI+nLO(UEMvb-ad9elEWPw8Xg(t zx$y<#6T+{PQ@$ecjAT|iC%dxnP5yoH$I`OLFU5*drPiz>bidcu^@a^2v}rP3-`?4^ z?Cl>M-Z(n8ot*x$0~Z|;ku35!-qAHSQN*GM3tW8AN#VWJNrHQD+6qXfO_zB^6eFVU zOjzupAb0*`W8} zQVeE5Djt<a0+Owme6r2OGio7DoTWqkhGKj0`0*1-*<$#uL5YH*kC8Z>wpCvYO~asp;G r-~A;>$wp)vkltB=c_?k6Zw*FUgrbAm;sB08O9+}m=}H3OFd*zN8L+JA literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif new file mode 100644 index 0000000000000000000000000000000000000000..43a735f22c81d6d7d99c1ba9f034f38bfdd1a92b GIT binary patch literal 92 zcmZ?wbhEHb&D4o4FLHO9PR)B literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/window.css b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/window.css new file mode 100644 index 0000000..5e6fd7d --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/skins/clearlooks2/window.css @@ -0,0 +1,90 @@ +/* Clearlooks 2 */ + +/* Reset */ +.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block} + +/* General */ +.clearlooks2 {position:absolute; direction:ltr} +.clearlooks2 .mceWrapper {position:static} +.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%} +.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)} +.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none} + +/* Top */ +.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px} +.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)} +.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)} +.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0} +.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold} +.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0} +.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px} +.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0} +.clearlooks2 .mceFocus .mceTop span {color:#FFF} + +/* Middle */ +.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0} +.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)} +.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0} +.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF} +.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)} + +/* Bottom */ +.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px} +.clearlooks2 .mceBottom {left:0; bottom:0; width:100%} +.clearlooks2 .mceBottom div {top:0} +.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px} +.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px} +.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0} +.clearlooks2 .mceBottom span {display:none} +.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px} +.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0} +.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px} +.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0} +.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px} + +/* Actions */ +.clearlooks2 a {width:29px; height:16px; top:3px;} +.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0} +.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0} +.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0} +.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0} +.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px} +.clearlooks2 .mceMovable .mceMove {display:block} +.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px} +.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px} +.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px} +.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px} +.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px} +.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px} + +/* Resize */ +.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px} +.clearlooks2 .mceResizable .mceResize {display:block} +.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none} +.clearlooks2 .mceMinimizable .mceMin {display:block} +.clearlooks2 .mceMaximizable .mceMax {display:block} +.clearlooks2 .mceMaximized .mceMed {display:block} +.clearlooks2 .mceMaximized .mceMax {display:none} +.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize} +.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize} +.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize} +.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;} +.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize} +.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize} +.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize} +.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize} + +/* Alert/Confirm */ +.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0} +.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px} +.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal} +.clearlooks2 a:hover {font-weight:bold;} +.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5} +.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px} +.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)} +.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px} +.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto} +.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/inlinepopups/template.htm b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/template.htm new file mode 100644 index 0000000..c98fe41 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/inlinepopups/template.htm @@ -0,0 +1,387 @@ + + + +Template for dialogs + + + + +
+
+
+
+
+
+
+ Blured +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Focused +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Statusbar +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Statusbar, Resizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Resizable, Maximizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Blurred, Maximizable, Statusbar, Resizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Maximized, Maximizable, Minimizable +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Blured +
+ +
+
+ Content +
+
+ +
+
+
+
+ Statusbar text. +
+ + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ Alert +
+ +
+
+ + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + +
+
+
+ +
+
+
+
+
+ + + Ok + +
+
+ +
+
+
+
+
+
+ Confirm +
+ +
+
+ + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + This is a very long error message. This is a very long error message. + +
+
+
+ +
+
+
+
+
+ + + Ok + Cancel + +
+
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/entries new file mode 100644 index 0000000..c461856 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/insertdatetime +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +d99072498466cdb2f53ed7c02da85982 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1931 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +5168ca34206e986ba5508ea07d109e1e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2778 + diff --git a/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..938ce6b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/insertdatetime/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;fg[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/layer/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/layer/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..701de1a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/layer/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,212 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Layer', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceInsertLayer', t._insertLayer, t); + + ed.addCommand('mceMoveForward', function() { + t._move(1); + }); + + ed.addCommand('mceMoveBackward', function() { + t._move(-1); + }); + + ed.addCommand('mceMakeAbsolute', function() { + t._toggleAbsolute(); + }); + + // Register buttons + ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); + ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); + ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); + ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); + + ed.onInit.add(function() { + if (tinymce.isIE) + ed.getDoc().execCommand('2D-Position', false, true); + }); + + ed.onNodeChange.add(t._nodeChange, t); + ed.onVisualAid.add(t._visualAid, t); + }, + + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var le, p; + + le = this._getParentLayer(n); + p = ed.dom.getParent(n, 'DIV,P,IMG'); + + if (!p) { + cm.setDisabled('absolute', 1); + cm.setDisabled('moveforward', 1); + cm.setDisabled('movebackward', 1); + } else { + cm.setDisabled('absolute', 0); + cm.setDisabled('moveforward', !le); + cm.setDisabled('movebackward', !le); + cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); + } + }, + + // Private methods + + _visualAid : function(ed, e, s) { + var dom = ed.dom; + + tinymce.each(dom.select('div,p', e), function(e) { + if (/^(absolute|relative|static)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceItemVisualAid'); + else + dom.removeClass(e, 'mceItemVisualAid'); + } + }); + }, + + _move : function(d) { + var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; + + nl = []; + tinymce.walk(ed.getBody(), function(n) { + if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) + nl.push(n); + }, 'childNodes'); + + // Find z-indexes + for (i=0; i -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else { + if (z[ci] > 0) + nl[ci].style.zIndex = z[ci] - 1; + } + } else { + // Move forward + + // Try find a higher one + for (i=0; i z[ci]) { + fi = i; + break; + } + } + + if (fi > -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else + nl[ci].style.zIndex = z[ci] + 1; + } + + ed.execCommand('mceRepaint'); + }, + + _getParentLayer : function(n) { + return this.editor.dom.getParent(n, function(n) { + return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); + }); + }, + + _insertLayer : function() { + var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); + + ed.dom.add(ed.getBody(), 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceItemVisualAid' + }, ed.selection.getContent() || ed.getLang('layer.content')); + }, + + _toggleAbsolute : function() { + var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); + + if (!le) + le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); + + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + ed.dom.setStyles(le, { + position : '', + left : '', + top : '', + width : '', + height : '' + }); + + ed.dom.removeClass(le, 'mceItemVisualAid'); + } else { + if (le.style.left == "") + le.style.left = 20 + 'px'; + + if (le.style.top == "") + le.style.top = 20 + 'px'; + + if (le.style.width == "") + le.style.width = le.width ? (le.width + 'px') : '100px'; + + if (le.style.height == "") + le.style.height = le.height ? (le.height + 'px') : '100px'; + + le.style.position = "absolute"; + ed.addVisual(ed.getBody()); + } + + ed.execCommand('mceRepaint'); + ed.nodeChanged(); + } + } + }); + + // Register plugin + tinymce.PluginManager.add('layer', tinymce.plugins.Layer); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin.js new file mode 100644 index 0000000..f88a6dd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;fg[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin_src.js new file mode 100644 index 0000000..701de1a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/layer/editor_plugin_src.js @@ -0,0 +1,212 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Layer', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceInsertLayer', t._insertLayer, t); + + ed.addCommand('mceMoveForward', function() { + t._move(1); + }); + + ed.addCommand('mceMoveBackward', function() { + t._move(-1); + }); + + ed.addCommand('mceMakeAbsolute', function() { + t._toggleAbsolute(); + }); + + // Register buttons + ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); + ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); + ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); + ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); + + ed.onInit.add(function() { + if (tinymce.isIE) + ed.getDoc().execCommand('2D-Position', false, true); + }); + + ed.onNodeChange.add(t._nodeChange, t); + ed.onVisualAid.add(t._visualAid, t); + }, + + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var le, p; + + le = this._getParentLayer(n); + p = ed.dom.getParent(n, 'DIV,P,IMG'); + + if (!p) { + cm.setDisabled('absolute', 1); + cm.setDisabled('moveforward', 1); + cm.setDisabled('movebackward', 1); + } else { + cm.setDisabled('absolute', 0); + cm.setDisabled('moveforward', !le); + cm.setDisabled('movebackward', !le); + cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); + } + }, + + // Private methods + + _visualAid : function(ed, e, s) { + var dom = ed.dom; + + tinymce.each(dom.select('div,p', e), function(e) { + if (/^(absolute|relative|static)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceItemVisualAid'); + else + dom.removeClass(e, 'mceItemVisualAid'); + } + }); + }, + + _move : function(d) { + var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; + + nl = []; + tinymce.walk(ed.getBody(), function(n) { + if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) + nl.push(n); + }, 'childNodes'); + + // Find z-indexes + for (i=0; i -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else { + if (z[ci] > 0) + nl[ci].style.zIndex = z[ci] - 1; + } + } else { + // Move forward + + // Try find a higher one + for (i=0; i z[ci]) { + fi = i; + break; + } + } + + if (fi > -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else + nl[ci].style.zIndex = z[ci] + 1; + } + + ed.execCommand('mceRepaint'); + }, + + _getParentLayer : function(n) { + return this.editor.dom.getParent(n, function(n) { + return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); + }); + }, + + _insertLayer : function() { + var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); + + ed.dom.add(ed.getBody(), 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceItemVisualAid' + }, ed.selection.getContent() || ed.getLang('layer.content')); + }, + + _toggleAbsolute : function() { + var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); + + if (!le) + le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); + + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + ed.dom.setStyles(le, { + position : '', + left : '', + top : '', + width : '', + height : '' + }); + + ed.dom.removeClass(le, 'mceItemVisualAid'); + } else { + if (le.style.left == "") + le.style.left = 20 + 'px'; + + if (le.style.top == "") + le.style.top = 20 + 'px'; + + if (le.style.width == "") + le.style.width = le.width ? (le.width + 'px') : '100px'; + + if (le.style.height == "") + le.style.height = le.height ? (le.height + 'px') : '100px'; + + le.style.position = "absolute"; + ed.addVisual(ed.getBody()); + } + + ed.execCommand('mceRepaint'); + ed.nodeChanged(); + } + } + }); + + // Register plugin + tinymce.PluginManager.add('layer', tinymce.plugins.Layer); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/entries new file mode 100644 index 0000000..53e8802 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/legacyoutput +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +12aa4310f6c246d70441443dab1b14f9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1776 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +d685086beec5d3c6e58da1b3d2c1f66c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4655 + diff --git a/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..29d43c5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.serializer;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"align"})}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..3bbdb7b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,136 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + * + * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align + * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash + * + * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are + * not apart of the newer specifications for HTML and XHTML. + */ + +(function(tinymce) { + // Override inline_styles setting to force TinyMCE to produce deprecated contents + tinymce.onAddEditor.addToTop(function(tinymce, editor) { + editor.settings.inline_styles = false; + }); + + // Create the legacy ouput plugin + tinymce.create('tinymce.plugins.LegacyOutput', { + init : function(editor) { + editor.onInit.add(function() { + var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', + fontSizes = tinymce.explode(editor.settings.font_size_style_values), + serializer = editor.serializer; + + // Override some internal formats to produce legacy elements and attributes + editor.formatter.register({ + // Change alignment formats to use the deprecated align attribute + alignleft : {selector : alignElements, attributes : {align : 'left'}}, + aligncenter : {selector : alignElements, attributes : {align : 'center'}}, + alignright : {selector : alignElements, attributes : {align : 'right'}}, + alignfull : {selector : alignElements, attributes : {align : 'full'}}, + + // Change the basic formatting elements to use deprecated element types + bold : {inline : 'b'}, + italic : {inline : 'i'}, + underline : {inline : 'u'}, + strikethrough : {inline : 'strike'}, + + // Change font size and font family to use the deprecated font element + fontname : {inline : 'font', attributes : {face : '%value'}}, + fontsize : { + inline : 'font', + attributes : { + size : function(vars) { + return tinymce.inArray(fontSizes, vars.value) + 1; + } + } + }, + + // Setup font elements for colors as well + forecolor : {inline : 'font', styles : {color : '%value'}}, + hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} + }); + + // Force parsing of the serializer rules + serializer._setup(); + + // Check that deprecated elements are allowed if not add them + tinymce.each('b,i,u,strike'.split(','), function(name) { + var rule = serializer.rules[name]; + + if (!rule) + serializer.addRules(name); + }); + + // Add font element if it's missing + if (!serializer.rules["font"]) + serializer.addRules("font[face|size|color|style]"); + + // Add the missing and depreacted align attribute for the serialization engine + tinymce.each(alignElements.split(','), function(name) { + var rule = serializer.rules[name], found; + + if (rule) { + tinymce.each(rule.attribs, function(name, attr) { + if (attr.name == 'align') { + found = true; + return false; + } + }); + + if (!found) + rule.attribs.push({name : 'align'}); + } + }); + + // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes + editor.onNodeChange.add(function(editor, control_manager) { + var control, fontElm, fontName, fontSize; + + // Find font element get it's name and size + fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); + if (fontElm) { + fontName = fontElm.face; + fontSize = fontElm.size; + } + + // Select/unselect the font name in droplist + if (control = control_manager.get('fontselect')) { + control.select(function(value) { + return value == fontName; + }); + } + + // Select/unselect the font size in droplist + if (control = control_manager.get('fontsizeselect')) { + control.select(function(value) { + var index = tinymce.inArray(fontSizes, value.fontSize); + + return index + 1 == fontSize; + }); + } + }); + }); + }, + + getInfo : function() { + return { + longname : 'LegacyOutput', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin.js new file mode 100644 index 0000000..29d43c5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin.js @@ -0,0 +1 @@ +(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.serializer;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"align"})}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin_src.js new file mode 100644 index 0000000..3bbdb7b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/legacyoutput/editor_plugin_src.js @@ -0,0 +1,136 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + * + * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align + * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash + * + * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are + * not apart of the newer specifications for HTML and XHTML. + */ + +(function(tinymce) { + // Override inline_styles setting to force TinyMCE to produce deprecated contents + tinymce.onAddEditor.addToTop(function(tinymce, editor) { + editor.settings.inline_styles = false; + }); + + // Create the legacy ouput plugin + tinymce.create('tinymce.plugins.LegacyOutput', { + init : function(editor) { + editor.onInit.add(function() { + var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', + fontSizes = tinymce.explode(editor.settings.font_size_style_values), + serializer = editor.serializer; + + // Override some internal formats to produce legacy elements and attributes + editor.formatter.register({ + // Change alignment formats to use the deprecated align attribute + alignleft : {selector : alignElements, attributes : {align : 'left'}}, + aligncenter : {selector : alignElements, attributes : {align : 'center'}}, + alignright : {selector : alignElements, attributes : {align : 'right'}}, + alignfull : {selector : alignElements, attributes : {align : 'full'}}, + + // Change the basic formatting elements to use deprecated element types + bold : {inline : 'b'}, + italic : {inline : 'i'}, + underline : {inline : 'u'}, + strikethrough : {inline : 'strike'}, + + // Change font size and font family to use the deprecated font element + fontname : {inline : 'font', attributes : {face : '%value'}}, + fontsize : { + inline : 'font', + attributes : { + size : function(vars) { + return tinymce.inArray(fontSizes, vars.value) + 1; + } + } + }, + + // Setup font elements for colors as well + forecolor : {inline : 'font', styles : {color : '%value'}}, + hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} + }); + + // Force parsing of the serializer rules + serializer._setup(); + + // Check that deprecated elements are allowed if not add them + tinymce.each('b,i,u,strike'.split(','), function(name) { + var rule = serializer.rules[name]; + + if (!rule) + serializer.addRules(name); + }); + + // Add font element if it's missing + if (!serializer.rules["font"]) + serializer.addRules("font[face|size|color|style]"); + + // Add the missing and depreacted align attribute for the serialization engine + tinymce.each(alignElements.split(','), function(name) { + var rule = serializer.rules[name], found; + + if (rule) { + tinymce.each(rule.attribs, function(name, attr) { + if (attr.name == 'align') { + found = true; + return false; + } + }); + + if (!found) + rule.attribs.push({name : 'align'}); + } + }); + + // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes + editor.onNodeChange.add(function(editor, control_manager) { + var control, fontElm, fontName, fontSize; + + // Find font element get it's name and size + fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); + if (fontElm) { + fontName = fontElm.face; + fontSize = fontElm.size; + } + + // Select/unselect the font name in droplist + if (control = control_manager.get('fontselect')) { + control.select(function(value) { + return value == fontName; + }); + } + + // Select/unselect the font size in droplist + if (control = control_manager.get('fontsizeselect')) { + control.select(function(value) { + var index = tinymce.inArray(fontSizes, value.fontSize); + + return index + 1 == fontSize; + }); + } + }); + }); + }, + + getInfo : function() { + return { + longname : 'LegacyOutput', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/media/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/media/.svn/entries new file mode 100644 index 0000000..d2cefef --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/.svn/entries @@ -0,0 +1,142 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/media +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +4293b412afc9ed2923de50a8ff452bc1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8146 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +ab141a29b708c7e63640df59d857dba2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11706 + +media.htm +file + + + + +2010-09-04T08:55:28.000000Z +dc1c82029076f117ea3d0bfd6fa951e7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +31850 + +css +dir + +img +dir + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..4bbe367 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j=''; + } + + return im; + }); + } + }); + }, + + getInfo : function() { + return { + longname : 'Media', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + _objectsToSpans : function(ed, o) { + var t = this, h = o.content; + + h = h.replace(/]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) { + var o = t._parse(c); + + return '' + }); + + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)\/?>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/<\/(object)([^>]*)>/gi, ''); + h = h.replace(/<\/embed>/gi, ''); + h = h.replace(/]*)>/gi, function(a, b) {return ''}); + h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam">'); + + o.content = h; + }, + + _buildObj : function(o, n) { + var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc; + + stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash'; + + p.width = o.width = dom.getAttrib(n, 'width') || 100; + p.height = o.height = dom.getAttrib(n, 'height') || 100; + + if (p.src) + p.src = ed.convertURL(p.src, 'src', n); + + if (stc) { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + type : 'application/x-shockwave-flash', + data : p.src, + style : dom.getAttrib(n, 'style'), + width : o.width, + height : o.height + }); + } else { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + classid : "clsid:" + o.classid, + style : dom.getAttrib(n, 'style'), + codebase : o.codebase, + width : o.width, + height : o.height + }); + } + + each (p, function(v, k) { + if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) { + // Use url instead of src in IE for Windows media + if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url) + k = 'url'; + + if (v) + dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v}); + } + }); + + if (!stc) + dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p)); + + return ob; + }, + + _spansToImgs : function(p) { + var t = this, dom = t.editor.dom, im, ci; + + each(dom.select('span', p), function(n) { + // Convert object into image + if (dom.getAttrib(n, 'class') == 'mceItemObject') { + ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, ''); + + switch (ci) { + case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'clsid:166b1bca-3f9c-11cf-8075-444553540000': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6': + case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95': + case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + + return; + } + + // Convert embed into image + if (dom.getAttrib(n, 'class') == 'mceItemEmbed') { + switch (dom.getAttrib(n, 'type')) { + case 'application/x-shockwave-flash': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'application/x-director': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'application/x-mplayer2': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'video/quicktime': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'audio/x-pn-realaudio-plugin': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + } + }); + }, + + _createImg : function(cl, n) { + var im, dom = this.editor.dom, pa = {}, ti = '', args; + + args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data']; + + // Create image + im = dom.create('img', { + src : this.url + '/img/trans.gif', + width : dom.getAttrib(n, 'width') || 100, + height : dom.getAttrib(n, 'height') || 100, + style : dom.getAttrib(n, 'style'), + 'class' : cl + }); + + // Setup base parameters + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v) + pa[na] = v; + }); + + // Add optional parameters + each(dom.select('span', n), function(n) { + if (dom.hasClass(n, 'mceItemParam')) + pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value'); + }); + + // Use src not movie + if (pa.movie) { + pa.src = pa.movie; + delete pa.movie; + } + + // No src try data + if (!pa.src) { + pa.src = pa.data; + delete pa.data; + } + + // Merge with embed args + n = dom.select('.mceItemEmbed', n)[0]; + if (n) { + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v && !pa[na]) + pa[na] = v; + }); + } + + delete pa.width; + delete pa.height; + + im.title = this._serialize(pa); + + return im; + }, + + _parse : function(s) { + return tinymce.util.JSON.parse('{' + s + '}'); + }, + + _serialize : function(o) { + return tinymce.util.JSON.serialize(o).replace(/[{}]/g, ''); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/media.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/media.htm.svn-base new file mode 100644 index 0000000..8635883 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/.svn/text-base/media.htm.svn-base @@ -0,0 +1,817 @@ + + + + {#media_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#media_dlg.general} + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ + + + + + +
x   
+
+
+ +
+ {#media_dlg.preview} + +
+
+ +
+
+ {#media_dlg.advanced} + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
 
+
+
+ +
+ {#media_dlg.flash_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + + + + + + + +
+
+ +
+ {#media_dlg.flv_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.qt_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+  
+ + + + + +
 
+
+
+ +
+ {#media_dlg.wmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.rmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+   +
+
+ +
+ {#media_dlg.shockwave_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/entries new file mode 100644 index 0000000..c93140a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/media/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +content.css +file + + + + +2010-09-04T08:55:28.000000Z +ebcad73e7f6785a308328129aa90d5cb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +524 + +media.css +file + + + + +2010-09-04T08:55:28.000000Z +51795abbefc981b9f77083afd672a495 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1255 + diff --git a/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/content.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/content.css.svn-base new file mode 100644 index 0000000..7739381 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/content.css.svn-base @@ -0,0 +1,6 @@ +.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;} +.mceItemShockWave {background-image: url(../img/shockwave.gif);} +.mceItemFlash {background-image:url(../img/flash.gif);} +.mceItemQuickTime {background-image:url(../img/quicktime.gif);} +.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);} +.mceItemRealMedia {background-image:url(../img/realmedia.gif);} diff --git a/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/media.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/media.css.svn-base new file mode 100644 index 0000000..7b2253b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/css/.svn/text-base/media.css.svn-base @@ -0,0 +1,16 @@ +#id, #name, #hspace, #vspace, #class_name, #align { width: 100px } +#hspace, #vspace { width: 50px } +#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px } +#flash_base, #flash_flashvars { width: 240px } +#width, #height { width: 40px } +#src, #media_type { width: 250px } +#class { width: 120px } +#prev { margin: 0; border: 1px solid black; width: 380px; height: 230px; overflow: auto } +.panel_wrapper div.current { height: 390px; overflow: auto } +#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none } +.mceAddSelectValue { background-color: #DDDDDD } +#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px } +#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px } +#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px } +#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px } +#qt_qtsrc { width: 200px } diff --git a/app/plugins/tinymce/webroot/js/plugins/media/css/content.css b/app/plugins/tinymce/webroot/js/plugins/media/css/content.css new file mode 100644 index 0000000..7739381 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/css/content.css @@ -0,0 +1,6 @@ +.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;} +.mceItemShockWave {background-image: url(../img/shockwave.gif);} +.mceItemFlash {background-image:url(../img/flash.gif);} +.mceItemQuickTime {background-image:url(../img/quicktime.gif);} +.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);} +.mceItemRealMedia {background-image:url(../img/realmedia.gif);} diff --git a/app/plugins/tinymce/webroot/js/plugins/media/css/media.css b/app/plugins/tinymce/webroot/js/plugins/media/css/media.css new file mode 100644 index 0000000..7b2253b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/css/media.css @@ -0,0 +1,16 @@ +#id, #name, #hspace, #vspace, #class_name, #align { width: 100px } +#hspace, #vspace { width: 50px } +#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px } +#flash_base, #flash_flashvars { width: 240px } +#width, #height { width: 40px } +#src, #media_type { width: 250px } +#class { width: 120px } +#prev { margin: 0; border: 1px solid black; width: 380px; height: 230px; overflow: auto } +.panel_wrapper div.current { height: 390px; overflow: auto } +#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none } +.mceAddSelectValue { background-color: #DDDDDD } +#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px } +#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px } +#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px } +#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px } +#qt_qtsrc { width: 200px } diff --git a/app/plugins/tinymce/webroot/js/plugins/media/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/media/editor_plugin.js new file mode 100644 index 0000000..4bbe367 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j=''; + } + + return im; + }); + } + }); + }, + + getInfo : function() { + return { + longname : 'Media', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + _objectsToSpans : function(ed, o) { + var t = this, h = o.content; + + h = h.replace(/]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) { + var o = t._parse(c); + + return '' + }); + + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)\/?>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/<\/(object)([^>]*)>/gi, ''); + h = h.replace(/<\/embed>/gi, ''); + h = h.replace(/]*)>/gi, function(a, b) {return ''}); + h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam">'); + + o.content = h; + }, + + _buildObj : function(o, n) { + var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc; + + stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash'; + + p.width = o.width = dom.getAttrib(n, 'width') || 100; + p.height = o.height = dom.getAttrib(n, 'height') || 100; + + if (p.src) + p.src = ed.convertURL(p.src, 'src', n); + + if (stc) { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + type : 'application/x-shockwave-flash', + data : p.src, + style : dom.getAttrib(n, 'style'), + width : o.width, + height : o.height + }); + } else { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + classid : "clsid:" + o.classid, + style : dom.getAttrib(n, 'style'), + codebase : o.codebase, + width : o.width, + height : o.height + }); + } + + each (p, function(v, k) { + if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) { + // Use url instead of src in IE for Windows media + if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url) + k = 'url'; + + if (v) + dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v}); + } + }); + + if (!stc) + dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p)); + + return ob; + }, + + _spansToImgs : function(p) { + var t = this, dom = t.editor.dom, im, ci; + + each(dom.select('span', p), function(n) { + // Convert object into image + if (dom.getAttrib(n, 'class') == 'mceItemObject') { + ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, ''); + + switch (ci) { + case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'clsid:166b1bca-3f9c-11cf-8075-444553540000': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6': + case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95': + case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + + return; + } + + // Convert embed into image + if (dom.getAttrib(n, 'class') == 'mceItemEmbed') { + switch (dom.getAttrib(n, 'type')) { + case 'application/x-shockwave-flash': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'application/x-director': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'application/x-mplayer2': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'video/quicktime': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'audio/x-pn-realaudio-plugin': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + } + }); + }, + + _createImg : function(cl, n) { + var im, dom = this.editor.dom, pa = {}, ti = '', args; + + args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data']; + + // Create image + im = dom.create('img', { + src : this.url + '/img/trans.gif', + width : dom.getAttrib(n, 'width') || 100, + height : dom.getAttrib(n, 'height') || 100, + style : dom.getAttrib(n, 'style'), + 'class' : cl + }); + + // Setup base parameters + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v) + pa[na] = v; + }); + + // Add optional parameters + each(dom.select('span', n), function(n) { + if (dom.hasClass(n, 'mceItemParam')) + pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value'); + }); + + // Use src not movie + if (pa.movie) { + pa.src = pa.movie; + delete pa.movie; + } + + // No src try data + if (!pa.src) { + pa.src = pa.data; + delete pa.data; + } + + // Merge with embed args + n = dom.select('.mceItemEmbed', n)[0]; + if (n) { + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v && !pa[na]) + pa[na] = v; + }); + } + + delete pa.width; + delete pa.height; + + im.title = this._serialize(pa); + + return im; + }, + + _parse : function(s) { + return tinymce.util.JSON.parse('{' + s + '}'); + }, + + _serialize : function(o) { + return tinymce.util.JSON.serialize(o).replace(/[{}]/g, ''); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/entries new file mode 100644 index 0000000..ad6d559 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/media/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +quicktime.gif +file + + + + +2010-09-04T08:55:28.000000Z +9a6a9fdead205b125c07ea37e71ed4f1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +303 + +flash.gif +file + + + + +2010-09-04T08:55:28.000000Z +6c69b02015d09280332ff8b07e4ea2f3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +241 + +flv_player.swf +file + + + + +2010-09-04T08:55:28.000000Z +fe011e9725b2722b59bb8ef4991bf6bb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +11668 + +realmedia.gif +file + + + + +2010-09-04T08:55:28.000000Z +b9734ee16d790e67bea01046feba28b7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +439 + +trans.gif +file + + + + +2010-09-04T08:55:28.000000Z +12bf9e19374920de3146a64775f46a5e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +43 + +shockwave.gif +file + + + + +2010-09-04T08:55:28.000000Z +baa643b587565755157618032dc93e3c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +387 + +windowsmedia.gif +file + + + + +2010-09-04T08:55:28.000000Z +c327cd167b3a7bc263d908b0d0154ead +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +415 + diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flash.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flash.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flash.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flv_player.swf.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flv_player.swf.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/flv_player.swf.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/quicktime.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/quicktime.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/quicktime.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/realmedia.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/realmedia.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/realmedia.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/shockwave.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/shockwave.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/shockwave.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/trans.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/trans.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/trans.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/windowsmedia.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/windowsmedia.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/prop-base/windowsmedia.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flash.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flash.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..cb192e6ceda8d19ad8e7d08dd1cfde0aa72ead2a GIT binary patch literal 241 zcmVOzlLa+Za}7>m0&NpCfJ0FQc3~F7DE)S%o1)Qi1n@vxX46qnD4hRS-NE*Pw!4UvE=#^N( literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flv_player.swf.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/flv_player.swf.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..042c2ab969e98a6fdbe08848c4a73bd2c41de906 GIT binary patch literal 11668 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/quicktime.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/quicktime.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..3b0499145b16138249f653a1a3f2c80230fb292c GIT binary patch literal 303 zcmV+~0nq+ONk%w1VGsZi0K^{vH>m7Qv+~s9^fsC5ZpZP=*zu3F=Jxpf8k_5u%JNv6 z=md-84VLU4w)kSE=yI&-yw>b=v+SqE?+kq47pC+YrR?bJ^yu>Zyvpn;hTp*6^mM!O zu+8$^=JX7bb<~J01ZTA{q@86#&8&6~H`Ss{{?p%K!-p%L6P2TpFYz90?pD06UU# BbnE~C literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/realmedia.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/realmedia.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc GIT binary patch literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTuipLaF8n=^^LJP4|1^gGRdo_Rl+a*grZQ1hw@Zo1ikN$oB{QbRq&z?QIckdq1aE3;Fq_(WV>Kc7gjQtQh+9OrtFhn-)LUqD<|MOIl_!(Ed#pPRE;S)g;ew3>pd zn`Wa(lc2DGa)peFw3f88dp-|`@*)AXj;@(8hwDr|7Sxsp;&YxjN*Y{PBB!TIU|!b7Zgv0OaG5)&Kwi literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/trans.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/trans.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/windowsmedia.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/img/.svn/text-base/windowsmedia.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..ab50f2d887a0843b116ef598e5a005e5601d18d0 GIT binary patch literal 415 zcmV;Q0bu?|Nk%w1VGjTg0M$PL`E^qkEu+z?1&N?x_*pRg{rx~kg!#|I<>uyug^O^t z0hZGrt*x!>$1C!zn`W5@`ts6_uMW)2%<0NUEKIo?SIPPE=}U0}7Z(?JcX!y=*;bF< zCWz-=h7+2ao9)(dOHM;+X=xs9)%!~xc&ICMZdRYdUQ2$^@9y(6X3NCIz{cM7f^Z=Q z1_tQ95kgl8b%R%OiYTIo7LSdE^@}A^8LW002J#EC2ui01p5U000KOz@O0K01zUifeIyT9%!RzMDgehG|mwLz+Eh; z7Z~iE zrX?OfJ^>XeDJK)xJuWOB3_l1N0Ra>g4Gk^=ED0V6LI?>4;Q|6OB{LplLMRLg8U5-E J?0y6R06W6!pgRBn literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/flash.gif b/app/plugins/tinymce/webroot/js/plugins/media/img/flash.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb192e6ceda8d19ad8e7d08dd1cfde0aa72ead2a GIT binary patch literal 241 zcmVOzlLa+Za}7>m0&NpCfJ0FQc3~F7DE)S%o1)Qi1n@vxX46qnD4hRS-NE*Pw!4UvE=#^N( literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/flv_player.swf b/app/plugins/tinymce/webroot/js/plugins/media/img/flv_player.swf new file mode 100644 index 0000000000000000000000000000000000000000..042c2ab969e98a6fdbe08848c4a73bd2c41de906 GIT binary patch literal 11668 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/quicktime.gif b/app/plugins/tinymce/webroot/js/plugins/media/img/quicktime.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b0499145b16138249f653a1a3f2c80230fb292c GIT binary patch literal 303 zcmV+~0nq+ONk%w1VGsZi0K^{vH>m7Qv+~s9^fsC5ZpZP=*zu3F=Jxpf8k_5u%JNv6 z=md-84VLU4w)kSE=yI&-yw>b=v+SqE?+kq47pC+YrR?bJ^yu>Zyvpn;hTp*6^mM!O zu+8$^=JX7bb<~J01ZTA{q@86#&8&6~H`Ss{{?p%K!-p%L6P2TpFYz90?pD06UU# BbnE~C literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/realmedia.gif b/app/plugins/tinymce/webroot/js/plugins/media/img/realmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc GIT binary patch literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTuipLaF8n=^^LJP4|1^gGRdo_Rl+a*grZQ1hw@Zo1ikN$oB{QbRq&z?QIckdq1aE3;Fq_(WV>Kc7gjQtQh+9OrtFhn-)LUqD<|MOIl_!(Ed#pPRE;S)g;ew3>pd zn`Wa(lc2DGa)peFw3f88dp-|`@*)AXj;@(8hwDr|7Sxsp;&YxjN*Y{PBB!TIU|!b7Zgv0OaG5)&Kwi literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/trans.gif b/app/plugins/tinymce/webroot/js/plugins/media/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/img/windowsmedia.gif b/app/plugins/tinymce/webroot/js/plugins/media/img/windowsmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab50f2d887a0843b116ef598e5a005e5601d18d0 GIT binary patch literal 415 zcmV;Q0bu?|Nk%w1VGjTg0M$PL`E^qkEu+z?1&N?x_*pRg{rx~kg!#|I<>uyug^O^t z0hZGrt*x!>$1C!zn`W5@`ts6_uMW)2%<0NUEKIo?SIPPE=}U0}7Z(?JcX!y=*;bF< zCWz-=h7+2ao9)(dOHM;+X=xs9)%!~xc&ICMZdRYdUQ2$^@9y(6X3NCIz{cM7f^Z=Q z1_tQ95kgl8b%R%OiYTIo7LSdE^@}A^8LW002J#EC2ui01p5U000KOz@O0K01zUifeIyT9%!RzMDgehG|mwLz+Eh; z7Z~iE zrX?OfJ^>XeDJK)xJuWOB3_l1N0Ra>g4Gk^=ED0V6LI?>4;Q|6OB{LplLMRLg8U5-E J?0y6R06W6!pgRBn literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/entries new file mode 100644 index 0000000..6cc57bc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/media/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +embed.js +file + + + + +2010-09-04T08:55:28.000000Z +5df3783492b848adde42124a1e9cf383 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1865 + +media.js +file + + + + +2010-09-04T08:55:28.000000Z +cac808d6007f1003b334e315f01ceec6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +17934 + diff --git a/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/text-base/embed.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/text-base/embed.js.svn-base new file mode 100644 index 0000000..6fe25de --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/media/js/.svn/text-base/embed.js.svn-base @@ -0,0 +1,73 @@ +/** + * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. + */ + +function writeFlash(p) { + writeEmbed( + 'D27CDB6E-AE6D-11cf-96B8-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'application/x-shockwave-flash', + p + ); +} + +function writeShockWave(p) { + writeEmbed( + '166B1BCA-3F9C-11CF-8075-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', + 'application/x-director', + p + ); +} + +function writeQuickTime(p) { + writeEmbed( + '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', + 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', + 'video/quicktime', + p + ); +} + +function writeRealMedia(p) { + writeEmbed( + 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'audio/x-pn-realaudio-plugin', + p + ); +} + +function writeWindowsMedia(p) { + p.url = p.src; + writeEmbed( + '6BF52A52-394A-11D3-B153-00C04F79FAA6', + 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', + 'application/x-mplayer2', + p + ); +} + +function writeEmbed(cls, cb, mt, p) { + var h = '', n; + + h += ''; + + h += ''); + +function init() { + var pl = "", f, val; + var type = "flash", fe, i; + + ed = tinyMCEPopup.editor; + + tinyMCEPopup.resizeToInnerSize(); + f = document.forms[0] + + fe = ed.selection.getNode(); + if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + pl = fe.title; + + switch (ed.dom.getAttrib(fe, 'class')) { + case 'mceItemFlash': + type = 'flash'; + break; + + case 'mceItemFlashVideo': + type = 'flv'; + break; + + case 'mceItemShockWave': + type = 'shockwave'; + break; + + case 'mceItemWindowsMedia': + type = 'wmp'; + break; + + case 'mceItemQuickTime': + type = 'qt'; + break; + + case 'mceItemRealMedia': + type = 'rmp'; + break; + } + + document.forms[0].insert.value = ed.getLang('update', 'Insert', true); + } + + document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var html = getMediaListHTML('medialist','src','media','media'); + if (html == "") + document.getElementById("linklistrow").style.display = 'none'; + else + document.getElementById("linklistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('filebrowser')) + document.getElementById('src').style.width = '230px'; + + // Setup form + if (pl != "") { + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + switch (type) { + case "flash": + setBool(pl, 'flash', 'play'); + setBool(pl, 'flash', 'loop'); + setBool(pl, 'flash', 'menu'); + setBool(pl, 'flash', 'swliveconnect'); + setStr(pl, 'flash', 'quality'); + setStr(pl, 'flash', 'scale'); + setStr(pl, 'flash', 'salign'); + setStr(pl, 'flash', 'wmode'); + setStr(pl, 'flash', 'base'); + setStr(pl, 'flash', 'flashvars'); + break; + + case "qt": + setBool(pl, 'qt', 'loop'); + setBool(pl, 'qt', 'autoplay'); + setBool(pl, 'qt', 'cache'); + setBool(pl, 'qt', 'controller'); + setBool(pl, 'qt', 'correction'); + setBool(pl, 'qt', 'enablejavascript'); + setBool(pl, 'qt', 'kioskmode'); + setBool(pl, 'qt', 'autohref'); + setBool(pl, 'qt', 'playeveryframe'); + setBool(pl, 'qt', 'tarsetcache'); + setStr(pl, 'qt', 'scale'); + setStr(pl, 'qt', 'starttime'); + setStr(pl, 'qt', 'endtime'); + setStr(pl, 'qt', 'tarset'); + setStr(pl, 'qt', 'qtsrcchokespeed'); + setStr(pl, 'qt', 'volume'); + setStr(pl, 'qt', 'qtsrc'); + break; + + case "shockwave": + setBool(pl, 'shockwave', 'sound'); + setBool(pl, 'shockwave', 'progress'); + setBool(pl, 'shockwave', 'autostart'); + setBool(pl, 'shockwave', 'swliveconnect'); + setStr(pl, 'shockwave', 'swvolume'); + setStr(pl, 'shockwave', 'swstretchstyle'); + setStr(pl, 'shockwave', 'swstretchhalign'); + setStr(pl, 'shockwave', 'swstretchvalign'); + break; + + case "wmp": + setBool(pl, 'wmp', 'autostart'); + setBool(pl, 'wmp', 'enabled'); + setBool(pl, 'wmp', 'enablecontextmenu'); + setBool(pl, 'wmp', 'fullscreen'); + setBool(pl, 'wmp', 'invokeurls'); + setBool(pl, 'wmp', 'mute'); + setBool(pl, 'wmp', 'stretchtofit'); + setBool(pl, 'wmp', 'windowlessvideo'); + setStr(pl, 'wmp', 'balance'); + setStr(pl, 'wmp', 'baseurl'); + setStr(pl, 'wmp', 'captioningid'); + setStr(pl, 'wmp', 'currentmarker'); + setStr(pl, 'wmp', 'currentposition'); + setStr(pl, 'wmp', 'defaultframe'); + setStr(pl, 'wmp', 'playcount'); + setStr(pl, 'wmp', 'rate'); + setStr(pl, 'wmp', 'uimode'); + setStr(pl, 'wmp', 'volume'); + break; + + case "rmp": + setBool(pl, 'rmp', 'autostart'); + setBool(pl, 'rmp', 'loop'); + setBool(pl, 'rmp', 'autogotourl'); + setBool(pl, 'rmp', 'center'); + setBool(pl, 'rmp', 'imagestatus'); + setBool(pl, 'rmp', 'maintainaspect'); + setBool(pl, 'rmp', 'nojava'); + setBool(pl, 'rmp', 'prefetch'); + setBool(pl, 'rmp', 'shuffle'); + setStr(pl, 'rmp', 'console'); + setStr(pl, 'rmp', 'controls'); + setStr(pl, 'rmp', 'numloop'); + setStr(pl, 'rmp', 'scriptcallbacks'); + break; + } + + setStr(pl, null, 'src'); + setStr(pl, null, 'id'); + setStr(pl, null, 'name'); + setStr(pl, null, 'vspace'); + setStr(pl, null, 'hspace'); + setStr(pl, null, 'bgcolor'); + setStr(pl, null, 'align'); + setStr(pl, null, 'width'); + setStr(pl, null, 'height'); + + if ((val = ed.dom.getAttrib(fe, "width")) != "") + pl.width = f.width.value = val; + + if ((val = ed.dom.getAttrib(fe, "height")) != "") + pl.height = f.height.value = val; + + oldWidth = pl.width ? parseInt(pl.width) : 0; + oldHeight = pl.height ? parseInt(pl.height) : 0; + } else + oldWidth = oldHeight = 0; + + selectByValue(f, 'media_type', type); + changedType(type); + updateColor('bgcolor_pick', 'bgcolor'); + + TinyMCE_EditableSelects.init(); + generatePreview(); +} + +function insertMedia() { + var fe, f = document.forms[0], h; + + tinyMCEPopup.restoreSelection(); + + if (!AutoValidator.validate(f)) { + tinyMCEPopup.alert(ed.getLang('invalid_data')); + return false; + } + + f.width.value = f.width.value == "" ? 100 : f.width.value; + f.height.value = f.height.value == "" ? 100 : f.height.value; + + fe = ed.selection.getNode(); + if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + fe.className = "mceItemFlash"; + break; + + case "flv": + fe.className = "mceItemFlashVideo"; + break; + + case "shockwave": + fe.className = "mceItemShockWave"; + break; + + case "qt": + fe.className = "mceItemQuickTime"; + break; + + case "wmp": + fe.className = "mceItemWindowsMedia"; + break; + + case "rmp": + fe.className = "mceItemRealMedia"; + break; + } + + if (fe.width != f.width.value || fe.height != f.height.value) + ed.execCommand('mceRepaint'); + + fe.title = serializeParameters(); + fe.width = f.width.value; + fe.height = f.height.value; + fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); + fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); + fe.align = f.align.options[f.align.selectedIndex].value; + } else { + h = ' 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; +} + +function getType(v) { + var fo, i, c, el, x, f = document.forms[0]; + + fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); + + // YouTube + if (v.match(/watch\?v=(.+)(.*)/)) { + f.width.value = '425'; + f.height.value = '350'; + f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1]; + return 'flash'; + } + + // Google video + if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { + f.width.value = '425'; + f.height.value = '326'; + f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; + return 'flash'; + } + + for (i=0; i 0 ? s.substring(0, s.length - 1) : s; + + return s; +} + +function setBool(pl, p, n) { + if (typeof(pl[n]) == "undefined") + return; + + document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false'; +} + +function setStr(pl, p, n) { + var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; + + if (typeof(pl[n]) == "undefined") + return; + + if (e.type == "text") + e.value = pl[n]; + else + selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); +} + +function getBool(p, n, d, tv, fv) { + var v = document.forms[0].elements[p + "_" + n].checked; + + tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; + fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; + + return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',"); +} + +function getStr(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + if (n == 'src') + v = tinyMCEPopup.editor.convertURL(v, 'src', null); + + return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); +} + +function getInt(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); +} + +function jsEncode(s) { + s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); + s = s.replace(new RegExp('"', 'g'), '\\"'); + s = s.replace(new RegExp("'", 'g'), "\\'"); + + return s; +} + +function generatePreview(c) { + var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; + + p.innerHTML = ''; + + nw = parseInt(f.width.value); + nh = parseInt(f.height.value); + + if (f.width.value != "" && f.height.value != "") { + if (f.constrain.checked) { + if (c == 'width' && oldWidth != 0) { + wp = nw / oldWidth; + nh = Math.round(wp * nh); + f.height.value = nh; + } else if (c == 'height' && oldHeight != 0) { + hp = nh / oldHeight; + nw = Math.round(hp * nw); + f.width.value = nw; + } + } + } + + if (f.width.value != "") + oldWidth = nw; + + if (f.height.value != "") + oldHeight = nh; + + // After constrain + pl = serializeParameters(); + + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; + type = 'application/x-shockwave-flash'; + break; + + case "shockwave": + cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; + type = 'application/x-director'; + break; + + case "qt": + cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; + codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; + type = 'video/quicktime'; + break; + + case "wmp": + cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'application/x-mplayer2'; + break; + + case "rmp": + cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'audio/x-pn-realaudio-plugin'; + break; + } + + if (pl == '') { + p.innerHTML = ''; + return; + } + + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + if (!pl.src) { + p.innerHTML = ''; + return; + } + + pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src); + pl.width = !pl.width ? 100 : pl.width; + pl.height = !pl.height ? 100 : pl.height; + pl.id = !pl.id ? 'obj' : pl.id; + pl.name = !pl.name ? 'eobj' : pl.name; + pl.align = !pl.align ? '' : pl.align; + + // Avoid annoying warning about insecure items + if (!tinymce.isIE || document.location.protocol != 'https:') { + h += ''; + + for (n in pl) { + h += ''; + + // Add extra url parameter if it's an absolute URL + if (n == 'src' && pl[n].indexOf('://') != -1) + h += ''; + } + } + + h += ''; + + h += ''); + +function init() { + var pl = "", f, val; + var type = "flash", fe, i; + + ed = tinyMCEPopup.editor; + + tinyMCEPopup.resizeToInnerSize(); + f = document.forms[0] + + fe = ed.selection.getNode(); + if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + pl = fe.title; + + switch (ed.dom.getAttrib(fe, 'class')) { + case 'mceItemFlash': + type = 'flash'; + break; + + case 'mceItemFlashVideo': + type = 'flv'; + break; + + case 'mceItemShockWave': + type = 'shockwave'; + break; + + case 'mceItemWindowsMedia': + type = 'wmp'; + break; + + case 'mceItemQuickTime': + type = 'qt'; + break; + + case 'mceItemRealMedia': + type = 'rmp'; + break; + } + + document.forms[0].insert.value = ed.getLang('update', 'Insert', true); + } + + document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var html = getMediaListHTML('medialist','src','media','media'); + if (html == "") + document.getElementById("linklistrow").style.display = 'none'; + else + document.getElementById("linklistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('filebrowser')) + document.getElementById('src').style.width = '230px'; + + // Setup form + if (pl != "") { + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + switch (type) { + case "flash": + setBool(pl, 'flash', 'play'); + setBool(pl, 'flash', 'loop'); + setBool(pl, 'flash', 'menu'); + setBool(pl, 'flash', 'swliveconnect'); + setStr(pl, 'flash', 'quality'); + setStr(pl, 'flash', 'scale'); + setStr(pl, 'flash', 'salign'); + setStr(pl, 'flash', 'wmode'); + setStr(pl, 'flash', 'base'); + setStr(pl, 'flash', 'flashvars'); + break; + + case "qt": + setBool(pl, 'qt', 'loop'); + setBool(pl, 'qt', 'autoplay'); + setBool(pl, 'qt', 'cache'); + setBool(pl, 'qt', 'controller'); + setBool(pl, 'qt', 'correction'); + setBool(pl, 'qt', 'enablejavascript'); + setBool(pl, 'qt', 'kioskmode'); + setBool(pl, 'qt', 'autohref'); + setBool(pl, 'qt', 'playeveryframe'); + setBool(pl, 'qt', 'tarsetcache'); + setStr(pl, 'qt', 'scale'); + setStr(pl, 'qt', 'starttime'); + setStr(pl, 'qt', 'endtime'); + setStr(pl, 'qt', 'tarset'); + setStr(pl, 'qt', 'qtsrcchokespeed'); + setStr(pl, 'qt', 'volume'); + setStr(pl, 'qt', 'qtsrc'); + break; + + case "shockwave": + setBool(pl, 'shockwave', 'sound'); + setBool(pl, 'shockwave', 'progress'); + setBool(pl, 'shockwave', 'autostart'); + setBool(pl, 'shockwave', 'swliveconnect'); + setStr(pl, 'shockwave', 'swvolume'); + setStr(pl, 'shockwave', 'swstretchstyle'); + setStr(pl, 'shockwave', 'swstretchhalign'); + setStr(pl, 'shockwave', 'swstretchvalign'); + break; + + case "wmp": + setBool(pl, 'wmp', 'autostart'); + setBool(pl, 'wmp', 'enabled'); + setBool(pl, 'wmp', 'enablecontextmenu'); + setBool(pl, 'wmp', 'fullscreen'); + setBool(pl, 'wmp', 'invokeurls'); + setBool(pl, 'wmp', 'mute'); + setBool(pl, 'wmp', 'stretchtofit'); + setBool(pl, 'wmp', 'windowlessvideo'); + setStr(pl, 'wmp', 'balance'); + setStr(pl, 'wmp', 'baseurl'); + setStr(pl, 'wmp', 'captioningid'); + setStr(pl, 'wmp', 'currentmarker'); + setStr(pl, 'wmp', 'currentposition'); + setStr(pl, 'wmp', 'defaultframe'); + setStr(pl, 'wmp', 'playcount'); + setStr(pl, 'wmp', 'rate'); + setStr(pl, 'wmp', 'uimode'); + setStr(pl, 'wmp', 'volume'); + break; + + case "rmp": + setBool(pl, 'rmp', 'autostart'); + setBool(pl, 'rmp', 'loop'); + setBool(pl, 'rmp', 'autogotourl'); + setBool(pl, 'rmp', 'center'); + setBool(pl, 'rmp', 'imagestatus'); + setBool(pl, 'rmp', 'maintainaspect'); + setBool(pl, 'rmp', 'nojava'); + setBool(pl, 'rmp', 'prefetch'); + setBool(pl, 'rmp', 'shuffle'); + setStr(pl, 'rmp', 'console'); + setStr(pl, 'rmp', 'controls'); + setStr(pl, 'rmp', 'numloop'); + setStr(pl, 'rmp', 'scriptcallbacks'); + break; + } + + setStr(pl, null, 'src'); + setStr(pl, null, 'id'); + setStr(pl, null, 'name'); + setStr(pl, null, 'vspace'); + setStr(pl, null, 'hspace'); + setStr(pl, null, 'bgcolor'); + setStr(pl, null, 'align'); + setStr(pl, null, 'width'); + setStr(pl, null, 'height'); + + if ((val = ed.dom.getAttrib(fe, "width")) != "") + pl.width = f.width.value = val; + + if ((val = ed.dom.getAttrib(fe, "height")) != "") + pl.height = f.height.value = val; + + oldWidth = pl.width ? parseInt(pl.width) : 0; + oldHeight = pl.height ? parseInt(pl.height) : 0; + } else + oldWidth = oldHeight = 0; + + selectByValue(f, 'media_type', type); + changedType(type); + updateColor('bgcolor_pick', 'bgcolor'); + + TinyMCE_EditableSelects.init(); + generatePreview(); +} + +function insertMedia() { + var fe, f = document.forms[0], h; + + tinyMCEPopup.restoreSelection(); + + if (!AutoValidator.validate(f)) { + tinyMCEPopup.alert(ed.getLang('invalid_data')); + return false; + } + + f.width.value = f.width.value == "" ? 100 : f.width.value; + f.height.value = f.height.value == "" ? 100 : f.height.value; + + fe = ed.selection.getNode(); + if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + fe.className = "mceItemFlash"; + break; + + case "flv": + fe.className = "mceItemFlashVideo"; + break; + + case "shockwave": + fe.className = "mceItemShockWave"; + break; + + case "qt": + fe.className = "mceItemQuickTime"; + break; + + case "wmp": + fe.className = "mceItemWindowsMedia"; + break; + + case "rmp": + fe.className = "mceItemRealMedia"; + break; + } + + if (fe.width != f.width.value || fe.height != f.height.value) + ed.execCommand('mceRepaint'); + + fe.title = serializeParameters(); + fe.width = f.width.value; + fe.height = f.height.value; + fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); + fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); + fe.align = f.align.options[f.align.selectedIndex].value; + } else { + h = ' 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; +} + +function getType(v) { + var fo, i, c, el, x, f = document.forms[0]; + + fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); + + // YouTube + if (v.match(/watch\?v=(.+)(.*)/)) { + f.width.value = '425'; + f.height.value = '350'; + f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1]; + return 'flash'; + } + + // Google video + if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { + f.width.value = '425'; + f.height.value = '326'; + f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; + return 'flash'; + } + + for (i=0; i 0 ? s.substring(0, s.length - 1) : s; + + return s; +} + +function setBool(pl, p, n) { + if (typeof(pl[n]) == "undefined") + return; + + document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false'; +} + +function setStr(pl, p, n) { + var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; + + if (typeof(pl[n]) == "undefined") + return; + + if (e.type == "text") + e.value = pl[n]; + else + selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); +} + +function getBool(p, n, d, tv, fv) { + var v = document.forms[0].elements[p + "_" + n].checked; + + tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; + fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; + + return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',"); +} + +function getStr(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + if (n == 'src') + v = tinyMCEPopup.editor.convertURL(v, 'src', null); + + return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); +} + +function getInt(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); +} + +function jsEncode(s) { + s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); + s = s.replace(new RegExp('"', 'g'), '\\"'); + s = s.replace(new RegExp("'", 'g'), "\\'"); + + return s; +} + +function generatePreview(c) { + var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; + + p.innerHTML = ''; + + nw = parseInt(f.width.value); + nh = parseInt(f.height.value); + + if (f.width.value != "" && f.height.value != "") { + if (f.constrain.checked) { + if (c == 'width' && oldWidth != 0) { + wp = nw / oldWidth; + nh = Math.round(wp * nh); + f.height.value = nh; + } else if (c == 'height' && oldHeight != 0) { + hp = nh / oldHeight; + nw = Math.round(hp * nw); + f.width.value = nw; + } + } + } + + if (f.width.value != "") + oldWidth = nw; + + if (f.height.value != "") + oldHeight = nh; + + // After constrain + pl = serializeParameters(); + + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; + type = 'application/x-shockwave-flash'; + break; + + case "shockwave": + cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; + type = 'application/x-director'; + break; + + case "qt": + cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; + codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; + type = 'video/quicktime'; + break; + + case "wmp": + cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'application/x-mplayer2'; + break; + + case "rmp": + cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'audio/x-pn-realaudio-plugin'; + break; + } + + if (pl == '') { + p.innerHTML = ''; + return; + } + + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + if (!pl.src) { + p.innerHTML = ''; + return; + } + + pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src); + pl.width = !pl.width ? 100 : pl.width; + pl.height = !pl.height ? 100 : pl.height; + pl.id = !pl.id ? 'obj' : pl.id; + pl.name = !pl.name ? 'eobj' : pl.name; + pl.align = !pl.align ? '' : pl.align; + + // Avoid annoying warning about insecure items + if (!tinymce.isIE || document.location.protocol != 'https:') { + h += ''; + + for (n in pl) { + h += ''; + + // Add extra url parameter if it's an absolute URL + if (n == 'src' && pl[n].indexOf('://') != -1) + h += ''; + } + } + + h += ' + + + {#media_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#media_dlg.general} + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ + + + + + +
x   
+
+
+ +
+ {#media_dlg.preview} + +
+
+ +
+
+ {#media_dlg.advanced} + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
 
+
+
+ +
+ {#media_dlg.flash_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + + + + + + + +
+
+ +
+ {#media_dlg.flv_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.qt_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+  
+ + + + + +
 
+
+
+ +
+ {#media_dlg.wmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.rmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+   +
+
+ +
+ {#media_dlg.shockwave_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/entries new file mode 100644 index 0000000..72bf154 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/nonbreaking +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +20bd58f82d7e5549d6728135f257c4c7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +963 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +c0a791a50b38c659101cff48d426bf9c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1487 + diff --git a/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..eb40a6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..e4fc5a3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Nonbreaking', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceNonBreaking', function() { + ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? ' ' : ' '); + }); + + // Register buttons + ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); + + if (ed.getParam('nonbreaking_force_tab')) { + ed.onKeyDown.add(function(ed, e) { + if (tinymce.isIE && e.keyCode == 9) { + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + tinymce.dom.Event.cancel(e); + } + }); + } + }, + + getInfo : function() { + return { + longname : 'Nonbreaking space', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + + // Private methods + }); + + // Register plugin + tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin.js new file mode 100644 index 0000000..eb40a6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin_src.js new file mode 100644 index 0000000..e4fc5a3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/nonbreaking/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Nonbreaking', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceNonBreaking', function() { + ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? ' ' : ' '); + }); + + // Register buttons + ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); + + if (ed.getParam('nonbreaking_force_tab')) { + ed.onKeyDown.add(function(ed, e) { + if (tinymce.isIE && e.keyCode == 9) { + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + tinymce.dom.Event.cancel(e); + } + }); + } + }, + + getInfo : function() { + return { + longname : 'Nonbreaking space', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + + // Private methods + }); + + // Register plugin + tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/entries new file mode 100644 index 0000000..cac1f49 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/noneditable +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +3f456605e83505bb0571144cc5f14b59 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1364 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +5076a0725700427ceed9c38337c94642 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2230 + diff --git a/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..9945cd8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..54a7b36 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/noneditable/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,90 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var Event = tinymce.dom.Event; + + tinymce.create('tinymce.plugins.NonEditablePlugin', { + init : function(ed, url) { + var t = this, editClass, nonEditClass; + + t.editor = ed; + editClass = ed.getParam("noneditable_editable_class", "mceEditable"); + nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable"); + + ed.onNodeChange.addToTop(function(ed, cm, n) { + var sc, ec; + + // Block if start or end is inside a non editable element + sc = ed.dom.getParent(ed.selection.getStart(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + ec = ed.dom.getParent(ed.selection.getEnd(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + // Block or unblock + if (sc || ec) { + t._setDisabled(1); + return false; + } else + t._setDisabled(0); + }); + }, + + getInfo : function() { + return { + longname : 'Non editable elements', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _block : function(ed, e) { + var k = e.keyCode; + + // Don't block arrow keys, pg up/down, and F1-F12 + if ((k > 32 && k < 41) || (k > 111 && k < 124)) + return; + + return Event.cancel(e); + }, + + _setDisabled : function(s) { + var t = this, ed = t.editor; + + tinymce.each(ed.controlManager.controls, function(c) { + c.setDisabled(s); + }); + + if (s !== t.disabled) { + if (s) { + ed.onKeyDown.addToTop(t._block); + ed.onKeyPress.addToTop(t._block); + ed.onKeyUp.addToTop(t._block); + ed.onPaste.addToTop(t._block); + } else { + ed.onKeyDown.remove(t._block); + ed.onKeyPress.remove(t._block); + ed.onKeyUp.remove(t._block); + ed.onPaste.remove(t._block); + } + + t.disabled = s; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin.js new file mode 100644 index 0000000..9945cd8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin_src.js new file mode 100644 index 0000000..54a7b36 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/noneditable/editor_plugin_src.js @@ -0,0 +1,90 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var Event = tinymce.dom.Event; + + tinymce.create('tinymce.plugins.NonEditablePlugin', { + init : function(ed, url) { + var t = this, editClass, nonEditClass; + + t.editor = ed; + editClass = ed.getParam("noneditable_editable_class", "mceEditable"); + nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable"); + + ed.onNodeChange.addToTop(function(ed, cm, n) { + var sc, ec; + + // Block if start or end is inside a non editable element + sc = ed.dom.getParent(ed.selection.getStart(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + ec = ed.dom.getParent(ed.selection.getEnd(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + // Block or unblock + if (sc || ec) { + t._setDisabled(1); + return false; + } else + t._setDisabled(0); + }); + }, + + getInfo : function() { + return { + longname : 'Non editable elements', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _block : function(ed, e) { + var k = e.keyCode; + + // Don't block arrow keys, pg up/down, and F1-F12 + if ((k > 32 && k < 41) || (k > 111 && k < 124)) + return; + + return Event.cancel(e); + }, + + _setDisabled : function(s) { + var t = this, ed = t.editor; + + tinymce.each(ed.controlManager.controls, function(c) { + c.setDisabled(s); + }); + + if (s !== t.disabled) { + if (s) { + ed.onKeyDown.addToTop(t._block); + ed.onKeyPress.addToTop(t._block); + ed.onKeyUp.addToTop(t._block); + ed.onPaste.addToTop(t._block); + } else { + ed.onKeyDown.remove(t._block); + ed.onKeyPress.remove(t._block); + ed.onKeyUp.remove(t._block); + ed.onPaste.remove(t._block); + } + + t.disabled = s; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/entries new file mode 100644 index 0000000..dfd03f5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/entries @@ -0,0 +1,102 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/pagebreak +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +895bcb74c5c6941dd8f7e6c9bd1b29c8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1463 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +2d79c0bafa9add668e4d42798034fcab +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2170 + +css +dir + +img +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..a212f69 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..905a743 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,77 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.PageBreakPlugin', { + init : function(ed, url) { + var pb = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), pbRE; + + pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g'); + + // Register commands + ed.addCommand('mcePageBreak', function() { + ed.execCommand('mceInsertContent', 0, pb); + }); + + // Register buttons + ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls}); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(url + "/css/content.css"); + + if (ed.theme.onResolveName) { + ed.theme.onResolveName.add(function(th, o) { + if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls)) + o.name = 'pagebreak'; + }); + } + }); + + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls)) + ed.selection.select(e); + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls)); + }); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = o.content.replace(pbRE, pb); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.get) + o.content = o.content.replace(/]+>/g, function(im) { + if (im.indexOf('class="mcePageBreak') !== -1) + im = sep; + + return im; + }); + }); + }, + + getInfo : function() { + return { + longname : 'PageBreak', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/entries new file mode 100644 index 0000000..deac26c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/pagebreak/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +content.css +file + + + + +2010-09-04T08:55:28.000000Z +d9664762a610f2b5f7b10b5781f3299a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +169 + diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/text-base/content.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/text-base/content.css.svn-base new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/.svn/text-base/content.css.svn-base @@ -0,0 +1 @@ +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;} diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/content.css b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/content.css new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/css/content.css @@ -0,0 +1 @@ +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;} diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin.js new file mode 100644 index 0000000..a212f69 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin_src.js new file mode 100644 index 0000000..905a743 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/editor_plugin_src.js @@ -0,0 +1,77 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.PageBreakPlugin', { + init : function(ed, url) { + var pb = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), pbRE; + + pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g'); + + // Register commands + ed.addCommand('mcePageBreak', function() { + ed.execCommand('mceInsertContent', 0, pb); + }); + + // Register buttons + ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls}); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(url + "/css/content.css"); + + if (ed.theme.onResolveName) { + ed.theme.onResolveName.add(function(th, o) { + if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls)) + o.name = 'pagebreak'; + }); + } + }); + + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls)) + ed.selection.select(e); + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls)); + }); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = o.content.replace(pbRE, pb); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.get) + o.content = o.content.replace(/]+>/g, function(im) { + if (im.indexOf('class="mcePageBreak') !== -1) + im = sep; + + return im; + }); + }); + }, + + getInfo : function() { + return { + longname : 'PageBreak', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/entries new file mode 100644 index 0000000..7837fd6 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/pagebreak/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +pagebreak.gif +file + + + + +2010-09-04T08:55:28.000000Z +48872075f721bf57a517e3275d61c0ba +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +325 + +trans.gif +file + + + + +2010-09-04T08:55:28.000000Z +12bf9e19374920de3146a64775f46a5e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +43 + diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/pagebreak.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/pagebreak.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/pagebreak.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/trans.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/trans.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/prop-base/trans.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/pagebreak.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/pagebreak.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..acdf4085f3068c4c0a1d6855f4b80dae8bac3068 GIT binary patch literal 325 zcmV-L0lNN2Nk%w1VPpUd0J9GO`>v<{=;ru;boX6P{`2zsmyZ3>&HK5t_;hIbi-G;z z+4`cI{KdfcXj}GCLjV8&A^8LW000jFEC2ui0Av6R000E?@X1N5y*TU5yZ>M)j$|1M z4Ouvb$pHu>IW8BZq|n;U0s@T!VM5~w1_+1X!EiVl!&PITYdjT!ffYfpt{jAfv%qvh zA63WUHSlr7LkeyaV4(pM0f50(II?RD4RtMg4-E+tFhdAy5{3c=0}3Bg9Y8`B2To20 zR%SO62L%9}0H+dzoKB$+2TOwzUrwi{XiBM^4V#>63q3!LsU3u93zH8CdwqY%62;1g z0g8ze$k93lWExp`CUe|K4qOWk17ZeJ0|5pDP6+}};{>bI@lOWj=kf}r2sHp7w9-Ie XK%9UG6W(*AX-vY05F<*&5CH%?Gwy&_ literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/trans.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/.svn/text-base/trans.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/pagebreak.gif b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..acdf4085f3068c4c0a1d6855f4b80dae8bac3068 GIT binary patch literal 325 zcmV-L0lNN2Nk%w1VPpUd0J9GO`>v<{=;ru;boX6P{`2zsmyZ3>&HK5t_;hIbi-G;z z+4`cI{KdfcXj}GCLjV8&A^8LW000jFEC2ui0Av6R000E?@X1N5y*TU5yZ>M)j$|1M z4Ouvb$pHu>IW8BZq|n;U0s@T!VM5~w1_+1X!EiVl!&PITYdjT!ffYfpt{jAfv%qvh zA63WUHSlr7LkeyaV4(pM0f50(II?RD4RtMg4-E+tFhdAy5{3c=0}3Bg9Y8`B2To20 zR%SO62L%9}0H+dzoKB$+2TOwzUrwi{XiBM^4V#>63q3!LsU3u93zH8CdwqY%62;1g z0g8ze$k93lWExp`CUe|K4qOWk17ZeJ0|5pDP6+}};{>bI@lOWj=kf}r2sHp7w9-Ie XK%9UG6W(*AX-vY05F<*&5CH%?Gwy&_ literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/trans.gif b/app/plugins/tinymce/webroot/js/plugins/pagebreak/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/entries new file mode 100644 index 0000000..afc1bfc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/entries @@ -0,0 +1,170 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/paste +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +2bf074e592db4c23d54f79bb2e12f65f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +13634 + +pasteword.htm +file + + + + +2010-09-04T08:55:28.000000Z +152c6cb86eb58abecb6c9e4ba099cfc1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +762 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +17af6830d011f5c71f1a4394a4447dc5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +31334 + +pastetext.htm +file + + + + +2010-09-04T08:55:28.000000Z +9b66a9a84428df3ebe11f5755b2420a1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1183 + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..3785ab2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF
');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(l,"paste_convert_middot_lists")){e([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(u,h,t){var v=[],o=0,r=p(g(t).replace(/"/gi,"'"),";");c(r,function(s){var w,y,z=p(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(oe.y+e.h){l.getDoc().body.scrollTop=o0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"
"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"

"],[/\n/g,"
"]])}}if((l=v.indexOf("

"))!=-1){k=v.lastIndexOf("

");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+' ');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((Ai.y+i.h)){z.body.scrollTop=A

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

$1

"); + } + + if (getParam(ed, "paste_convert_middot_lists")) { + process([ + [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker + [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers + ]); + } + + process([ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"] + ]); + + // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag. + // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. + do { + len = h.length; + h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); + } while (len != h.length); + + // Remove all spans if no styles is to be retained + if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } else { + // We're keeping styles, so at least clean them up. + // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx + + process([ + // Convert ___ to string of alternating breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : ""; + } + ], + + // Examine all styles: delete junk, transform some, and keep the rest + [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi, + function(str, tag, style) { + var n = [], + i = 0, + s = explode(trim(style).replace(/"/gi, "'"), ";"); + + // Examine each style definition within the tag's style attribute + each(s, function(v) { + var name, value, + parts = explode(v, ":"); + + function ensureUnits(v) { + return v + ((v !== "0") && (/\d$/.test(v)))? "px" : ""; + } + + if (parts.length == 2) { + name = parts[0].toLowerCase(); + value = parts[1].toLowerCase(); + + // Translate certain MS Office styles into their CSS equivalents + switch (name) { + case "mso-padding-alt": + case "mso-padding-top-alt": + case "mso-padding-right-alt": + case "mso-padding-bottom-alt": + case "mso-padding-left-alt": + case "mso-margin-alt": + case "mso-margin-top-alt": + case "mso-margin-right-alt": + case "mso-margin-bottom-alt": + case "mso-margin-left-alt": + case "mso-table-layout-alt": + case "mso-height": + case "mso-width": + case "mso-vertical-align-alt": + n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value); + return; + + case "horiz-align": + n[i++] = "text-align:" + value; + return; + + case "vert-align": + n[i++] = "vertical-align:" + value; + return; + + case "font-color": + case "mso-foreground": + n[i++] = "color:" + value; + return; + + case "mso-background": + case "mso-highlight": + n[i++] = "background:" + value; + return; + + case "mso-default-height": + n[i++] = "min-height:" + ensureUnits(value); + return; + + case "mso-default-width": + n[i++] = "min-width:" + ensureUnits(value); + return; + + case "mso-padding-between-alt": + n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value); + return; + + case "text-line-through": + if ((value == "single") || (value == "double")) { + n[i++] = "text-decoration:line-through"; + } + return; + + case "mso-zero-height": + if (value == "yes") { + n[i++] = "display:none"; + } + return; + } + + // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name + if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) { + return; + } + + // If it reached this point, it must be a valid CSS style + n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case + } + }); + + // If style attribute contained any valid styles the re-write it; otherwise delete style attribute. + if (i > 0) { + return tag + ' style="' + n.join(';') + '"'; + } else { + return tag; + } + } + ] + ]); + } + } + + // Replace headers with + if (getParam(ed, "paste_convert_headers_to_strong")) { + process([ + [/]*>/gi, "

"], + [/<\/h[1-6][^>]*>/gi, "

"] + ]); + } + + // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). + // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. + stripClass = getParam(ed, "paste_strip_class_attributes"); + + if (stripClass !== "none") { + function removeClasses(match, g1) { + if (stripClass === "all") + return ''; + + var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), + function(v) { + return (/^(?!mso)/i.test(v)); + } + ); + + return cls.length ? ' class="' + cls.join(" ") + '"' : ''; + }; + + h = h.replace(/ class="([^"]+)"/gi, removeClasses); + h = h.replace(/ class=(\w+)/gi, removeClasses); + } + + // Remove spans option + if (getParam(ed, "paste_remove_spans")) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } + + //console.log('After preprocess:' + h); + + o.content = h; + }, + + /** + * Various post process items. + */ + _postProcess : function(pl, o) { + var t = this, ed = t.editor, dom = ed.dom, styleProps; + + if (o.wordContent) { + // Remove named anchors or TOC links + each(dom.select('a', o.node), function(a) { + if (!a.href || a.href.indexOf('#_Toc') != -1) + dom.remove(a, 1); + }); + + if (getParam(ed, "paste_convert_middot_lists")) { + t._convertLists(pl, o); + } + + // Process styles + styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties + + // Process only if a string was specified and not equal to "all" or "*" + if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { + styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); + + // Retains some style properties + each(dom.select('*', o.node), function(el) { + var newStyle = {}, npc = 0, i, sp, sv; + + // Store a subset of the existing styles + if (styleProps) { + for (i = 0; i < styleProps.length; i++) { + sp = styleProps[i]; + sv = dom.getStyle(el, sp); + + if (sv) { + newStyle[sp] = sv; + npc++; + } + } + } + + // Remove all of the existing styles + dom.setAttrib(el, 'style', ''); + + if (styleProps && npc > 0) + dom.setStyles(el, newStyle); // Add back the stored subset of styles + else // Remove empty span tags that do not have class attributes + if (el.nodeName == 'SPAN' && !el.className) + dom.remove(el, true); + }); + } + } + + // Remove all style information or only specifically on WebKit to avoid the style bug on that browser + if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { + each(dom.select('*[style]', o.node), function(el) { + el.removeAttribute('style'); + el.removeAttribute('_mce_style'); + }); + } else { + if (tinymce.isWebKit) { + // We need to compress the styles on WebKit since if you paste it will become + // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles + each(dom.select('*', o.node), function(el) { + el.removeAttribute('_mce_style'); + }); + } + } + }, + + /** + * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. + */ + _convertLists : function(pl, o) { + var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; + + // Convert middot lists into real semantic lists + each(dom.select('p', o.node), function(p) { + var sib, val = '', type, html, idx, parents; + + // Get text node value at beginning of paragraph + for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) + val += sib.nodeValue; + + val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); + + // Detect unordered lists look for bullets + if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val)) + type = 'ol'; + + // Check if node value matches the list pattern: o   + if (type) { + margin = parseFloat(p.style.marginLeft || 0); + + if (margin > lastMargin) + levels.push(margin); + + if (!listElm || type != lastType) { + listElm = dom.create(type); + dom.insertAfter(listElm, p); + } else { + // Nested list element + if (margin > lastMargin) { + listElm = li.appendChild(dom.create(type)); + } else if (margin < lastMargin) { + // Find parent level based on margin value + idx = tinymce.inArray(levels, margin); + parents = dom.getParents(listElm.parentNode, type); + listElm = parents[parents.length - 1 - idx] || listElm; + } + } + + // Remove middot or number spans if they exists + each(dom.select('span', p), function(span) { + var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); + + // Remove span with the middot or the number + if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html)) + dom.remove(span); + else if (/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) + dom.remove(span); + }); + + html = p.innerHTML; + + // Remove middot/list items + if (type == 'ul') + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/, ''); + else + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); + + // Create li and add paragraph data into the new li + li = listElm.appendChild(dom.create('li', 0, html)); + dom.remove(p); + + lastMargin = margin; + lastType = type; + } else + listElm = lastMargin = 0; // End list element + }); + + // Remove any left over makers + html = o.node.innerHTML; + if (html.indexOf('__MCE_ITEM__') != -1) + o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); + }, + + /** + * This method will split the current block parent and insert the contents inside the split position. + * This logic can be improved so text nodes at the start/end remain in the start/end block elements + */ + _insertBlockContent : function(ed, dom, content) { + var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker'; + + function select(n) { + var r; + + if (tinymce.isIE) { + r = ed.getDoc().body.createTextRange(); + r.moveToElementText(n); + r.collapse(false); + r.select(); + } else { + sel.select(n, 1); + sel.collapse(false); + } + } + + // Insert a marker for the caret position + this._insert('', 1); + marker = dom.get(markerId); + parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td'); + + // If it's a parent block but not a table cell + if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) { + // Split parent block + marker = dom.split(parentBlock, marker); + + // Insert nodes before the marker + each(dom.create('div', 0, content).childNodes, function(n) { + last = marker.parentNode.insertBefore(n.cloneNode(true), marker); + }); + + // Move caret after marker + select(last); + } else { + dom.setOuterHTML(marker, content); + sel.select(ed.getBody(), 1); + sel.collapse(0); + } + + // Remove marker if it's left + while (elm = dom.get(markerId)) + dom.remove(elm); + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(ed.getWin()); + y = ed.dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if (y < vp.y || y + elmHeight > vp.y + vp.h) + ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25; + }, + + /** + * Inserts the specified contents at the caret position. + */ + _insert : function(h, skip_undo) { + var ed = this.editor, r = ed.selection.getRng(); + + // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. + if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) + ed.getDoc().execCommand('Delete', false, null); + + // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents + ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo}); + }, + + /** + * Instead of the old plain text method which tried to re-create a paste operation, the + * new approach adds a plain text mode toggle switch that changes the behavior of paste. + * This function is passed the same input that the regular paste plugin produces. + * It performs additional scrubbing and produces (and inserts) the plain text. + * This approach leverages all of the great existing functionality in the paste + * plugin, and requires minimal changes to add the new functionality. + * Speednet - June 2009 + */ + _insertPlainText : function(ed, dom, h) { + var i, len, pos, rpos, node, breakElms, before, after, + w = ed.getWin(), + d = ed.getDoc(), + sel = ed.selection, + is = tinymce.is, + inArray = tinymce.inArray, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"); + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + h = h.replace(v, ""); + else + h = h.replace(v[0], v[1]); + }); + }; + + if ((typeof(h) === "string") && (h.length > 0)) { + if (!entities) + entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(","); + + // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line + if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) { + process([ + /[\n\r]+/g + ]); + } else { + // Otherwise just get rid of carriage returns (only need linefeeds) + process([ + /\r+/g + ]); + } + + process([ + [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them + [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
tags and table rows + [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them + /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags + [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) + [ + // HTML entity + /&(#\d+|[a-z0-9]{1,10});/gi, + + // Replace with actual character + function(e, s) { + if (s.charAt(0) === "#") { + return String.fromCharCode(s.slice(1)); + } + else { + return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " "; + } + } + ], + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars. + [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks + /^\s+|\s+$/g // Trim the front & back + ]); + + h = dom.encode(h); + + // Delete any highlighted text before pasting + if (!sel.isCollapsed()) { + d.execCommand("Delete", false, null); + } + + // Perform default or custom replacements + if (is(rl, "array") || (is(rl, "array"))) { + process(rl); + } + else if (is(rl, "string")) { + process(new RegExp(rl, "gi")); + } + + // Treat paragraphs as specified in the config + if (linebr == "none") { + process([ + [/\n+/g, " "] + ]); + } + else if (linebr == "br") { + process([ + [/\n/g, "
"] + ]); + } + else { + process([ + /^\s+|\s+$/g, + [/\n\n/g, "

"], + [/\n/g, "
"] + ]); + } + + // This next piece of code handles the situation where we're pasting more than one paragraph of plain + // text, and we are pasting the content into the middle of a block node in the editor. The block + // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining). + // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the + // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between + // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and + // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the + // plain text take the same style as the existing paragraph.) + if ((pos = h.indexOf("

")) != -1) { + rpos = h.lastIndexOf("

"); + node = sel.getNode(); + breakElms = []; // Get list of elements to break + + do { + if (node.nodeType == 1) { + // Don't break tables and break at body + if (node.nodeName == "TD" || node.nodeName == "BODY") { + break; + } + + breakElms[breakElms.length] = node; + } + } while (node = node.parentNode); + + // Are we in the middle of a block node? + if (breakElms.length > 0) { + before = h.substring(0, pos); + after = ""; + + for (i=0, len=breakElms.length; i"; + after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">"; + } + + if (pos == rpos) { + h = before + after + h.substring(pos+7); + } + else { + h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7); + } + } + } + + // Insert content at the caret, plus add a marker for repositioning the caret + ed.execCommand("mceInsertRawHTML", false, h + ' '); + + // Reposition the caret to the marker, which was placed immediately after the inserted content. + // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers. + // The second part of the code scrolls the content up if the caret is positioned off-screen. + // This is only necessary for WebKit browsers, but it doesn't hurt to use for all. + window.setTimeout(function() { + var marker = dom.get('_plain_text_marker'), + elm, vp, y, elmHeight; + + sel.select(marker, false); + d.execCommand("Delete", false, null); + marker = null; + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(w); + y = dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) { + d.body.scrollTop = y < vp.y ? y : y - vp.h + 25; + } + }, 0); + } + }, + + /** + * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. + */ + _legacySupport : function() { + var t = this, ed = t.editor; + + // Register command(s) for backwards compatibility + ed.addCommand("mcePasteWord", function() { + ed.windowManager.open({ + file: t.url + "/pasteword.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline: 1 + }); + }); + + if (getParam(ed, "paste_text_use_dialog")) { + ed.addCommand("mcePasteText", function() { + ed.windowManager.open({ + file : t.url + "/pastetext.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline : 1 + }); + }); + } + + // Register button for backwards compatibility + ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); + } + }); + + // Register plugin + tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pastetext.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pastetext.htm.svn-base new file mode 100644 index 0000000..8ccfbb9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pastetext.htm.svn-base @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +

+
{#paste.paste_text_desc}
+ +
+ +
+ +
+ +
{#paste_dlg.text_title}
+ + + +
+ + +
+
+ + \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pasteword.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pasteword.htm.svn-base new file mode 100644 index 0000000..7731f39 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/.svn/text-base/pasteword.htm.svn-base @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
+
{#paste.paste_word_desc}
+ +
{#paste_dlg.word_title}
+ +
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/paste/editor_plugin.js new file mode 100644 index 0000000..3785ab2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF
');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(l,"paste_convert_middot_lists")){e([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(u,h,t){var v=[],o=0,r=p(g(t).replace(/"/gi,"'"),";");c(r,function(s){var w,y,z=p(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(oe.y+e.h){l.getDoc().body.scrollTop=o0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"
"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"

"],[/\n/g,"
"]])}}if((l=v.indexOf("

"))!=-1){k=v.lastIndexOf("

");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+' ');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((Ai.y+i.h)){z.body.scrollTop=A

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

$1

"); + } + + if (getParam(ed, "paste_convert_middot_lists")) { + process([ + [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker + [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers + ]); + } + + process([ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"] + ]); + + // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag. + // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. + do { + len = h.length; + h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); + } while (len != h.length); + + // Remove all spans if no styles is to be retained + if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } else { + // We're keeping styles, so at least clean them up. + // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx + + process([ + // Convert ___ to string of alternating breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : ""; + } + ], + + // Examine all styles: delete junk, transform some, and keep the rest + [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi, + function(str, tag, style) { + var n = [], + i = 0, + s = explode(trim(style).replace(/"/gi, "'"), ";"); + + // Examine each style definition within the tag's style attribute + each(s, function(v) { + var name, value, + parts = explode(v, ":"); + + function ensureUnits(v) { + return v + ((v !== "0") && (/\d$/.test(v)))? "px" : ""; + } + + if (parts.length == 2) { + name = parts[0].toLowerCase(); + value = parts[1].toLowerCase(); + + // Translate certain MS Office styles into their CSS equivalents + switch (name) { + case "mso-padding-alt": + case "mso-padding-top-alt": + case "mso-padding-right-alt": + case "mso-padding-bottom-alt": + case "mso-padding-left-alt": + case "mso-margin-alt": + case "mso-margin-top-alt": + case "mso-margin-right-alt": + case "mso-margin-bottom-alt": + case "mso-margin-left-alt": + case "mso-table-layout-alt": + case "mso-height": + case "mso-width": + case "mso-vertical-align-alt": + n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value); + return; + + case "horiz-align": + n[i++] = "text-align:" + value; + return; + + case "vert-align": + n[i++] = "vertical-align:" + value; + return; + + case "font-color": + case "mso-foreground": + n[i++] = "color:" + value; + return; + + case "mso-background": + case "mso-highlight": + n[i++] = "background:" + value; + return; + + case "mso-default-height": + n[i++] = "min-height:" + ensureUnits(value); + return; + + case "mso-default-width": + n[i++] = "min-width:" + ensureUnits(value); + return; + + case "mso-padding-between-alt": + n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value); + return; + + case "text-line-through": + if ((value == "single") || (value == "double")) { + n[i++] = "text-decoration:line-through"; + } + return; + + case "mso-zero-height": + if (value == "yes") { + n[i++] = "display:none"; + } + return; + } + + // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name + if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) { + return; + } + + // If it reached this point, it must be a valid CSS style + n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case + } + }); + + // If style attribute contained any valid styles the re-write it; otherwise delete style attribute. + if (i > 0) { + return tag + ' style="' + n.join(';') + '"'; + } else { + return tag; + } + } + ] + ]); + } + } + + // Replace headers with + if (getParam(ed, "paste_convert_headers_to_strong")) { + process([ + [/]*>/gi, "

"], + [/<\/h[1-6][^>]*>/gi, "

"] + ]); + } + + // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). + // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. + stripClass = getParam(ed, "paste_strip_class_attributes"); + + if (stripClass !== "none") { + function removeClasses(match, g1) { + if (stripClass === "all") + return ''; + + var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), + function(v) { + return (/^(?!mso)/i.test(v)); + } + ); + + return cls.length ? ' class="' + cls.join(" ") + '"' : ''; + }; + + h = h.replace(/ class="([^"]+)"/gi, removeClasses); + h = h.replace(/ class=(\w+)/gi, removeClasses); + } + + // Remove spans option + if (getParam(ed, "paste_remove_spans")) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } + + //console.log('After preprocess:' + h); + + o.content = h; + }, + + /** + * Various post process items. + */ + _postProcess : function(pl, o) { + var t = this, ed = t.editor, dom = ed.dom, styleProps; + + if (o.wordContent) { + // Remove named anchors or TOC links + each(dom.select('a', o.node), function(a) { + if (!a.href || a.href.indexOf('#_Toc') != -1) + dom.remove(a, 1); + }); + + if (getParam(ed, "paste_convert_middot_lists")) { + t._convertLists(pl, o); + } + + // Process styles + styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties + + // Process only if a string was specified and not equal to "all" or "*" + if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { + styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); + + // Retains some style properties + each(dom.select('*', o.node), function(el) { + var newStyle = {}, npc = 0, i, sp, sv; + + // Store a subset of the existing styles + if (styleProps) { + for (i = 0; i < styleProps.length; i++) { + sp = styleProps[i]; + sv = dom.getStyle(el, sp); + + if (sv) { + newStyle[sp] = sv; + npc++; + } + } + } + + // Remove all of the existing styles + dom.setAttrib(el, 'style', ''); + + if (styleProps && npc > 0) + dom.setStyles(el, newStyle); // Add back the stored subset of styles + else // Remove empty span tags that do not have class attributes + if (el.nodeName == 'SPAN' && !el.className) + dom.remove(el, true); + }); + } + } + + // Remove all style information or only specifically on WebKit to avoid the style bug on that browser + if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { + each(dom.select('*[style]', o.node), function(el) { + el.removeAttribute('style'); + el.removeAttribute('_mce_style'); + }); + } else { + if (tinymce.isWebKit) { + // We need to compress the styles on WebKit since if you paste it will become + // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles + each(dom.select('*', o.node), function(el) { + el.removeAttribute('_mce_style'); + }); + } + } + }, + + /** + * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. + */ + _convertLists : function(pl, o) { + var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; + + // Convert middot lists into real semantic lists + each(dom.select('p', o.node), function(p) { + var sib, val = '', type, html, idx, parents; + + // Get text node value at beginning of paragraph + for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) + val += sib.nodeValue; + + val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); + + // Detect unordered lists look for bullets + if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val)) + type = 'ol'; + + // Check if node value matches the list pattern: o   + if (type) { + margin = parseFloat(p.style.marginLeft || 0); + + if (margin > lastMargin) + levels.push(margin); + + if (!listElm || type != lastType) { + listElm = dom.create(type); + dom.insertAfter(listElm, p); + } else { + // Nested list element + if (margin > lastMargin) { + listElm = li.appendChild(dom.create(type)); + } else if (margin < lastMargin) { + // Find parent level based on margin value + idx = tinymce.inArray(levels, margin); + parents = dom.getParents(listElm.parentNode, type); + listElm = parents[parents.length - 1 - idx] || listElm; + } + } + + // Remove middot or number spans if they exists + each(dom.select('span', p), function(span) { + var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); + + // Remove span with the middot or the number + if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html)) + dom.remove(span); + else if (/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) + dom.remove(span); + }); + + html = p.innerHTML; + + // Remove middot/list items + if (type == 'ul') + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/, ''); + else + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); + + // Create li and add paragraph data into the new li + li = listElm.appendChild(dom.create('li', 0, html)); + dom.remove(p); + + lastMargin = margin; + lastType = type; + } else + listElm = lastMargin = 0; // End list element + }); + + // Remove any left over makers + html = o.node.innerHTML; + if (html.indexOf('__MCE_ITEM__') != -1) + o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); + }, + + /** + * This method will split the current block parent and insert the contents inside the split position. + * This logic can be improved so text nodes at the start/end remain in the start/end block elements + */ + _insertBlockContent : function(ed, dom, content) { + var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker'; + + function select(n) { + var r; + + if (tinymce.isIE) { + r = ed.getDoc().body.createTextRange(); + r.moveToElementText(n); + r.collapse(false); + r.select(); + } else { + sel.select(n, 1); + sel.collapse(false); + } + } + + // Insert a marker for the caret position + this._insert('', 1); + marker = dom.get(markerId); + parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td'); + + // If it's a parent block but not a table cell + if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) { + // Split parent block + marker = dom.split(parentBlock, marker); + + // Insert nodes before the marker + each(dom.create('div', 0, content).childNodes, function(n) { + last = marker.parentNode.insertBefore(n.cloneNode(true), marker); + }); + + // Move caret after marker + select(last); + } else { + dom.setOuterHTML(marker, content); + sel.select(ed.getBody(), 1); + sel.collapse(0); + } + + // Remove marker if it's left + while (elm = dom.get(markerId)) + dom.remove(elm); + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(ed.getWin()); + y = ed.dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if (y < vp.y || y + elmHeight > vp.y + vp.h) + ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25; + }, + + /** + * Inserts the specified contents at the caret position. + */ + _insert : function(h, skip_undo) { + var ed = this.editor, r = ed.selection.getRng(); + + // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. + if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) + ed.getDoc().execCommand('Delete', false, null); + + // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents + ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo}); + }, + + /** + * Instead of the old plain text method which tried to re-create a paste operation, the + * new approach adds a plain text mode toggle switch that changes the behavior of paste. + * This function is passed the same input that the regular paste plugin produces. + * It performs additional scrubbing and produces (and inserts) the plain text. + * This approach leverages all of the great existing functionality in the paste + * plugin, and requires minimal changes to add the new functionality. + * Speednet - June 2009 + */ + _insertPlainText : function(ed, dom, h) { + var i, len, pos, rpos, node, breakElms, before, after, + w = ed.getWin(), + d = ed.getDoc(), + sel = ed.selection, + is = tinymce.is, + inArray = tinymce.inArray, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"); + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + h = h.replace(v, ""); + else + h = h.replace(v[0], v[1]); + }); + }; + + if ((typeof(h) === "string") && (h.length > 0)) { + if (!entities) + entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(","); + + // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line + if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) { + process([ + /[\n\r]+/g + ]); + } else { + // Otherwise just get rid of carriage returns (only need linefeeds) + process([ + /\r+/g + ]); + } + + process([ + [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them + [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
tags and table rows + [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them + /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags + [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) + [ + // HTML entity + /&(#\d+|[a-z0-9]{1,10});/gi, + + // Replace with actual character + function(e, s) { + if (s.charAt(0) === "#") { + return String.fromCharCode(s.slice(1)); + } + else { + return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " "; + } + } + ], + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars. + [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks + /^\s+|\s+$/g // Trim the front & back + ]); + + h = dom.encode(h); + + // Delete any highlighted text before pasting + if (!sel.isCollapsed()) { + d.execCommand("Delete", false, null); + } + + // Perform default or custom replacements + if (is(rl, "array") || (is(rl, "array"))) { + process(rl); + } + else if (is(rl, "string")) { + process(new RegExp(rl, "gi")); + } + + // Treat paragraphs as specified in the config + if (linebr == "none") { + process([ + [/\n+/g, " "] + ]); + } + else if (linebr == "br") { + process([ + [/\n/g, "
"] + ]); + } + else { + process([ + /^\s+|\s+$/g, + [/\n\n/g, "

"], + [/\n/g, "
"] + ]); + } + + // This next piece of code handles the situation where we're pasting more than one paragraph of plain + // text, and we are pasting the content into the middle of a block node in the editor. The block + // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining). + // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the + // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between + // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and + // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the + // plain text take the same style as the existing paragraph.) + if ((pos = h.indexOf("

")) != -1) { + rpos = h.lastIndexOf("

"); + node = sel.getNode(); + breakElms = []; // Get list of elements to break + + do { + if (node.nodeType == 1) { + // Don't break tables and break at body + if (node.nodeName == "TD" || node.nodeName == "BODY") { + break; + } + + breakElms[breakElms.length] = node; + } + } while (node = node.parentNode); + + // Are we in the middle of a block node? + if (breakElms.length > 0) { + before = h.substring(0, pos); + after = ""; + + for (i=0, len=breakElms.length; i"; + after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">"; + } + + if (pos == rpos) { + h = before + after + h.substring(pos+7); + } + else { + h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7); + } + } + } + + // Insert content at the caret, plus add a marker for repositioning the caret + ed.execCommand("mceInsertRawHTML", false, h + ' '); + + // Reposition the caret to the marker, which was placed immediately after the inserted content. + // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers. + // The second part of the code scrolls the content up if the caret is positioned off-screen. + // This is only necessary for WebKit browsers, but it doesn't hurt to use for all. + window.setTimeout(function() { + var marker = dom.get('_plain_text_marker'), + elm, vp, y, elmHeight; + + sel.select(marker, false); + d.execCommand("Delete", false, null); + marker = null; + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(w); + y = dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) { + d.body.scrollTop = y < vp.y ? y : y - vp.h + 25; + } + }, 0); + } + }, + + /** + * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. + */ + _legacySupport : function() { + var t = this, ed = t.editor; + + // Register command(s) for backwards compatibility + ed.addCommand("mcePasteWord", function() { + ed.windowManager.open({ + file: t.url + "/pasteword.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline: 1 + }); + }); + + if (getParam(ed, "paste_text_use_dialog")) { + ed.addCommand("mcePasteText", function() { + ed.windowManager.open({ + file : t.url + "/pastetext.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline : 1 + }); + }); + } + + // Register button for backwards compatibility + ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); + } + }); + + // Register plugin + tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/entries new file mode 100644 index 0000000..bc4c8d1 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/paste/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +pasteword.js +file + + + + +2010-09-04T08:55:28.000000Z +10f73efbf570633989e2801d0b10de4f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1596 + +pastetext.js +file + + + + +2010-09-04T08:55:28.000000Z +69ba0c60f23785b0c60e56b1919e53fa +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +848 + diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pastetext.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pastetext.js.svn-base new file mode 100644 index 0000000..81b1d6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pastetext.js.svn-base @@ -0,0 +1,36 @@ +tinyMCEPopup.requireLangPack(); + +var PasteTextDialog = { + init : function() { + this.resize(); + }, + + insert : function() { + var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines; + + // Convert linebreaks into paragraphs + if (document.getElementById('linebreaks').checked) { + lines = h.split(/\r?\n/); + if (lines.length > 1) { + h = ''; + tinymce.each(lines, function(row) { + h += '

' + row + '

'; + }); + } + } + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('content'); + + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } +}; + +tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pasteword.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pasteword.js.svn-base new file mode 100644 index 0000000..959bf39 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/js/.svn/text-base/pasteword.js.svn-base @@ -0,0 +1,51 @@ +tinyMCEPopup.requireLangPack(); + +var PasteWordDialog = { + init : function() { + var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = ''; + + // Create iframe + el.innerHTML = ''; + ifr = document.getElementById('iframe'); + doc = ifr.contentWindow.document; + + // Force absolute CSS urls + css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; + css = css.concat(tinymce.explode(ed.settings.content_css) || []); + tinymce.each(css, function(u) { + cssHTML += ''; + }); + + // Write content into iframe + doc.open(); + doc.write('' + cssHTML + ''); + doc.close(); + + doc.designMode = 'on'; + this.resize(); + + window.setTimeout(function() { + ifr.contentWindow.focus(); + }, 10); + }, + + insert : function() { + var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('iframe'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } + } +}; + +tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/js/pastetext.js b/app/plugins/tinymce/webroot/js/plugins/paste/js/pastetext.js new file mode 100644 index 0000000..81b1d6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/js/pastetext.js @@ -0,0 +1,36 @@ +tinyMCEPopup.requireLangPack(); + +var PasteTextDialog = { + init : function() { + this.resize(); + }, + + insert : function() { + var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines; + + // Convert linebreaks into paragraphs + if (document.getElementById('linebreaks').checked) { + lines = h.split(/\r?\n/); + if (lines.length > 1) { + h = ''; + tinymce.each(lines, function(row) { + h += '

' + row + '

'; + }); + } + } + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('content'); + + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } +}; + +tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/js/pasteword.js b/app/plugins/tinymce/webroot/js/plugins/paste/js/pasteword.js new file mode 100644 index 0000000..959bf39 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/js/pasteword.js @@ -0,0 +1,51 @@ +tinyMCEPopup.requireLangPack(); + +var PasteWordDialog = { + init : function() { + var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = ''; + + // Create iframe + el.innerHTML = ''; + ifr = document.getElementById('iframe'); + doc = ifr.contentWindow.document; + + // Force absolute CSS urls + css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; + css = css.concat(tinymce.explode(ed.settings.content_css) || []); + tinymce.each(css, function(u) { + cssHTML += ''; + }); + + // Write content into iframe + doc.open(); + doc.write('' + cssHTML + ''); + doc.close(); + + doc.designMode = 'on'; + this.resize(); + + window.setTimeout(function() { + ifr.contentWindow.focus(); + }, 10); + }, + + insert : function() { + var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('iframe'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } + } +}; + +tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/entries new file mode 100644 index 0000000..69afa24 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/paste/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +e5cf25d2ec374f911c7d009a19fa5474 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +224 + diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..823eb16 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,5 @@ +tinyMCE.addI18n('en.paste_dlg',{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..823eb16 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/langs/en_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('en.paste_dlg',{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/pastetext.htm b/app/plugins/tinymce/webroot/js/plugins/paste/pastetext.htm new file mode 100644 index 0000000..8ccfbb9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/pastetext.htm @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +
+
{#paste.paste_text_desc}
+ +
+ +
+ +
+ +
{#paste_dlg.text_title}
+ + + +
+ + +
+
+ + \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/paste/pasteword.htm b/app/plugins/tinymce/webroot/js/plugins/paste/pasteword.htm new file mode 100644 index 0000000..7731f39 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/paste/pasteword.htm @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
+
{#paste.paste_word_desc}
+ +
{#paste_dlg.word_title}
+ +
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/entries new file mode 100644 index 0000000..53de56c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/entries @@ -0,0 +1,167 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/preview +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +925216b63aabd5adc67d642ca2d04b4a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1051 + +jscripts +dir + +preview.html +file + + + + +2010-09-04T08:55:28.000000Z +bdf3f8f72e85d64bf8bb98d37435aaab +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +613 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +6f9c3234dfdc0f62b713e8771f4ca5dc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1589 + +example.html +file + + + + +2010-09-04T08:55:28.000000Z +f6ae5a579ef4ef3b8648329395e6d0de +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +703 + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..507909c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Preview', { + init : function(ed, url) { + var t = this, css = tinymce.explode(ed.settings.content_css); + + t.editor = ed; + + // Force absolute CSS urls + tinymce.each(css, function(u, k) { + css[k] = ed.documentBaseURI.toAbsolute(u); + }); + + ed.addCommand('mcePreview', function() { + ed.windowManager.open({ + file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"), + width : parseInt(ed.getParam("plugin_preview_width", "550")), + height : parseInt(ed.getParam("plugin_preview_height", "600")), + resizable : "yes", + scrollbars : "yes", + popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"), + inline : ed.getParam("plugin_preview_inline", 1) + }, { + base : ed.documentBaseURI.getURI() + }); + }); + + ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); + }, + + getInfo : function() { + return { + longname : 'Preview', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('preview', tinymce.plugins.Preview); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/example.html.svn-base b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/example.html.svn-base new file mode 100644 index 0000000..4820222 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/example.html.svn-base @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
+
+ +
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/preview.html.svn-base b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/preview.html.svn-base new file mode 100644 index 0000000..c09a7f0 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/.svn/text-base/preview.html.svn-base @@ -0,0 +1,17 @@ + + + + + + +{#preview.preview_desc} + + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Preview', { + init : function(ed, url) { + var t = this, css = tinymce.explode(ed.settings.content_css); + + t.editor = ed; + + // Force absolute CSS urls + tinymce.each(css, function(u, k) { + css[k] = ed.documentBaseURI.toAbsolute(u); + }); + + ed.addCommand('mcePreview', function() { + ed.windowManager.open({ + file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"), + width : parseInt(ed.getParam("plugin_preview_width", "550")), + height : parseInt(ed.getParam("plugin_preview_height", "600")), + resizable : "yes", + scrollbars : "yes", + popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"), + inline : ed.getParam("plugin_preview_inline", 1) + }, { + base : ed.documentBaseURI.getURI() + }); + }); + + ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); + }, + + getInfo : function() { + return { + longname : 'Preview', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('preview', tinymce.plugins.Preview); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/example.html b/app/plugins/tinymce/webroot/js/plugins/preview/example.html new file mode 100644 index 0000000..4820222 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
+
+ +
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/entries new file mode 100644 index 0000000..243ff3a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/preview/jscripts +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +embed.js +file + + + + +2010-09-04T08:55:28.000000Z +5df3783492b848adde42124a1e9cf383 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1865 + diff --git a/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/text-base/embed.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/text-base/embed.js.svn-base new file mode 100644 index 0000000..6fe25de --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/preview/jscripts/.svn/text-base/embed.js.svn-base @@ -0,0 +1,73 @@ +/** + * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. + */ + +function writeFlash(p) { + writeEmbed( + 'D27CDB6E-AE6D-11cf-96B8-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'application/x-shockwave-flash', + p + ); +} + +function writeShockWave(p) { + writeEmbed( + '166B1BCA-3F9C-11CF-8075-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', + 'application/x-director', + p + ); +} + +function writeQuickTime(p) { + writeEmbed( + '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', + 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', + 'video/quicktime', + p + ); +} + +function writeRealMedia(p) { + writeEmbed( + 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'audio/x-pn-realaudio-plugin', + p + ); +} + +function writeWindowsMedia(p) { + p.url = p.src; + writeEmbed( + '6BF52A52-394A-11D3-B153-00C04F79FAA6', + 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', + 'application/x-mplayer2', + p + ); +} + +function writeEmbed(cls, cb, mt, p) { + var h = '', n; + + h += ''; + + h += ''; + + h += ' + + + + + +{#preview.preview_desc} + + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/print/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/print/.svn/entries new file mode 100644 index 0000000..3d2025e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/print/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/print +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +53eb1da78f727ee8337671fb86354c17 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +492 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +076722d31a5b000bac61bceaed6e5a66 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +847 + diff --git a/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..47e666a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/print/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,34 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Print', { + init : function(ed, url) { + ed.addCommand('mcePrint', function() { + ed.getWin().print(); + }); + + ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); + }, + + getInfo : function() { + return { + longname : 'Print', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('print', tinymce.plugins.Print); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..47e666a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/print/editor_plugin_src.js @@ -0,0 +1,34 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Print', { + init : function(ed, url) { + ed.addCommand('mcePrint', function() { + ed.getWin().print(); + }); + + ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); + }, + + getInfo : function() { + return { + longname : 'Print', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('print', tinymce.plugins.Print); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/save/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/save/.svn/entries new file mode 100644 index 0000000..d03273c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/save/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/save +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +307a0743c68c4e4aff005f13027f296f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1569 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +54c757ce6c730afc71d6ac0ecd76e6dd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2429 + diff --git a/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..5ab6491 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/save/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,101 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Save', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceSave', t._save, t); + ed.addCommand('mceCancel', t._cancel, t); + + // Register buttons + ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); + ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); + + ed.onNodeChange.add(t._nodeChange, t); + ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); + }, + + getInfo : function() { + return { + longname : 'Save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var ed = this.editor; + + if (ed.getParam('save_enablewhendirty')) { + cm.setDisabled('save', !ed.isDirty()); + cm.setDisabled('cancel', !ed.isDirty()); + } + }, + + // Private methods + + _save : function() { + var ed = this.editor, formObj, os, i, elementId; + + formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); + + if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) + return; + + tinyMCE.triggerSave(); + + // Use callback instead + if (os = ed.getParam("save_onsavecallback")) { + if (ed.execCallback('save_onsavecallback', ed)) { + ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); + ed.nodeChanged(); + } + + return; + } + + if (formObj) { + ed.isNotDirty = true; + + if (formObj.onsubmit == null || formObj.onsubmit() != false) + formObj.submit(); + + ed.nodeChanged(); + } else + ed.windowManager.alert("Error: No form element found."); + }, + + _cancel : function() { + var ed = this.editor, os, h = tinymce.trim(ed.startContent); + + // Use callback instead + if (os = ed.getParam("save_oncancelcallback")) { + ed.execCallback('save_oncancelcallback', ed); + return; + } + + ed.setContent(h); + ed.undoManager.clear(); + ed.nodeChanged(); + } + }); + + // Register plugin + tinymce.PluginManager.add('save', tinymce.plugins.Save); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..5ab6491 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/save/editor_plugin_src.js @@ -0,0 +1,101 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Save', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceSave', t._save, t); + ed.addCommand('mceCancel', t._cancel, t); + + // Register buttons + ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); + ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); + + ed.onNodeChange.add(t._nodeChange, t); + ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); + }, + + getInfo : function() { + return { + longname : 'Save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var ed = this.editor; + + if (ed.getParam('save_enablewhendirty')) { + cm.setDisabled('save', !ed.isDirty()); + cm.setDisabled('cancel', !ed.isDirty()); + } + }, + + // Private methods + + _save : function() { + var ed = this.editor, formObj, os, i, elementId; + + formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); + + if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) + return; + + tinyMCE.triggerSave(); + + // Use callback instead + if (os = ed.getParam("save_onsavecallback")) { + if (ed.execCallback('save_onsavecallback', ed)) { + ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); + ed.nodeChanged(); + } + + return; + } + + if (formObj) { + ed.isNotDirty = true; + + if (formObj.onsubmit == null || formObj.onsubmit() != false) + formObj.submit(); + + ed.nodeChanged(); + } else + ed.windowManager.alert("Error: No form element found."); + }, + + _cancel : function() { + var ed = this.editor, os, h = tinymce.trim(ed.startContent); + + // Use callback instead + if (os = ed.getParam("save_oncancelcallback")) { + ed.execCallback('save_oncancelcallback', ed); + return; + } + + ed.setContent(h); + ed.undoManager.clear(); + ed.nodeChanged(); + } + }); + + // Register plugin + tinymce.PluginManager.add('save', tinymce.plugins.Save); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/entries new file mode 100644 index 0000000..87e50ac --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/entries @@ -0,0 +1,139 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/searchreplace +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +53c400709c76c824b9fe05bf94656fbc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1031 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +752ada1277255e8eed24c46535ac85c7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1587 + +css +dir + +searchreplace.htm +file + + + + +2010-09-04T08:55:28.000000Z +5d318ce35c1734bf164f6dfa0f8eccf7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4685 + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..cd9c985 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..e9b3ee8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,57 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.SearchReplacePlugin', { + init : function(ed, url) { + function open(m) { + ed.windowManager.open({ + file : url + '/searchreplace.htm', + width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), + height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), + inline : 1, + auto_focus : 0 + }, { + mode : m, + search_string : ed.selection.getContent({format : 'text'}), + plugin_url : url + }); + }; + + // Register commands + ed.addCommand('mceSearch', function() { + open('search'); + }); + + ed.addCommand('mceReplace', function() { + open('replace'); + }); + + // Register buttons + ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); + ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); + + ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); + }, + + getInfo : function() { + return { + longname : 'Search/Replace', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/searchreplace.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/searchreplace.htm.svn-base new file mode 100644 index 0000000..243a4bc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/.svn/text-base/searchreplace.htm.svn-base @@ -0,0 +1,99 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ +
+ + + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/entries new file mode 100644 index 0000000..444cee3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/searchreplace/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +searchreplace.css +file + + + + +2010-09-04T08:55:28.000000Z +d4f8026713b4f1394d9977196a9de1bd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +170 + diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/text-base/searchreplace.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/text-base/searchreplace.css.svn-base new file mode 100644 index 0000000..3e2eaf3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/.svn/text-base/searchreplace.css.svn-base @@ -0,0 +1,6 @@ +.panel_wrapper {height:85px;} +.panel_wrapper div.current {height:85px;} + +/* IE */ +* html .panel_wrapper {height:100px;} +* html .panel_wrapper div.current {height:100px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/searchreplace.css b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..3e2eaf3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/css/searchreplace.css @@ -0,0 +1,6 @@ +.panel_wrapper {height:85px;} +.panel_wrapper div.current {height:85px;} + +/* IE */ +* html .panel_wrapper {height:100px;} +* html .panel_wrapper div.current {height:100px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..cd9c985 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..e9b3ee8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/editor_plugin_src.js @@ -0,0 +1,57 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.SearchReplacePlugin', { + init : function(ed, url) { + function open(m) { + ed.windowManager.open({ + file : url + '/searchreplace.htm', + width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), + height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), + inline : 1, + auto_focus : 0 + }, { + mode : m, + search_string : ed.selection.getContent({format : 'text'}), + plugin_url : url + }); + }; + + // Register commands + ed.addCommand('mceSearch', function() { + open('search'); + }); + + ed.addCommand('mceReplace', function() { + open('replace'); + }); + + // Register buttons + ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); + ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); + + ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); + }, + + getInfo : function() { + return { + longname : 'Search/Replace', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/entries new file mode 100644 index 0000000..e23348c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/searchreplace/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +searchreplace.js +file + + + + +2010-09-04T08:55:28.000000Z +44980097c907e6dac3fa244927d277fa +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3233 + diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/text-base/searchreplace.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/text-base/searchreplace.js.svn-base new file mode 100644 index 0000000..4cc0f40 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/.svn/text-base/searchreplace.js.svn-base @@ -0,0 +1,130 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + this.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + }, + + switchMode : function(m) { + var f, lm = this.lastMode; + + if (lm != m) { + f = document.forms[0]; + + if (lm) { + f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; + f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; + f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; + f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; + } + + mcTabs.displayTab(m + '_tab', m + '_panel'); + document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; + document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; + this.lastMode = m; + } + }, + + searchNext : function(a) { + var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; + + // Get input + f = document.forms[0]; + s = f[m + '_panel_searchstring'].value; + b = f[m + '_panel_backwardsu'].checked; + ca = f[m + '_panel_casesensitivebox'].checked; + rs = f['replace_panel_replacestring'].value; + + if (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + if (tinymce.isIE) + ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE + else + ed.getDoc().execCommand('InsertHTML', false, rs); + }; + + // IE flags + if (ca) + fl = fl | 4; + + switch (a) { + case 'all': + // Move caret to beginning of text + ed.execCommand('SelectAll'); + ed.selection.collapse(true); + + if (tinymce.isIE) { + while (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + replace(); + fo = 1; + + if (b) { + r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } + } + + tinyMCEPopup.storeSelection(); + } else { + while (w.find(s, ca, b, false, false, false, false)) { + replace(); + fo = 1; + } + } + + if (fo) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); + else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + return; + + case 'current': + if (!ed.selection.isCollapsed()) + replace(); + + break; + } + + se.collapse(b); + r = se.getRng(); + + // Whats the point + if (!s) + return; + + if (tinymce.isIE) { + if (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + } else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + tinyMCEPopup.storeSelection(); + } else { + if (!w.find(s, ca, b, false, false, false, false)) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + else + fix(); + } + } +}; + +tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/searchreplace.js b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..4cc0f40 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/js/searchreplace.js @@ -0,0 +1,130 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + this.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + }, + + switchMode : function(m) { + var f, lm = this.lastMode; + + if (lm != m) { + f = document.forms[0]; + + if (lm) { + f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; + f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; + f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; + f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; + } + + mcTabs.displayTab(m + '_tab', m + '_panel'); + document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; + document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; + this.lastMode = m; + } + }, + + searchNext : function(a) { + var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; + + // Get input + f = document.forms[0]; + s = f[m + '_panel_searchstring'].value; + b = f[m + '_panel_backwardsu'].checked; + ca = f[m + '_panel_casesensitivebox'].checked; + rs = f['replace_panel_replacestring'].value; + + if (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + if (tinymce.isIE) + ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE + else + ed.getDoc().execCommand('InsertHTML', false, rs); + }; + + // IE flags + if (ca) + fl = fl | 4; + + switch (a) { + case 'all': + // Move caret to beginning of text + ed.execCommand('SelectAll'); + ed.selection.collapse(true); + + if (tinymce.isIE) { + while (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + replace(); + fo = 1; + + if (b) { + r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } + } + + tinyMCEPopup.storeSelection(); + } else { + while (w.find(s, ca, b, false, false, false, false)) { + replace(); + fo = 1; + } + } + + if (fo) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); + else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + return; + + case 'current': + if (!ed.selection.isCollapsed()) + replace(); + + break; + } + + se.collapse(b); + r = se.getRng(); + + // Whats the point + if (!s) + return; + + if (tinymce.isIE) { + if (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + } else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + tinyMCEPopup.storeSelection(); + } else { + if (!w.find(s, ca, b, false, false, false, false)) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + else + fix(); + } + } +}; + +tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/entries new file mode 100644 index 0000000..4566390 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +8d4507bdc22c3d39fa0b1537172c8af3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +454 + diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..3dd3453 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,16 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{ +searchnext_desc:"Find again", +notfound:"The search has been completed. The search string could not be found.", +search_title:"Find", +replace_title:"Find/Replace", +allreplaced:"All occurrences of the search string were replaced.", +findwhat:"Find what", +replacewith:"Replace with", +direction:"Direction", +up:"Up", +down:"Down", +mcase:"Match case", +findnext:"Find next", +replace:"Replace", +replaceall:"Replace all" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..3dd3453 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/langs/en_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{ +searchnext_desc:"Find again", +notfound:"The search has been completed. The search string could not be found.", +search_title:"Find", +replace_title:"Find/Replace", +allreplaced:"All occurrences of the search string were replaced.", +findwhat:"Find what", +replacewith:"Replace with", +direction:"Direction", +up:"Up", +down:"Down", +mcase:"Match case", +findnext:"Find next", +replace:"Replace", +replaceall:"Replace all" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/searchreplace/searchreplace.htm b/app/plugins/tinymce/webroot/js/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..243a4bc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,99 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ +
+ + + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/entries new file mode 100644 index 0000000..f89aaee --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/entries @@ -0,0 +1,102 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/spellchecker +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +a6caa5803d9a816cf69b6daca27cb6de +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6697 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +8acdff9df2896fc33b04b1a6177bce56 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +10530 + +css +dir + +img +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..a9ec3b9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(f+"/css/content.css")}});e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}\u201d\u201c');for(d=0;d$1$2');q=q.replace(g,'$1$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..bd501d3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,417 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.SpellcheckerPlugin', { + getInfo : function() { + return { + longname : 'Spellchecker', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + init : function(ed, url) { + var t = this, cm; + + t.url = url; + t.editor = ed; + t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); + + if (t.rpcUrl == '{backend}') { + // Sniff if the browser supports native spellchecking (Don't know of a better way) + if (tinymce.isIE) + return; + + t.hasSupport = true; + + // Disable the context menu when spellchecking is active + ed.onContextMenu.addToTop(function(ed, e) { + if (t.active) + return false; + }); + } + + // Register commands + ed.addCommand('mceSpellCheck', function() { + if (t.rpcUrl == '{backend}') { + // Enable/disable native spellchecker + t.editor.getBody().spellcheck = t.active = !t.active; + return; + } + + if (!t.active) { + ed.setProgressState(1); + t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { + if (r.length > 0) { + t.active = 1; + t._markWords(r); + ed.setProgressState(0); + ed.nodeChanged(); + } else { + ed.setProgressState(0); + + if (ed.getParam('spellchecker_report_no_misspellings', true)) + ed.windowManager.alert('spellchecker.no_mpell'); + } + }); + } else + t._done(); + }); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(url + '/css/content.css'); + }); + + ed.onClick.add(t._showMenu, t); + ed.onContextMenu.add(t._showMenu, t); + ed.onBeforeGetContent.add(function() { + if (t.active) + t._removeWords(); + }); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('spellchecker', t.active); + }); + + ed.onSetContent.add(function() { + t._done(); + }); + + ed.onBeforeGetContent.add(function() { + t._done(); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd) { + if (cmd == 'mceFullScreen') + t._done(); + }); + + // Find selected language + t.languages = {}; + each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { + if (k.indexOf('+') === 0) { + k = k.substring(1); + t.selectedLang = v; + } + + t.languages[k] = v; + }); + }, + + createControl : function(n, cm) { + var t = this, c, ed = t.editor; + + if (n == 'spellchecker') { + // Use basic button if we use the native spellchecker + if (t.rpcUrl == '{backend}') { + // Create simple toggle button if we have native support + if (t.hasSupport) + c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + return c; + } + + c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + c.onRenderMenu.add(function(c, m) { + m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(t.languages, function(v, k) { + var o = {icon : 1}, mi; + + o.onclick = function() { + mi.setSelected(1); + t.selectedItem.setSelected(0); + t.selectedItem = mi; + t.selectedLang = v; + }; + + o.title = k; + mi = m.add(o); + mi.setSelected(v == t.selectedLang); + + if (v == t.selectedLang) + t.selectedItem = mi; + }) + }); + + return c; + } + }, + + // Internal functions + + _walk : function(n, f) { + var d = this.editor.getDoc(), w; + + if (d.createTreeWalker) { + w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); + + while ((n = w.nextNode()) != null) + f.call(this, n); + } else + tinymce.walk(n, f, 'childNodes'); + }, + + _getSeparators : function() { + var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c'); + + // Build word separator regexp + for (i=0; i$1$2'); + v = v.replace(r3, '$1$2'); + + dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n); + } + } + }); + + se.moveToBookmark(b); + }, + + _showMenu : function(ed, e) { + var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; + + e = 0; // Fixes IE memory leak + + if (!m) { + p1 = DOM.getPos(ed.getContentAreaContainer()); + //p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('spellcheckermenu', { + offset_x : p1.x, + offset_y : p1.y, + 'class' : 'mceNoIcons' + }); + + t._menu = m; + } + + if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { + m.removeAll(); + m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { + var ignoreRpc; + + m.removeAll(); + + if (r.length > 0) { + m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(r, function(v) { + m.add({title : v, onclick : function() { + dom.replace(ed.getDoc().createTextNode(v), wordSpan); + t._checkDone(); + }}); + }); + + m.addSeparator(); + } else + m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; + + t._removeWords(dom.decode(word)); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + + if (t.editor.getParam("spellchecker_enable_learn_rpc")) { + m.add({ + title : 'spellchecker.learn_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + ed.setProgressState(1); + t._sendRPC('learnWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + }); + } + + m.update(); + }); + + ed.selection.select(wordSpan); + p1 = dom.getPos(wordSpan); + m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); + + return tinymce.dom.Event.cancel(e); + } else + m.hideMenu(); + }, + + _checkDone : function() { + var t = this, ed = t.editor, dom = ed.dom, o; + + each(dom.select('span'), function(n) { + if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { + o = true; + return false; + } + }); + + if (!o) + t._done(); + }, + + _done : function() { + var t = this, la = t.active; + + if (t.active) { + t.active = 0; + t._removeWords(); + + if (t._menu) + t._menu.hideMenu(); + + if (la) + t.editor.nodeChanged(); + } + }, + + _sendRPC : function(m, p, cb) { + var t = this; + + JSONRequest.sendRPC({ + url : t.rpcUrl, + method : m, + params : p, + success : cb, + error : function(e, x) { + t.editor.setProgressState(0); + t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); + } + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/entries new file mode 100644 index 0000000..6918d8c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/spellchecker/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +content.css +file + + + + +2010-09-04T08:55:28.000000Z +d236d4333281b4eae7a1e2b514b691f4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +97 + diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/text-base/content.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/text-base/content.css.svn-base new file mode 100644 index 0000000..656ce1e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/.svn/text-base/content.css.svn-base @@ -0,0 +1 @@ +.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/content.css b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..656ce1e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/css/content.css @@ -0,0 +1 @@ +.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..a9ec3b9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(f+"/css/content.css")}});e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}\u201d\u201c');for(d=0;d$1$2');q=q.replace(g,'$1$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..bd501d3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,417 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.SpellcheckerPlugin', { + getInfo : function() { + return { + longname : 'Spellchecker', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + init : function(ed, url) { + var t = this, cm; + + t.url = url; + t.editor = ed; + t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); + + if (t.rpcUrl == '{backend}') { + // Sniff if the browser supports native spellchecking (Don't know of a better way) + if (tinymce.isIE) + return; + + t.hasSupport = true; + + // Disable the context menu when spellchecking is active + ed.onContextMenu.addToTop(function(ed, e) { + if (t.active) + return false; + }); + } + + // Register commands + ed.addCommand('mceSpellCheck', function() { + if (t.rpcUrl == '{backend}') { + // Enable/disable native spellchecker + t.editor.getBody().spellcheck = t.active = !t.active; + return; + } + + if (!t.active) { + ed.setProgressState(1); + t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { + if (r.length > 0) { + t.active = 1; + t._markWords(r); + ed.setProgressState(0); + ed.nodeChanged(); + } else { + ed.setProgressState(0); + + if (ed.getParam('spellchecker_report_no_misspellings', true)) + ed.windowManager.alert('spellchecker.no_mpell'); + } + }); + } else + t._done(); + }); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(url + '/css/content.css'); + }); + + ed.onClick.add(t._showMenu, t); + ed.onContextMenu.add(t._showMenu, t); + ed.onBeforeGetContent.add(function() { + if (t.active) + t._removeWords(); + }); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('spellchecker', t.active); + }); + + ed.onSetContent.add(function() { + t._done(); + }); + + ed.onBeforeGetContent.add(function() { + t._done(); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd) { + if (cmd == 'mceFullScreen') + t._done(); + }); + + // Find selected language + t.languages = {}; + each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { + if (k.indexOf('+') === 0) { + k = k.substring(1); + t.selectedLang = v; + } + + t.languages[k] = v; + }); + }, + + createControl : function(n, cm) { + var t = this, c, ed = t.editor; + + if (n == 'spellchecker') { + // Use basic button if we use the native spellchecker + if (t.rpcUrl == '{backend}') { + // Create simple toggle button if we have native support + if (t.hasSupport) + c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + return c; + } + + c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + c.onRenderMenu.add(function(c, m) { + m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(t.languages, function(v, k) { + var o = {icon : 1}, mi; + + o.onclick = function() { + mi.setSelected(1); + t.selectedItem.setSelected(0); + t.selectedItem = mi; + t.selectedLang = v; + }; + + o.title = k; + mi = m.add(o); + mi.setSelected(v == t.selectedLang); + + if (v == t.selectedLang) + t.selectedItem = mi; + }) + }); + + return c; + } + }, + + // Internal functions + + _walk : function(n, f) { + var d = this.editor.getDoc(), w; + + if (d.createTreeWalker) { + w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); + + while ((n = w.nextNode()) != null) + f.call(this, n); + } else + tinymce.walk(n, f, 'childNodes'); + }, + + _getSeparators : function() { + var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c'); + + // Build word separator regexp + for (i=0; i$1$2'); + v = v.replace(r3, '$1$2'); + + dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n); + } + } + }); + + se.moveToBookmark(b); + }, + + _showMenu : function(ed, e) { + var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; + + e = 0; // Fixes IE memory leak + + if (!m) { + p1 = DOM.getPos(ed.getContentAreaContainer()); + //p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('spellcheckermenu', { + offset_x : p1.x, + offset_y : p1.y, + 'class' : 'mceNoIcons' + }); + + t._menu = m; + } + + if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { + m.removeAll(); + m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { + var ignoreRpc; + + m.removeAll(); + + if (r.length > 0) { + m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(r, function(v) { + m.add({title : v, onclick : function() { + dom.replace(ed.getDoc().createTextNode(v), wordSpan); + t._checkDone(); + }}); + }); + + m.addSeparator(); + } else + m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; + + t._removeWords(dom.decode(word)); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + + if (t.editor.getParam("spellchecker_enable_learn_rpc")) { + m.add({ + title : 'spellchecker.learn_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + ed.setProgressState(1); + t._sendRPC('learnWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + }); + } + + m.update(); + }); + + ed.selection.select(wordSpan); + p1 = dom.getPos(wordSpan); + m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); + + return tinymce.dom.Event.cancel(e); + } else + m.hideMenu(); + }, + + _checkDone : function() { + var t = this, ed = t.editor, dom = ed.dom, o; + + each(dom.select('span'), function(n) { + if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { + o = true; + return false; + } + }); + + if (!o) + t._done(); + }, + + _done : function() { + var t = this, la = t.active; + + if (t.active) { + t.active = 0; + t._removeWords(); + + if (t._menu) + t._menu.hideMenu(); + + if (la) + t.editor.nodeChanged(); + } + }, + + _sendRPC : function(m, p, cb) { + var t = this; + + JSONRequest.sendRPC({ + url : t.rpcUrl, + method : m, + params : p, + success : cb, + error : function(e, x) { + t.editor.setProgressState(0); + t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); + } + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/entries new file mode 100644 index 0000000..dc980ee --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/spellchecker/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +wline.gif +file + + + + +2010-09-04T08:55:28.000000Z +c136c9f8e00718a98947a21d8adbcc56 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +46 + diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/prop-base/wline.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/prop-base/wline.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/prop-base/wline.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/text-base/wline.gif.svn-base b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/.svn/text-base/wline.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7d0a4dbca03cc13177a359a5f175dda819fdf464 GIT binary patch literal 46 ycmZ?wbhEHbWMN=tXkcXcqowu#|9{1wEQ|~cj0`#qKmd|qU}ANVOOs?}um%7FLkRf* literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/wline.gif b/app/plugins/tinymce/webroot/js/plugins/spellchecker/img/wline.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d0a4dbca03cc13177a359a5f175dda819fdf464 GIT binary patch literal 46 ycmZ?wbhEHbWMN=tXkcXcqowu#|9{1wEQ|~cj0`#qKmd|qU}ANVOOs?}um%7FLkRf* literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/plugins/style/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/style/.svn/entries new file mode 100644 index 0000000..2420801 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/.svn/entries @@ -0,0 +1,139 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/style +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +ac96cb192e649f92a42b9ce339092008 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +938 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +29ccef7224dc5208ebb456b426717a4a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1484 + +css +dir + +props.htm +file + + + + +2010-09-04T08:55:28.000000Z +dde0f961dd8065e3019d181a0586a679 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +27504 + +js +dir + diff --git a/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..cab2153 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..c09d5e8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,55 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.StylePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceStyleProps', function() { + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 320 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + style_text : ed.selection.getNode().style.cssText + }); + }); + + ed.addCommand('mceSetElementStyle', function(ui, v) { + if (e = ed.selection.getNode()) { + ed.dom.setAttrib(e, 'style', v); + ed.execCommand('mceRepaint'); + } + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setDisabled('styleprops', n.nodeName === 'BODY'); + }); + + // Register buttons + ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); + }, + + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/props.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/props.htm.svn-base new file mode 100644 index 0000000..549ed04 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/.svn/text-base/props.htm.svn-base @@ -0,0 +1,723 @@ + + + + {#style_dlg.title} + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
 
+
+ +
+ + + +
+ + + + + + +
+ +  
+
+ +
+ + + + + +
 
+
{#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
 
+
+ + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + +
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+
+
+ {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
      
{#style_dlg.top}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.right}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.bottom}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.left}   + + + + + + +
 
+
  + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
   
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+ +
+
+ {#style_dlg.placement} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
 
+
{#style_dlg.right} + + + + + + +
 
+
{#style_dlg.bottom} + + + + + + +
 
+
{#style_dlg.left} + + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.clip} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
 
+
{#style_dlg.right} + + + + + + +
 
+
{#style_dlg.bottom} + + + + + + +
 
+
{#style_dlg.left} + + + + + + +
 
+
+
+
+
+
+
+ +
+ + + +
+
+ +
+
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/entries new file mode 100644 index 0000000..d11ffe9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/style/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +props.css +file + + + + +2010-09-04T08:55:28.000000Z +d1a2f4faed2da4947a309f32d912968a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +846 + diff --git a/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/text-base/props.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/text-base/props.css.svn-base new file mode 100644 index 0000000..5550b09 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/css/.svn/text-base/props.css.svn-base @@ -0,0 +1,13 @@ +#text_font {width:250px;} +#text_size {width:70px;} +.mceAddSelectValue {background:#DDD;} +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} +.panel_wrapper div.current {padding-top:10px;height:230px;} +.delim {border-left:1px solid gray;} +.tdelim {border-bottom:1px solid gray;} +#block_display {width:145px;} +#list_type {width:115px;} +.disabled {background:#EEE;} diff --git a/app/plugins/tinymce/webroot/js/plugins/style/css/props.css b/app/plugins/tinymce/webroot/js/plugins/style/css/props.css new file mode 100644 index 0000000..5550b09 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/css/props.css @@ -0,0 +1,13 @@ +#text_font {width:250px;} +#text_size {width:70px;} +.mceAddSelectValue {background:#DDD;} +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} +.panel_wrapper div.current {padding-top:10px;height:230px;} +.delim {border-left:1px solid gray;} +.tdelim {border-bottom:1px solid gray;} +#block_display {width:145px;} +#list_type {width:115px;} +.disabled {background:#EEE;} diff --git a/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin.js new file mode 100644 index 0000000..cab2153 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..c09d5e8 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/editor_plugin_src.js @@ -0,0 +1,55 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.StylePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceStyleProps', function() { + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 320 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + style_text : ed.selection.getNode().style.cssText + }); + }); + + ed.addCommand('mceSetElementStyle', function(ui, v) { + if (e = ed.selection.getNode()) { + ed.dom.setAttrib(e, 'style', v); + ed.execCommand('mceRepaint'); + } + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setDisabled('styleprops', n.nodeName === 'BODY'); + }); + + // Register buttons + ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); + }, + + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/entries new file mode 100644 index 0000000..97f1fcb --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/style/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +props.js +file + + + + +2010-09-04T08:55:28.000000Z +d10d9e8124e8e6eb6424fb937f6f3cb9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +29841 + diff --git a/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/text-base/props.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/text-base/props.js.svn-base new file mode 100644 index 0000000..1e73806 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/js/.svn/text-base/props.js.svn-base @@ -0,0 +1,641 @@ +tinyMCEPopup.requireLangPack(); + +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function init() { + var ce = document.getElementById('container'), h; + + ce.style.cssText = tinyMCEPopup.getWindowArg('style_text'); + + h = getBrowserHTML('background_image_browser','background_image','image','advimage'); + document.getElementById("background_image_browser").innerHTML = h; + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + + // Setup background fields + + f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + + if (tinymce.isGecko) + selectByValue(f, 'box_float', ce.style.cssFloat, true, true); + else + selectByValue(f, 'box_float', ce.style.styleFloat, true, true); + + selectByValue(f, 'box_clear', ce.style.clear, true, true); + + setupBox(f, ce, 'box_padding', 'padding', ''); + setupBox(f, ce, 'box_margin', 'margin', ''); + + // Setup border fields + + setupBox(f, ce, 'border_style', 'border', 'Style'); + setupBox(f, ce, 'border_width', 'border', 'Width'); + setupBox(f, ce, 'border_color', 'border', 'Color'); + + updateColor('border_color_top_pick', 'border_color_top'); + updateColor('border_color_right_pick', 'border_color_right'); + updateColor('border_color_bottom_pick', 'border_color_bottom'); + updateColor('border_color_left_pick', 'border_color_left'); + + f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); + f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); + f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); + f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); + + // Setup list fields + + selectByValue(f, 'list_type', ce.style.listStyleType, true, true); + selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); + f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + // Setup box fields + + selectByValue(f, 'positioning_type', ce.style.position, true, true); + selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); + selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); + f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; + + f.positioning_width.value = getNum(ce.style.width); + selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); + + f.positioning_height.value = getNum(ce.style.height); + selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); + + setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); + + s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); + s = s.replace(/,/g, ' '); + + if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = getNum(getVal(s, 1)); + selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); + f.positioning_clip_bottom.value = getNum(getVal(s, 2)); + selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); + f.positioning_clip_left.value = getNum(getVal(s, 3)); + selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); + } else { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; + } + +// setupBox(f, ce, '', 'border', 'Color'); +} + +function getMeasurement(s) { + return s.replace(/^([0-9.]+)(.*)$/, "$2"); +} + +function getNum(s) { + if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) + return s.replace(/[^0-9.]/g, ''); + + return s; +} + +function inStr(s, n) { + return new RegExp(n, 'gi').test(s); +} + +function getVal(s, i) { + var a = s.split(' '); + + if (a.length > 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = [], i, x; + + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + + if (tinymce.isGecko) + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = ce.style.cssText; +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/style/js/props.js b/app/plugins/tinymce/webroot/js/plugins/style/js/props.js new file mode 100644 index 0000000..1e73806 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/js/props.js @@ -0,0 +1,641 @@ +tinyMCEPopup.requireLangPack(); + +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function init() { + var ce = document.getElementById('container'), h; + + ce.style.cssText = tinyMCEPopup.getWindowArg('style_text'); + + h = getBrowserHTML('background_image_browser','background_image','image','advimage'); + document.getElementById("background_image_browser").innerHTML = h; + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + + // Setup background fields + + f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + + if (tinymce.isGecko) + selectByValue(f, 'box_float', ce.style.cssFloat, true, true); + else + selectByValue(f, 'box_float', ce.style.styleFloat, true, true); + + selectByValue(f, 'box_clear', ce.style.clear, true, true); + + setupBox(f, ce, 'box_padding', 'padding', ''); + setupBox(f, ce, 'box_margin', 'margin', ''); + + // Setup border fields + + setupBox(f, ce, 'border_style', 'border', 'Style'); + setupBox(f, ce, 'border_width', 'border', 'Width'); + setupBox(f, ce, 'border_color', 'border', 'Color'); + + updateColor('border_color_top_pick', 'border_color_top'); + updateColor('border_color_right_pick', 'border_color_right'); + updateColor('border_color_bottom_pick', 'border_color_bottom'); + updateColor('border_color_left_pick', 'border_color_left'); + + f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); + f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); + f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); + f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); + + // Setup list fields + + selectByValue(f, 'list_type', ce.style.listStyleType, true, true); + selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); + f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + // Setup box fields + + selectByValue(f, 'positioning_type', ce.style.position, true, true); + selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); + selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); + f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; + + f.positioning_width.value = getNum(ce.style.width); + selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); + + f.positioning_height.value = getNum(ce.style.height); + selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); + + setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); + + s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); + s = s.replace(/,/g, ' '); + + if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = getNum(getVal(s, 1)); + selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); + f.positioning_clip_bottom.value = getNum(getVal(s, 2)); + selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); + f.positioning_clip_left.value = getNum(getVal(s, 3)); + selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); + } else { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; + } + +// setupBox(f, ce, '', 'border', 'Color'); +} + +function getMeasurement(s) { + return s.replace(/^([0-9.]+)(.*)$/, "$2"); +} + +function getNum(s) { + if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) + return s.replace(/[^0-9.]/g, ''); + + return s; +} + +function inStr(s, n) { + return new RegExp(n, 'gi').test(s); +} + +function getVal(s, i) { + var a = s.split(' '); + + if (a.length > 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = [], i, x; + + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + + if (tinymce.isGecko) + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = ce.style.cssText; +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/entries new file mode 100644 index 0000000..7fbdea5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/style/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +62b2b463ed9cf072aa8e7d09428287aa +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1469 + diff --git a/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..d9d7762 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,63 @@ +tinyMCE.addI18n('en.style_dlg',{ +title:"Edit CSS Style", +apply:"Apply", +text_tab:"Text", +background_tab:"Background", +block_tab:"Block", +box_tab:"Box", +border_tab:"Border", +list_tab:"List", +positioning_tab:"Positioning", +text_props:"Text", +text_font:"Font", +text_size:"Size", +text_weight:"Weight", +text_style:"Style", +text_variant:"Variant", +text_lineheight:"Line height", +text_case:"Case", +text_color:"Color", +text_decoration:"Decoration", +text_overline:"overline", +text_underline:"underline", +text_striketrough:"strikethrough", +text_blink:"blink", +text_none:"none", +background_color:"Background color", +background_image:"Background image", +background_repeat:"Repeat", +background_attachment:"Attachment", +background_hpos:"Horizontal position", +background_vpos:"Vertical position", +block_wordspacing:"Word spacing", +block_letterspacing:"Letter spacing", +block_vertical_alignment:"Vertical alignment", +block_text_align:"Text align", +block_text_indent:"Text indent", +block_whitespace:"Whitespace", +block_display:"Display", +box_width:"Width", +box_height:"Height", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"Same for all", +top:"Top", +right:"Right", +bottom:"Bottom", +left:"Left", +margin:"Margin", +style:"Style", +width:"Width", +height:"Height", +color:"Color", +list_type:"Type", +bullet_image:"Bullet image", +position:"Position", +positioning_type:"Type", +visibility:"Visibility", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..d9d7762 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/langs/en_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('en.style_dlg',{ +title:"Edit CSS Style", +apply:"Apply", +text_tab:"Text", +background_tab:"Background", +block_tab:"Block", +box_tab:"Box", +border_tab:"Border", +list_tab:"List", +positioning_tab:"Positioning", +text_props:"Text", +text_font:"Font", +text_size:"Size", +text_weight:"Weight", +text_style:"Style", +text_variant:"Variant", +text_lineheight:"Line height", +text_case:"Case", +text_color:"Color", +text_decoration:"Decoration", +text_overline:"overline", +text_underline:"underline", +text_striketrough:"strikethrough", +text_blink:"blink", +text_none:"none", +background_color:"Background color", +background_image:"Background image", +background_repeat:"Repeat", +background_attachment:"Attachment", +background_hpos:"Horizontal position", +background_vpos:"Vertical position", +block_wordspacing:"Word spacing", +block_letterspacing:"Letter spacing", +block_vertical_alignment:"Vertical alignment", +block_text_align:"Text align", +block_text_indent:"Text indent", +block_whitespace:"Whitespace", +block_display:"Display", +box_width:"Width", +box_height:"Height", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"Same for all", +top:"Top", +right:"Right", +bottom:"Bottom", +left:"Left", +margin:"Margin", +style:"Style", +width:"Width", +height:"Height", +color:"Color", +list_type:"Type", +bullet_image:"Bullet image", +position:"Position", +positioning_type:"Type", +visibility:"Visibility", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/style/props.htm b/app/plugins/tinymce/webroot/js/plugins/style/props.htm new file mode 100644 index 0000000..549ed04 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/style/props.htm @@ -0,0 +1,723 @@ + + + + {#style_dlg.title} + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
 
+
+ +
+ + + +
+ + + + + + +
+ +  
+
+ +
+ + + + + +
 
+
{#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
 
+
+ + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + +
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+
+
+ {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
      
{#style_dlg.top}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.right}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.bottom}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.left}   + + + + + + +
 
+
  + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
   
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+ +
+
+ {#style_dlg.placement} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
 
+
{#style_dlg.right} + + + + + + +
 
+
{#style_dlg.bottom} + + + + + + +
 
+
{#style_dlg.left} + + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.clip} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
 
+
{#style_dlg.right} + + + + + + +
 
+
{#style_dlg.bottom} + + + + + + +
 
+
{#style_dlg.left} + + + + + + +
 
+
+
+
+
+
+
+ +
+ + + +
+
+ +
+
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/entries new file mode 100644 index 0000000..f315b48 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/tabfocus +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +15397ee0ab8280702de894ed2c8e9e40 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1417 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +057b4a254936a90b81aa5cf4caee3936 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2482 + diff --git a/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..27d2440 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..e0e9635 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/tabfocus/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,112 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; + + tinymce.create('tinymce.plugins.TabFocusPlugin', { + init : function(ed, url) { + function tabCancel(ed, e) { + if (e.keyCode === 9) + return Event.cancel(e); + }; + + function tabHandler(ed, e) { + var x, i, f, el, v; + + function find(d) { + f = DOM.getParent(ed.id, 'form'); + el = f.elements; + + if (f) { + each(el, function(e, i) { + if (e.id == ed.id) { + x = i; + return false; + } + }); + + if (d > 0) { + for (i = x + 1; i < el.length; i++) { + if (el[i].type != 'hidden') + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (el[i].type != 'hidden') + return el[i]; + } + } + } + + return null; + }; + + if (e.keyCode === 9) { + v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') + el = find(-1); + else + el = DOM.get(v[0]); + } else { + if (v[1] == ':next') + el = find(1); + else + el = DOM.get(v[1]); + } + + if (el) { + if (ed = tinymce.get(el.id || el.name)) + ed.focus(); + else + window.setTimeout(function() {window.focus();el.focus();}, 10); + + return Event.cancel(e); + } + } + }; + + ed.onKeyUp.add(tabCancel); + + if (tinymce.isGecko) { + ed.onKeyPress.add(tabHandler); + ed.onKeyDown.add(tabCancel); + } else + ed.onKeyDown.add(tabHandler); + + ed.onInit.add(function() { + each(DOM.select('a:first,a:last', ed.getContainer()), function(n) { + Event.add(n, 'focus', function() {ed.focus();}); + }); + }); + }, + + getInfo : function() { + return { + longname : 'Tabfocus', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..27d2440 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..e0e9635 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,112 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; + + tinymce.create('tinymce.plugins.TabFocusPlugin', { + init : function(ed, url) { + function tabCancel(ed, e) { + if (e.keyCode === 9) + return Event.cancel(e); + }; + + function tabHandler(ed, e) { + var x, i, f, el, v; + + function find(d) { + f = DOM.getParent(ed.id, 'form'); + el = f.elements; + + if (f) { + each(el, function(e, i) { + if (e.id == ed.id) { + x = i; + return false; + } + }); + + if (d > 0) { + for (i = x + 1; i < el.length; i++) { + if (el[i].type != 'hidden') + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (el[i].type != 'hidden') + return el[i]; + } + } + } + + return null; + }; + + if (e.keyCode === 9) { + v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') + el = find(-1); + else + el = DOM.get(v[0]); + } else { + if (v[1] == ':next') + el = find(1); + else + el = DOM.get(v[1]); + } + + if (el) { + if (ed = tinymce.get(el.id || el.name)) + ed.focus(); + else + window.setTimeout(function() {window.focus();el.focus();}, 10); + + return Event.cancel(e); + } + } + }; + + ed.onKeyUp.add(tabCancel); + + if (tinymce.isGecko) { + ed.onKeyPress.add(tabHandler); + ed.onKeyDown.add(tabCancel); + } else + ed.onKeyDown.add(tabHandler); + + ed.onInit.add(function() { + each(DOM.select('a:first,a:last', ed.getContainer()), function(n) { + Event.add(n, 'focus', function() {ed.focus();}); + }); + }); + }, + + getInfo : function() { + return { + longname : 'Tabfocus', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/table/.svn/entries new file mode 100644 index 0000000..e5a1a25 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/entries @@ -0,0 +1,241 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/table +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +43d27e5e58b195b45fc80ed914a63d4d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +13506 + +langs +dir + +cell.htm +file + + + + +2010-09-04T08:55:28.000000Z +350bd7666dfe88d3703eeaa03fe9f6f0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6642 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +f2423bcdb6a7f4d74a82679ceb9c6ca2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +28139 + +css +dir + +merge_cells.htm +file + + + + +2010-09-04T08:55:28.000000Z +241e186845683f1d2deb9ad4a750298e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1323 + +js +dir + +row.htm +file + + + + +2010-09-04T08:55:28.000000Z +1f45035a7c0bb183dff09cfb27db0e96 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5750 + +table.htm +file + + + + +2010-09-04T08:55:28.000000Z +a292f64a35a7d041a0323e79c50ad237 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8420 + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/cell.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/cell.htm.svn-base new file mode 100644 index 0000000..af7e003 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/cell.htm.svn-base @@ -0,0 +1,178 @@ + + + + {#table_dlg.cell_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..266d7d5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(b){var c=b.each;function a(F,E,I){var e,J,B,n;r();n=E.getParent(I.getStart(),"th,td");if(n){J=D(n);B=G();n=v(J.x,J.y)}function w(L,K){L=L.cloneNode(K);L.removeAttribute("id");return L}function r(){var K=0;e=[];c(["thead","tbody","tfoot"],function(L){var M=E.select(L+" tr",F);c(M,function(N,O){O+=K;c(E.select("td,th",N),function(U,P){var Q,R,S,T;if(e[O]){while(e[O][P]){P++}}S=g(U,"rowspan");T=g(U,"colspan");for(R=O;R'}return false}},"childNodes");K=w(K,false);K.rowSpan=K.colSpan=1;if(L){K.appendChild(L)}else{if(!b.isIE){K.innerHTML='
'}}return K}function p(){var K=E.createRng();c(E.select("tr",F),function(L){if(L.cells.length==0){E.remove(L)}});if(E.select("tr",F).length==0){K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F);return}c(E.select("thead,tbody,tfoot",F),function(L){if(L.rows.length==0){E.remove(L)}});r();row=e[Math.min(e.length-1,J.y)];if(row){I.select(row[Math.min(row.length-1,J.x)].elm,true);I.collapse(true)}}function s(Q,O,S,P){var N,L,K,M,R;N=e[O][Q].elm.parentNode;for(K=1;K<=S;K++){N=E.getNext(N,"tr");if(N){for(L=Q;L>=0;L--){R=e[O+K][L].elm;if(R.parentNode==N){for(M=1;M<=P;M++){E.insertAfter(d(R),R)}break}}if(L==-1){for(M=1;M<=P;M++){N.insertBefore(d(N.cells[0]),N.cells[0])}}}}}function A(){c(e,function(K,L){c(K,function(N,M){var Q,P,R,O;if(h(N)){N=N.elm;Q=g(N,"colspan");P=g(N,"rowspan");if(Q>1||P>1){N.colSpan=N.rowSpan=1;for(O=0;O1){P.rowSpan=rowSpan+1;continue}}else{if(K>0&&e[K-1][O]){S=e[K-1][O].elm;rowSpan=g(S,"rowspan");if(rowSpan>1){S.rowSpan=rowSpan+1;continue}}}L=d(P);L.colSpan=P.colSpan;R.appendChild(L);M=P}}if(R.hasChildNodes()){if(!N){E.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function f(L){var M,K;c(e,function(N,O){c(N,function(Q,P){if(h(Q)){M=P;if(L){return false}}});if(L){return !M}});c(e,function(Q,R){var N=Q[M].elm,O,P;if(N!=K){P=g(N,"colspan");O=g(N,"rowspan");if(P==1){if(!L){E.insertAfter(d(N),N);s(M,R,O-1,P)}else{N.parentNode.insertBefore(d(N),N);s(M,R,O-1,P)}}else{N.colSpan++}K=N}})}function m(){var K=[];c(e,function(L,M){c(L,function(O,N){if(h(O)&&b.inArray(K,N)===-1){c(e,function(R){var P=R[N].elm,Q;Q=g(P,"colspan");if(Q>1){P.colSpan=Q-1}else{E.remove(P)}});K.push(N)}})});p()}function l(){var L;function K(O){var N,P,M;N=E.getNext(O,"tr");c(O.cells,function(Q){var R=g(Q,"rowspan");if(R>1){Q.rowSpan=R-1;P=D(Q);s(P.x,P.y,1,1)}});P=D(O.cells[0]);c(e[P.y],function(Q){var R;Q=Q.elm;if(Q!=M){R=g(Q,"rowspan");if(R<=1){E.remove(Q)}else{Q.rowSpan=R-1}M=Q}})}L=j();c(L.reverse(),function(M){K(M)});p()}function C(){var K=j();E.remove(K);p();return K}function H(){var K=j();c(K,function(M,L){K[L]=w(M,true)});return K}function z(M,L){var N=j(),K=N[L?0:N.length-1],O=K.cells.length;c(e,function(Q){var P;O=0;c(Q,function(S,R){if(S.real){O+=S.colspan}if(S.elm.parentNode==K){P=1}});if(P){return false}});if(!L){M.reverse()}c(M,function(R){var Q=R.cells.length,P;for(i=0;iL){L=P}if(O>K){K=O}if(Q.real){S=Q.colspan-1;R=Q.rowspan-1;if(S){if(P+S>L){L=P+S}}if(R){if(O+R>K){K=O+R}}}}})});return{x:L,y:K}}function t(Q){var N,M,S,R,L,K,O,P;B=D(Q);if(J&&B){N=Math.min(J.x,B.x);M=Math.min(J.y,B.y);S=Math.max(J.x,B.x);R=Math.max(J.y,B.y);L=S;K=R;for(y=M;y<=K;y++){Q=e[y][N];if(!Q.real){if(N-(Q.colspan-1)L){L=x+O}}if(P){if(y+P>K){K=y+P}}}}}E.removeClass(E.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=M;y<=K;y++){for(x=N;x<=L;x++){E.addClass(e[y][x].elm,"mceSelected")}}}}b.extend(this,{deleteTable:q,split:A,merge:o,insertRow:k,insertCol:f,deleteCols:m,deleteRows:l,cutRows:C,copyRows:H,pasteRows:z,getPos:D,setStartCell:u,setEndCell:t})}b.create("tinymce.plugins.TablePlugin",{init:function(e,f){var d,j;function h(m){var l=e.selection,k=e.dom.getParent(m||l.getNode(),"table");if(k){return new a(k,e.dom,l)}}function g(){e.getBody().style.webkitUserSelect="";e.dom.removeClass(e.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}c([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(k){e.addButton(k[0],{title:k[1],cmd:k[2],ui:k[3]})});if(!b.isIE){e.onClick.add(function(k,l){l=l.target;if(l.nodeName==="TABLE"){k.selection.select(l)}})}e.onNodeChange.add(function(l,k,o){var m;o=l.selection.getStart();m=l.dom.getParent(o,"td,th,caption");k.setActive("table",o.nodeName==="TABLE"||!!m);if(m&&m.nodeName==="CAPTION"){m=0}k.setDisabled("delete_table",!m);k.setDisabled("delete_col",!m);k.setDisabled("delete_table",!m);k.setDisabled("delete_row",!m);k.setDisabled("col_after",!m);k.setDisabled("col_before",!m);k.setDisabled("row_after",!m);k.setDisabled("row_before",!m);k.setDisabled("row_props",!m);k.setDisabled("cell_props",!m);k.setDisabled("split_cells",!m);k.setDisabled("merge_cells",!m)});e.onInit.add(function(l){var k,o,p=l.dom,m;d=l.windowManager;l.onMouseDown.add(function(q,r){if(r.button!=2){g();o=p.getParent(r.target,"td,th");k=p.getParent(o,"table")}});p.bind(l.getDoc(),"mouseover",function(t){var r,q,s=t.target;if(o&&(m||s!=o)&&(s.nodeName=="TD"||s.nodeName=="TH")){q=p.getParent(s,"table");if(q==k){if(!m){m=h(q);m.setStartCell(o);l.getBody().style.webkitUserSelect="none"}m.setEndCell(s)}r=l.selection.getSel();if(r.removeAllRanges){r.removeAllRanges()}else{r.empty()}t.preventDefault()}});l.onMouseUp.add(function(z,A){var r,t=z.selection,B,C=t.getSel(),q,u,s,w;if(o){if(m){z.getBody().style.webkitUserSelect=""}function v(D,F){var E=new b.dom.TreeWalker(D,D);do{if(D.nodeType==3&&b.trim(D.nodeValue).length!=0){if(F){r.setStart(D,0)}else{r.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){r.setStartBefore(D)}else{r.setEndBefore(D)}return}}while(D=(F?E.next():E.prev()))}B=p.select("td.mceSelected,th.mceSelected");if(B.length>0){r=p.createRng();u=B[0];w=B[B.length-1];v(u,1);q=new b.dom.TreeWalker(u,p.getParent(B[0],"table"));do{if(u.nodeName=="TD"||u.nodeName=="TH"){if(!p.hasClass(u,"mceSelected")){break}s=u}}while(u=q.next());v(s);t.setRng(r)}z.nodeChanged();o=m=k=null}});l.onKeyUp.add(function(q,r){g()});if(l&&l.plugins.contextmenu){l.plugins.contextmenu.onContextMenu.add(function(s,q,u){var v,t=l.selection,r=t.getNode()||l.getBody();if(l.dom.getParent(u,"td")||l.dom.getParent(u,"th")||l.dom.select("td.mceSelected,th.mceSelected").length){q.removeAll();if(r.nodeName=="A"&&!l.dom.getAttrib(r,"name")){q.add({title:"advanced.link_desc",icon:"link",cmd:l.plugins.advlink?"mceAdvLink":"mceLink",ui:true});q.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});q.addSeparator()}if(r.nodeName=="IMG"&&r.className.indexOf("mceItem")==-1){q.add({title:"advanced.image_desc",icon:"image",cmd:l.plugins.advimage?"mceAdvImage":"mceImage",ui:true});q.addSeparator()}q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});q.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});q.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});q.addSeparator();v=q.addMenu({title:"table.cell"});v.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});v.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});v.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});v=q.addMenu({title:"table.row"});v.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});v.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});v.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});v.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});v.addSeparator();v.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});v.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});v.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!j);v.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!j);v=q.addMenu({title:"table.col"});v.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});v.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});v.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!b.isIE){function n(){var q;for(q=l.getBody().lastChild;q&&q.nodeType==3&&!q.nodeValue.length;q=q.previousSibling){}if(q&&q.nodeName=="TABLE"){l.dom.add(l.getBody(),"p",null,'
')}}if(b.isGecko){l.onKeyDown.add(function(r,t){var q,s,u=r.dom;if(t.keyCode==37||t.keyCode==38){q=r.selection.getRng();s=u.getParent(q.startContainer,"table");if(s&&r.getBody().firstChild==s){if(isAtStart(q,s)){q=u.createRng();q.setStartBefore(s);q.setEndBefore(s);r.selection.setRng(q);t.preventDefault()}}}})}l.onKeyUp.add(n);l.onSetContent.add(n);l.onVisualAid.add(n);l.onPreProcess.add(function(q,s){var r=s.node.lastChild;if(r&&r.childNodes.length==1&&r.firstChild.nodeName=="BR"){q.dom.remove(r)}});n()}});c({mceTableSplitCells:function(k){k.split()},mceTableMergeCells:function(l){var m,n,k;k=e.dom.getParent(e.selection.getNode(),"th,td");if(k){m=k.rowSpan;n=k.colSpan}if(!e.dom.select("td.mceSelected,th.mceSelected").length){d.open({url:f+"/merge_cells.htm",width:240+parseInt(e.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(e.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:m,cols:n,onaction:function(o){l.merge(k,o.cols,o.rows)},plugin_url:f})}else{l.merge()}},mceTableInsertRowBefore:function(k){k.insertRow(true)},mceTableInsertRowAfter:function(k){k.insertRow()},mceTableInsertColBefore:function(k){k.insertCol(true)},mceTableInsertColAfter:function(k){k.insertCol()},mceTableDeleteCol:function(k){k.deleteCols()},mceTableDeleteRow:function(k){k.deleteRows()},mceTableCutRow:function(k){j=k.cutRows()},mceTableCopyRow:function(k){j=k.copyRows()},mceTablePasteRowBefore:function(k){k.pasteRows(j,true)},mceTablePasteRowAfter:function(k){k.pasteRows(j)},mceTableDelete:function(k){k.deleteTable()}},function(l,k){e.addCommand(k,function(){var m=h();if(m){l(m);e.execCommand("mceRepaint");g()}})});c({mceInsertTable:function(k){d.open({url:f+"/table.htm",width:400+parseInt(e.getLang("table.table_delta_width",0)),height:320+parseInt(e.getLang("table.table_delta_height",0)),inline:1},{plugin_url:f,action:k?k.action:0})},mceTableRowProps:function(){d.open({url:f+"/row.htm",width:400+parseInt(e.getLang("table.rowprops_delta_width",0)),height:295+parseInt(e.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:f})},mceTableCellProps:function(){d.open({url:f+"/cell.htm",width:400+parseInt(e.getLang("table.cellprops_delta_width",0)),height:295+parseInt(e.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:f})}},function(l,k){e.addCommand(k,function(m,n){l(n)})})}});b.PluginManager.add("table",b.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..0195e96 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,1125 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var each = tinymce.each; + + /** + * Table Grid class. + */ + function TableGrid(table, dom, selection) { + var grid, startPos, endPos, selectedCell; + + buildGrid(); + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select(part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('td,th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) + x++; + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) + grid[y2] = []; + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part : part, + real : y2 == y && x2 == x, + elm : td, + rowspan : rowspan, + colspan : colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + }; + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) + return row[x]; + }; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + }; + + function isCellSelected(cell) { + return dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell; + }; + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { + rows.push(row); + return false; + } + }); + }); + + return rows; + }; + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + }; + + function cloneCell(cell) { + var formatNode; + + // Clone formats + tinymce.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + node = cloneNode(node, false); + + if (!formatNode) + formatNode = curNode = node; + else if (curNode) + curNode.appendChild(node); + + curNode = node; + }); + + // Add something to the inner node + if (curNode) + curNode.innerHTML = tinymce.isIE ? ' ' : '
'; + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + cell.rowSpan = cell.colSpan = 1; + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!tinymce.isIE) + cell.innerHTML = '
'; + } + + return cell; + }; + + function cleanup() { + var rng = dom.createRng(); + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length == 0) + dom.remove(tr); + }); + + // Empty table + if (dom.select('tr', table).length == 0) { + rng.setStartAfter(table); + rng.setEndAfter(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length == 0) + dom.remove(part); + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + }; + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) + dom.insertAfter(cloneCell(cell), cell); + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + }; + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, newCell, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + cell.colSpan = cell.rowSpan = 1; + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) + dom.insertAfter(cloneCell(cell), cell); + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + }; + + function merge(cell, cols, rows) { + var startX, startY, endX, endY, x, y, startCell, endCell, cell, children; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + // Use selection + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + startCell.colSpan = (endX - startX) + 1; + startCell.rowSpan = (endY - startY) + 1; + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node, i) { + // Jump over last BR element + if (node.nodeName != 'BR' || i != children.length - 1) + startCell.appendChild(node); + }); + + // Remove cell + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + }; + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) + return false; + } + }); + + if (before) + return !posY; + }); + + for (x = 0; x < grid[0].length; x++) { + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + cell.rowSpan = rowSpan + 1; + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowspan'); + if (rowSpan > 1) { + otherCell.rowSpan = rowSpan + 1; + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell) + newCell.colSpan = cell.colSpan; + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) + dom.insertAfter(newRow, rowElm); + else + rowElm.parentNode.insertBefore(newRow, rowElm); + } + }; + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) + return false; + } + }); + + if (before) + return !posX; + }); + + each(grid, function(row, y) { + var cell = row[posX].elm, rowSpan, colSpan; + + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else + cell.colSpan++; + + lastCell = cell; + } + }); + }; + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colspan'); + + if (colSpan > 1) + cell.colSpan = colSpan - 1; + else + dom.remove(cell); + }); + + cols.push(x); + } + }); + }); + + cleanup(); + }; + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowspan'); + + if (rowSpan > 1) { + cell.rowSpan = rowSpan - 1; + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowspan'); + + if (rowSpan <= 1) + dom.remove(cell); + else + cell.rowSpan = rowSpan - 1; + + lastCell = cell; + } + }); + }; + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + }; + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + }; + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + }; + + function pasteRows(rows, before) { + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell, x) { + if (cell.real) + targetCellCount += cell.colspan; + + if (cell.elm.parentNode == targetRow) + match = 1; + }); + + if (match) + return false; + }); + + if (!before) + rows.reverse(); + + each(rows, function(row) { + var cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + cell.colSpan = cell.rowSpan = 1; + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) + row.appendChild(cloneCell(row.cells[cellCount - 1])); + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) + dom.remove(row.cells[i]); + + // Add before/after + if (before) + targetRow.parentNode.insertBefore(row, targetRow); + else + dom.insertAfter(row, targetRow); + }); + }; + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + }; + + function setStartCell(cell) { + startPos = getPos(cell); + }; + + function findEndPos() { + var pos, maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) + maxX = x; + + if (y > maxY) + maxY = y; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + }; + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) + startX -= cell.colspan - 1; + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) + startY -= cell.rowspan - 1; + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) + dom.addClass(grid[y][x].elm, 'mceSelected'); + } + } + }; + + // Expose to public + tinymce.extend(this, { + deleteTable : deleteTable, + split : split, + merge : merge, + insertRow : insertRow, + insertCol : insertCol, + deleteCols : deleteCols, + deleteRows : deleteRows, + cutRows : cutRows, + copyRows : copyRows, + pasteRows : pasteRows, + getPos : getPos, + setStartCell : setStartCell, + setEndCell : setEndCell + }); + }; + + tinymce.create('tinymce.plugins.TablePlugin', { + init : function(ed, url) { + var winMan, clipboardRows; + + function createTableGrid(node) { + var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); + + if (tblElm) + return new TableGrid(tblElm, ed.dom, selection); + }; + + function cleanup() { + // Restore selection possibilities + ed.getBody().style.webkitUserSelect = ''; + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + // Register buttons + each([ + ['table', 'table.desc', 'mceInsertTable', true], + ['delete_table', 'table.del', 'mceTableDelete'], + ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], + ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], + ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], + ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], + ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], + ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], + ['row_props', 'table.row_desc', 'mceTableRowProps', true], + ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], + ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], + ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] + ], function(c) { + ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); + }); + + // Select whole table is a table border is clicked + if (!tinymce.isIE) { + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'TABLE') + ed.selection.select(e); + }); + } + + // Handle node change updates + ed.onNodeChange.add(function(ed, cm, n) { + var p; + + n = ed.selection.getStart(); + p = ed.dom.getParent(n, 'td,th,caption'); + cm.setActive('table', n.nodeName === 'TABLE' || !!p); + + // Disable table tools if we are in caption + if (p && p.nodeName === 'CAPTION') + p = 0; + + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_col', !p); + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_row', !p); + cm.setDisabled('col_after', !p); + cm.setDisabled('col_before', !p); + cm.setDisabled('row_after', !p); + cm.setDisabled('row_before', !p); + cm.setDisabled('row_props', !p); + cm.setDisabled('cell_props', !p); + cm.setDisabled('split_cells', !p); + cm.setDisabled('merge_cells', !p); + }); + + ed.onInit.add(function(ed) { + var startTable, startCell, dom = ed.dom, tableGrid; + + winMan = ed.windowManager; + + // Add cell selection logic + ed.onMouseDown.add(function(ed, e) { + if (e.button != 2) { + cleanup(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + dom.bind(ed.getDoc(), 'mouseover', function(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = createTableGrid(table); + tableGrid.setStartCell(startCell); + + ed.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + } + + // Remove current selection + sel = ed.selection.getSel(); + + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + + e.preventDefault(); + } + }); + + ed.onMouseUp.add(function(ed, e) { + var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; + + // Move selection to startCell + if (startCell) { + if (tableGrid) + ed.getBody().style.webkitUserSelect = ''; + + function setPoint(node, start) { + var walker = new tinymce.dom.TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { + if (start) + rng.setStart(node, 0); + else + rng.setEnd(node, node.nodeValue.length); + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) + rng.setStartBefore(node); + else + rng.setEndBefore(node); + + return; + } + } while (node = (start ? walker.next() : walker.prev())); + }; + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mceSelected,th.mceSelected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + + setPoint(node, 1); + walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mceSelected')) + break; + + lastNode = node; + } + } while (node = walker.next()); + + setPoint(lastNode); + + sel.setRng(rng); + } + + ed.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + ed.onKeyUp.add(function(ed, e) { + cleanup(); + }); + + // Add context menu + if (ed && ed.plugins.contextmenu) { + ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { + var sm, se = ed.selection, el = se.getNode() || ed.getBody(); + + if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { + m.removeAll(); + + if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + m.addSeparator(); + } + + if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + m.addSeparator(); + } + + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); + m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); + m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); + m.addSeparator(); + + // Cell menu + sm = m.addMenu({title : 'table.cell'}); + sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); + sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); + sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); + + // Row menu + sm = m.addMenu({title : 'table.row'}); + sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); + sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); + sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); + sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); + sm.addSeparator(); + sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); + sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); + sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); + sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); + + // Column menu + sm = m.addMenu({title : 'table.col'}); + sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); + sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); + sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); + } else + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + if (!tinymce.isIE) { + function fixTableCaretPos() { + var last; + + // Skip empty text nodes form the end + for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; + + if (last && last.nodeName == 'TABLE') + ed.dom.add(ed.getBody(), 'p', null, '
'); + }; + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + var rng, table, dom = ed.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = ed.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && ed.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + ed.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + ed.onKeyUp.add(fixTableCaretPos); + ed.onSetContent.add(fixTableCaretPos); + ed.onVisualAid.add(fixTableCaretPos); + + ed.onPreProcess.add(function(ed, o) { + var last = o.node.lastChild; + + if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR') + ed.dom.remove(last); + }); + + fixTableCaretPos(); + } + }); + + // Register action commands + each({ + mceTableSplitCells : function(grid) { + grid.split(); + }, + + mceTableMergeCells : function(grid) { + var rowSpan, colSpan, cell; + + cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { + winMan.open({ + url : url + '/merge_cells.htm', + width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), + height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), + inline : 1 + }, { + rows : rowSpan, + cols : colSpan, + onaction : function(data) { + grid.merge(cell, data.cols, data.rows); + }, + plugin_url : url + }); + } else + grid.merge(); + }, + + mceTableInsertRowBefore : function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter : function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore : function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter : function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol : function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow : function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow : function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow : function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore : function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter : function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete : function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + ed.addCommand(name, function() { + var grid = createTableGrid(); + + if (grid) { + func(grid); + ed.execCommand('mceRepaint'); + cleanup(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable : function(val) { + winMan.open({ + url : url + '/table.htm', + width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), + height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + action : val ? val.action : 0 + }); + }, + + mceTableRowProps : function() { + winMan.open({ + url : url + '/row.htm', + width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }, + + mceTableCellProps : function() { + winMan.open({ + url : url + '/cell.htm', + width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + } + }, function(func, name) { + ed.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/merge_cells.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/merge_cells.htm.svn-base new file mode 100644 index 0000000..b1a8d9b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/merge_cells.htm.svn-base @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
+
+ {#table_dlg.merge_cells_title} + + + + + + + + + +
{#table_dlg.cols}:
{#table_dlg.rows}:
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/row.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/row.htm.svn-base new file mode 100644 index 0000000..33fc9cc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/row.htm.svn-base @@ -0,0 +1,155 @@ + + + + {#table_dlg.row_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/table.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/table.htm.svn-base new file mode 100644 index 0000000..122b04a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/.svn/text-base/table.htm.svn-base @@ -0,0 +1,187 @@ + + + + {#table_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/cell.htm b/app/plugins/tinymce/webroot/js/plugins/table/cell.htm new file mode 100644 index 0000000..af7e003 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/cell.htm @@ -0,0 +1,178 @@ + + + + {#table_dlg.cell_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/entries new file mode 100644 index 0000000..5685be1 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/table/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +cell.css +file + + + + +2010-09-04T08:55:28.000000Z +4662497b8afb4b1c32eae399d37073e8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +189 + +row.css +file + + + + +2010-09-04T08:55:28.000000Z +fcb6c71f2226f482a0ac9e48494ca87b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +281 + +table.css +file + + + + +2010-09-04T08:55:28.000000Z +541baebf7d11536dd4d31d6383e2d22d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +157 + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/cell.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/cell.css.svn-base new file mode 100644 index 0000000..a47cc1a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/cell.css.svn-base @@ -0,0 +1,17 @@ +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; +} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/row.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/row.css.svn-base new file mode 100644 index 0000000..0e397db --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/row.css.svn-base @@ -0,0 +1,25 @@ +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/table.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/table.css.svn-base new file mode 100644 index 0000000..8f10783 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/.svn/text-base/table.css.svn-base @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 245px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/cell.css b/app/plugins/tinymce/webroot/js/plugins/table/css/cell.css new file mode 100644 index 0000000..a47cc1a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/cell.css @@ -0,0 +1,17 @@ +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; +} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/row.css b/app/plugins/tinymce/webroot/js/plugins/table/css/row.css new file mode 100644 index 0000000..0e397db --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/row.css @@ -0,0 +1,25 @@ +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/table/css/table.css b/app/plugins/tinymce/webroot/js/plugins/table/css/table.css new file mode 100644 index 0000000..8f10783 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/css/table.css @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 245px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin.js new file mode 100644 index 0000000..266d7d5 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +(function(b){var c=b.each;function a(F,E,I){var e,J,B,n;r();n=E.getParent(I.getStart(),"th,td");if(n){J=D(n);B=G();n=v(J.x,J.y)}function w(L,K){L=L.cloneNode(K);L.removeAttribute("id");return L}function r(){var K=0;e=[];c(["thead","tbody","tfoot"],function(L){var M=E.select(L+" tr",F);c(M,function(N,O){O+=K;c(E.select("td,th",N),function(U,P){var Q,R,S,T;if(e[O]){while(e[O][P]){P++}}S=g(U,"rowspan");T=g(U,"colspan");for(R=O;R'}return false}},"childNodes");K=w(K,false);K.rowSpan=K.colSpan=1;if(L){K.appendChild(L)}else{if(!b.isIE){K.innerHTML='
'}}return K}function p(){var K=E.createRng();c(E.select("tr",F),function(L){if(L.cells.length==0){E.remove(L)}});if(E.select("tr",F).length==0){K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F);return}c(E.select("thead,tbody,tfoot",F),function(L){if(L.rows.length==0){E.remove(L)}});r();row=e[Math.min(e.length-1,J.y)];if(row){I.select(row[Math.min(row.length-1,J.x)].elm,true);I.collapse(true)}}function s(Q,O,S,P){var N,L,K,M,R;N=e[O][Q].elm.parentNode;for(K=1;K<=S;K++){N=E.getNext(N,"tr");if(N){for(L=Q;L>=0;L--){R=e[O+K][L].elm;if(R.parentNode==N){for(M=1;M<=P;M++){E.insertAfter(d(R),R)}break}}if(L==-1){for(M=1;M<=P;M++){N.insertBefore(d(N.cells[0]),N.cells[0])}}}}}function A(){c(e,function(K,L){c(K,function(N,M){var Q,P,R,O;if(h(N)){N=N.elm;Q=g(N,"colspan");P=g(N,"rowspan");if(Q>1||P>1){N.colSpan=N.rowSpan=1;for(O=0;O1){P.rowSpan=rowSpan+1;continue}}else{if(K>0&&e[K-1][O]){S=e[K-1][O].elm;rowSpan=g(S,"rowspan");if(rowSpan>1){S.rowSpan=rowSpan+1;continue}}}L=d(P);L.colSpan=P.colSpan;R.appendChild(L);M=P}}if(R.hasChildNodes()){if(!N){E.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function f(L){var M,K;c(e,function(N,O){c(N,function(Q,P){if(h(Q)){M=P;if(L){return false}}});if(L){return !M}});c(e,function(Q,R){var N=Q[M].elm,O,P;if(N!=K){P=g(N,"colspan");O=g(N,"rowspan");if(P==1){if(!L){E.insertAfter(d(N),N);s(M,R,O-1,P)}else{N.parentNode.insertBefore(d(N),N);s(M,R,O-1,P)}}else{N.colSpan++}K=N}})}function m(){var K=[];c(e,function(L,M){c(L,function(O,N){if(h(O)&&b.inArray(K,N)===-1){c(e,function(R){var P=R[N].elm,Q;Q=g(P,"colspan");if(Q>1){P.colSpan=Q-1}else{E.remove(P)}});K.push(N)}})});p()}function l(){var L;function K(O){var N,P,M;N=E.getNext(O,"tr");c(O.cells,function(Q){var R=g(Q,"rowspan");if(R>1){Q.rowSpan=R-1;P=D(Q);s(P.x,P.y,1,1)}});P=D(O.cells[0]);c(e[P.y],function(Q){var R;Q=Q.elm;if(Q!=M){R=g(Q,"rowspan");if(R<=1){E.remove(Q)}else{Q.rowSpan=R-1}M=Q}})}L=j();c(L.reverse(),function(M){K(M)});p()}function C(){var K=j();E.remove(K);p();return K}function H(){var K=j();c(K,function(M,L){K[L]=w(M,true)});return K}function z(M,L){var N=j(),K=N[L?0:N.length-1],O=K.cells.length;c(e,function(Q){var P;O=0;c(Q,function(S,R){if(S.real){O+=S.colspan}if(S.elm.parentNode==K){P=1}});if(P){return false}});if(!L){M.reverse()}c(M,function(R){var Q=R.cells.length,P;for(i=0;iL){L=P}if(O>K){K=O}if(Q.real){S=Q.colspan-1;R=Q.rowspan-1;if(S){if(P+S>L){L=P+S}}if(R){if(O+R>K){K=O+R}}}}})});return{x:L,y:K}}function t(Q){var N,M,S,R,L,K,O,P;B=D(Q);if(J&&B){N=Math.min(J.x,B.x);M=Math.min(J.y,B.y);S=Math.max(J.x,B.x);R=Math.max(J.y,B.y);L=S;K=R;for(y=M;y<=K;y++){Q=e[y][N];if(!Q.real){if(N-(Q.colspan-1)L){L=x+O}}if(P){if(y+P>K){K=y+P}}}}}E.removeClass(E.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=M;y<=K;y++){for(x=N;x<=L;x++){E.addClass(e[y][x].elm,"mceSelected")}}}}b.extend(this,{deleteTable:q,split:A,merge:o,insertRow:k,insertCol:f,deleteCols:m,deleteRows:l,cutRows:C,copyRows:H,pasteRows:z,getPos:D,setStartCell:u,setEndCell:t})}b.create("tinymce.plugins.TablePlugin",{init:function(e,f){var d,j;function h(m){var l=e.selection,k=e.dom.getParent(m||l.getNode(),"table");if(k){return new a(k,e.dom,l)}}function g(){e.getBody().style.webkitUserSelect="";e.dom.removeClass(e.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}c([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(k){e.addButton(k[0],{title:k[1],cmd:k[2],ui:k[3]})});if(!b.isIE){e.onClick.add(function(k,l){l=l.target;if(l.nodeName==="TABLE"){k.selection.select(l)}})}e.onNodeChange.add(function(l,k,o){var m;o=l.selection.getStart();m=l.dom.getParent(o,"td,th,caption");k.setActive("table",o.nodeName==="TABLE"||!!m);if(m&&m.nodeName==="CAPTION"){m=0}k.setDisabled("delete_table",!m);k.setDisabled("delete_col",!m);k.setDisabled("delete_table",!m);k.setDisabled("delete_row",!m);k.setDisabled("col_after",!m);k.setDisabled("col_before",!m);k.setDisabled("row_after",!m);k.setDisabled("row_before",!m);k.setDisabled("row_props",!m);k.setDisabled("cell_props",!m);k.setDisabled("split_cells",!m);k.setDisabled("merge_cells",!m)});e.onInit.add(function(l){var k,o,p=l.dom,m;d=l.windowManager;l.onMouseDown.add(function(q,r){if(r.button!=2){g();o=p.getParent(r.target,"td,th");k=p.getParent(o,"table")}});p.bind(l.getDoc(),"mouseover",function(t){var r,q,s=t.target;if(o&&(m||s!=o)&&(s.nodeName=="TD"||s.nodeName=="TH")){q=p.getParent(s,"table");if(q==k){if(!m){m=h(q);m.setStartCell(o);l.getBody().style.webkitUserSelect="none"}m.setEndCell(s)}r=l.selection.getSel();if(r.removeAllRanges){r.removeAllRanges()}else{r.empty()}t.preventDefault()}});l.onMouseUp.add(function(z,A){var r,t=z.selection,B,C=t.getSel(),q,u,s,w;if(o){if(m){z.getBody().style.webkitUserSelect=""}function v(D,F){var E=new b.dom.TreeWalker(D,D);do{if(D.nodeType==3&&b.trim(D.nodeValue).length!=0){if(F){r.setStart(D,0)}else{r.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){r.setStartBefore(D)}else{r.setEndBefore(D)}return}}while(D=(F?E.next():E.prev()))}B=p.select("td.mceSelected,th.mceSelected");if(B.length>0){r=p.createRng();u=B[0];w=B[B.length-1];v(u,1);q=new b.dom.TreeWalker(u,p.getParent(B[0],"table"));do{if(u.nodeName=="TD"||u.nodeName=="TH"){if(!p.hasClass(u,"mceSelected")){break}s=u}}while(u=q.next());v(s);t.setRng(r)}z.nodeChanged();o=m=k=null}});l.onKeyUp.add(function(q,r){g()});if(l&&l.plugins.contextmenu){l.plugins.contextmenu.onContextMenu.add(function(s,q,u){var v,t=l.selection,r=t.getNode()||l.getBody();if(l.dom.getParent(u,"td")||l.dom.getParent(u,"th")||l.dom.select("td.mceSelected,th.mceSelected").length){q.removeAll();if(r.nodeName=="A"&&!l.dom.getAttrib(r,"name")){q.add({title:"advanced.link_desc",icon:"link",cmd:l.plugins.advlink?"mceAdvLink":"mceLink",ui:true});q.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});q.addSeparator()}if(r.nodeName=="IMG"&&r.className.indexOf("mceItem")==-1){q.add({title:"advanced.image_desc",icon:"image",cmd:l.plugins.advimage?"mceAdvImage":"mceImage",ui:true});q.addSeparator()}q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});q.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});q.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});q.addSeparator();v=q.addMenu({title:"table.cell"});v.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});v.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});v.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});v=q.addMenu({title:"table.row"});v.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});v.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});v.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});v.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});v.addSeparator();v.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});v.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});v.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!j);v.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!j);v=q.addMenu({title:"table.col"});v.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});v.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});v.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!b.isIE){function n(){var q;for(q=l.getBody().lastChild;q&&q.nodeType==3&&!q.nodeValue.length;q=q.previousSibling){}if(q&&q.nodeName=="TABLE"){l.dom.add(l.getBody(),"p",null,'
')}}if(b.isGecko){l.onKeyDown.add(function(r,t){var q,s,u=r.dom;if(t.keyCode==37||t.keyCode==38){q=r.selection.getRng();s=u.getParent(q.startContainer,"table");if(s&&r.getBody().firstChild==s){if(isAtStart(q,s)){q=u.createRng();q.setStartBefore(s);q.setEndBefore(s);r.selection.setRng(q);t.preventDefault()}}}})}l.onKeyUp.add(n);l.onSetContent.add(n);l.onVisualAid.add(n);l.onPreProcess.add(function(q,s){var r=s.node.lastChild;if(r&&r.childNodes.length==1&&r.firstChild.nodeName=="BR"){q.dom.remove(r)}});n()}});c({mceTableSplitCells:function(k){k.split()},mceTableMergeCells:function(l){var m,n,k;k=e.dom.getParent(e.selection.getNode(),"th,td");if(k){m=k.rowSpan;n=k.colSpan}if(!e.dom.select("td.mceSelected,th.mceSelected").length){d.open({url:f+"/merge_cells.htm",width:240+parseInt(e.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(e.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:m,cols:n,onaction:function(o){l.merge(k,o.cols,o.rows)},plugin_url:f})}else{l.merge()}},mceTableInsertRowBefore:function(k){k.insertRow(true)},mceTableInsertRowAfter:function(k){k.insertRow()},mceTableInsertColBefore:function(k){k.insertCol(true)},mceTableInsertColAfter:function(k){k.insertCol()},mceTableDeleteCol:function(k){k.deleteCols()},mceTableDeleteRow:function(k){k.deleteRows()},mceTableCutRow:function(k){j=k.cutRows()},mceTableCopyRow:function(k){j=k.copyRows()},mceTablePasteRowBefore:function(k){k.pasteRows(j,true)},mceTablePasteRowAfter:function(k){k.pasteRows(j)},mceTableDelete:function(k){k.deleteTable()}},function(l,k){e.addCommand(k,function(){var m=h();if(m){l(m);e.execCommand("mceRepaint");g()}})});c({mceInsertTable:function(k){d.open({url:f+"/table.htm",width:400+parseInt(e.getLang("table.table_delta_width",0)),height:320+parseInt(e.getLang("table.table_delta_height",0)),inline:1},{plugin_url:f,action:k?k.action:0})},mceTableRowProps:function(){d.open({url:f+"/row.htm",width:400+parseInt(e.getLang("table.rowprops_delta_width",0)),height:295+parseInt(e.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:f})},mceTableCellProps:function(){d.open({url:f+"/cell.htm",width:400+parseInt(e.getLang("table.cellprops_delta_width",0)),height:295+parseInt(e.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:f})}},function(l,k){e.addCommand(k,function(m,n){l(n)})})}});b.PluginManager.add("table",b.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..0195e96 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/editor_plugin_src.js @@ -0,0 +1,1125 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var each = tinymce.each; + + /** + * Table Grid class. + */ + function TableGrid(table, dom, selection) { + var grid, startPos, endPos, selectedCell; + + buildGrid(); + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select(part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('td,th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) + x++; + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) + grid[y2] = []; + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part : part, + real : y2 == y && x2 == x, + elm : td, + rowspan : rowspan, + colspan : colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + }; + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) + return row[x]; + }; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + }; + + function isCellSelected(cell) { + return dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell; + }; + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { + rows.push(row); + return false; + } + }); + }); + + return rows; + }; + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + }; + + function cloneCell(cell) { + var formatNode; + + // Clone formats + tinymce.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + node = cloneNode(node, false); + + if (!formatNode) + formatNode = curNode = node; + else if (curNode) + curNode.appendChild(node); + + curNode = node; + }); + + // Add something to the inner node + if (curNode) + curNode.innerHTML = tinymce.isIE ? ' ' : '
'; + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + cell.rowSpan = cell.colSpan = 1; + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!tinymce.isIE) + cell.innerHTML = '
'; + } + + return cell; + }; + + function cleanup() { + var rng = dom.createRng(); + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length == 0) + dom.remove(tr); + }); + + // Empty table + if (dom.select('tr', table).length == 0) { + rng.setStartAfter(table); + rng.setEndAfter(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length == 0) + dom.remove(part); + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + }; + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) + dom.insertAfter(cloneCell(cell), cell); + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + }; + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, newCell, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + cell.colSpan = cell.rowSpan = 1; + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) + dom.insertAfter(cloneCell(cell), cell); + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + }; + + function merge(cell, cols, rows) { + var startX, startY, endX, endY, x, y, startCell, endCell, cell, children; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + // Use selection + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + startCell.colSpan = (endX - startX) + 1; + startCell.rowSpan = (endY - startY) + 1; + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node, i) { + // Jump over last BR element + if (node.nodeName != 'BR' || i != children.length - 1) + startCell.appendChild(node); + }); + + // Remove cell + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + }; + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) + return false; + } + }); + + if (before) + return !posY; + }); + + for (x = 0; x < grid[0].length; x++) { + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + cell.rowSpan = rowSpan + 1; + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowspan'); + if (rowSpan > 1) { + otherCell.rowSpan = rowSpan + 1; + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell) + newCell.colSpan = cell.colSpan; + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) + dom.insertAfter(newRow, rowElm); + else + rowElm.parentNode.insertBefore(newRow, rowElm); + } + }; + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) + return false; + } + }); + + if (before) + return !posX; + }); + + each(grid, function(row, y) { + var cell = row[posX].elm, rowSpan, colSpan; + + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else + cell.colSpan++; + + lastCell = cell; + } + }); + }; + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colspan'); + + if (colSpan > 1) + cell.colSpan = colSpan - 1; + else + dom.remove(cell); + }); + + cols.push(x); + } + }); + }); + + cleanup(); + }; + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowspan'); + + if (rowSpan > 1) { + cell.rowSpan = rowSpan - 1; + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowspan'); + + if (rowSpan <= 1) + dom.remove(cell); + else + cell.rowSpan = rowSpan - 1; + + lastCell = cell; + } + }); + }; + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + }; + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + }; + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + }; + + function pasteRows(rows, before) { + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell, x) { + if (cell.real) + targetCellCount += cell.colspan; + + if (cell.elm.parentNode == targetRow) + match = 1; + }); + + if (match) + return false; + }); + + if (!before) + rows.reverse(); + + each(rows, function(row) { + var cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + cell.colSpan = cell.rowSpan = 1; + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) + row.appendChild(cloneCell(row.cells[cellCount - 1])); + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) + dom.remove(row.cells[i]); + + // Add before/after + if (before) + targetRow.parentNode.insertBefore(row, targetRow); + else + dom.insertAfter(row, targetRow); + }); + }; + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + }; + + function setStartCell(cell) { + startPos = getPos(cell); + }; + + function findEndPos() { + var pos, maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) + maxX = x; + + if (y > maxY) + maxY = y; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + }; + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) + startX -= cell.colspan - 1; + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) + startY -= cell.rowspan - 1; + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) + dom.addClass(grid[y][x].elm, 'mceSelected'); + } + } + }; + + // Expose to public + tinymce.extend(this, { + deleteTable : deleteTable, + split : split, + merge : merge, + insertRow : insertRow, + insertCol : insertCol, + deleteCols : deleteCols, + deleteRows : deleteRows, + cutRows : cutRows, + copyRows : copyRows, + pasteRows : pasteRows, + getPos : getPos, + setStartCell : setStartCell, + setEndCell : setEndCell + }); + }; + + tinymce.create('tinymce.plugins.TablePlugin', { + init : function(ed, url) { + var winMan, clipboardRows; + + function createTableGrid(node) { + var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); + + if (tblElm) + return new TableGrid(tblElm, ed.dom, selection); + }; + + function cleanup() { + // Restore selection possibilities + ed.getBody().style.webkitUserSelect = ''; + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + // Register buttons + each([ + ['table', 'table.desc', 'mceInsertTable', true], + ['delete_table', 'table.del', 'mceTableDelete'], + ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], + ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], + ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], + ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], + ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], + ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], + ['row_props', 'table.row_desc', 'mceTableRowProps', true], + ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], + ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], + ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] + ], function(c) { + ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); + }); + + // Select whole table is a table border is clicked + if (!tinymce.isIE) { + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'TABLE') + ed.selection.select(e); + }); + } + + // Handle node change updates + ed.onNodeChange.add(function(ed, cm, n) { + var p; + + n = ed.selection.getStart(); + p = ed.dom.getParent(n, 'td,th,caption'); + cm.setActive('table', n.nodeName === 'TABLE' || !!p); + + // Disable table tools if we are in caption + if (p && p.nodeName === 'CAPTION') + p = 0; + + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_col', !p); + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_row', !p); + cm.setDisabled('col_after', !p); + cm.setDisabled('col_before', !p); + cm.setDisabled('row_after', !p); + cm.setDisabled('row_before', !p); + cm.setDisabled('row_props', !p); + cm.setDisabled('cell_props', !p); + cm.setDisabled('split_cells', !p); + cm.setDisabled('merge_cells', !p); + }); + + ed.onInit.add(function(ed) { + var startTable, startCell, dom = ed.dom, tableGrid; + + winMan = ed.windowManager; + + // Add cell selection logic + ed.onMouseDown.add(function(ed, e) { + if (e.button != 2) { + cleanup(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + dom.bind(ed.getDoc(), 'mouseover', function(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = createTableGrid(table); + tableGrid.setStartCell(startCell); + + ed.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + } + + // Remove current selection + sel = ed.selection.getSel(); + + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + + e.preventDefault(); + } + }); + + ed.onMouseUp.add(function(ed, e) { + var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; + + // Move selection to startCell + if (startCell) { + if (tableGrid) + ed.getBody().style.webkitUserSelect = ''; + + function setPoint(node, start) { + var walker = new tinymce.dom.TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { + if (start) + rng.setStart(node, 0); + else + rng.setEnd(node, node.nodeValue.length); + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) + rng.setStartBefore(node); + else + rng.setEndBefore(node); + + return; + } + } while (node = (start ? walker.next() : walker.prev())); + }; + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mceSelected,th.mceSelected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + + setPoint(node, 1); + walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mceSelected')) + break; + + lastNode = node; + } + } while (node = walker.next()); + + setPoint(lastNode); + + sel.setRng(rng); + } + + ed.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + ed.onKeyUp.add(function(ed, e) { + cleanup(); + }); + + // Add context menu + if (ed && ed.plugins.contextmenu) { + ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { + var sm, se = ed.selection, el = se.getNode() || ed.getBody(); + + if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { + m.removeAll(); + + if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + m.addSeparator(); + } + + if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + m.addSeparator(); + } + + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); + m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); + m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); + m.addSeparator(); + + // Cell menu + sm = m.addMenu({title : 'table.cell'}); + sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); + sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); + sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); + + // Row menu + sm = m.addMenu({title : 'table.row'}); + sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); + sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); + sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); + sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); + sm.addSeparator(); + sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); + sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); + sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); + sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); + + // Column menu + sm = m.addMenu({title : 'table.col'}); + sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); + sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); + sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); + } else + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + if (!tinymce.isIE) { + function fixTableCaretPos() { + var last; + + // Skip empty text nodes form the end + for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; + + if (last && last.nodeName == 'TABLE') + ed.dom.add(ed.getBody(), 'p', null, '
'); + }; + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + var rng, table, dom = ed.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = ed.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && ed.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + ed.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + ed.onKeyUp.add(fixTableCaretPos); + ed.onSetContent.add(fixTableCaretPos); + ed.onVisualAid.add(fixTableCaretPos); + + ed.onPreProcess.add(function(ed, o) { + var last = o.node.lastChild; + + if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR') + ed.dom.remove(last); + }); + + fixTableCaretPos(); + } + }); + + // Register action commands + each({ + mceTableSplitCells : function(grid) { + grid.split(); + }, + + mceTableMergeCells : function(grid) { + var rowSpan, colSpan, cell; + + cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { + winMan.open({ + url : url + '/merge_cells.htm', + width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), + height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), + inline : 1 + }, { + rows : rowSpan, + cols : colSpan, + onaction : function(data) { + grid.merge(cell, data.cols, data.rows); + }, + plugin_url : url + }); + } else + grid.merge(); + }, + + mceTableInsertRowBefore : function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter : function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore : function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter : function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol : function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow : function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow : function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow : function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore : function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter : function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete : function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + ed.addCommand(name, function() { + var grid = createTableGrid(); + + if (grid) { + func(grid); + ed.execCommand('mceRepaint'); + cleanup(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable : function(val) { + winMan.open({ + url : url + '/table.htm', + width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), + height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + action : val ? val.action : 0 + }); + }, + + mceTableRowProps : function() { + winMan.open({ + url : url + '/row.htm', + width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }, + + mceTableCellProps : function() { + winMan.open({ + url : url + '/cell.htm', + width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + } + }, function(func, name) { + ed.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); +})(tinymce); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/entries new file mode 100644 index 0000000..5e8e4b7 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/table/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +row.js +file + + + + +2010-09-04T08:55:28.000000Z +724cf7bff59a96bcfeb7b6a90d6ce86f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7078 + +table.js +file + + + + +2010-09-04T08:55:28.000000Z +f1bdb841e0c265472c23290bb9ecb328 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +13551 + +cell.js +file + + + + +2010-09-04T08:55:28.000000Z +32637786e8e3f75d400abc0c9bc9c5b7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8277 + +merge_cells.js +file + + + + +2010-09-04T08:55:28.000000Z +7f9655fcf059c80b83f62569a97b3d79 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +539 + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/cell.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/cell.js.svn-base new file mode 100644 index 0000000..fae7e6f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/js/.svn/text-base/cell.js.svn-base @@ -0,0 +1,286 @@ +tinyMCEPopup.requireLangPack(); + +var ed; + +function init() { + ed = tinyMCEPopup.editor; + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') + + var inst = ed; + var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th"); + var formObj = document.forms[0]; + var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style")); + + // Get table cell data + var celltype = tdElm.nodeName.toLowerCase(); + var align = ed.dom.getAttrib(tdElm, 'align'); + var valign = ed.dom.getAttrib(tdElm, 'valign'); + var width = trimSize(getStyle(tdElm, 'width', 'width')); + var height = trimSize(getStyle(tdElm, 'height', 'height')); + var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); + var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); + var className = ed.dom.getAttrib(tdElm, 'class'); + var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + var id = ed.dom.getAttrib(tdElm, 'id'); + var lang = ed.dom.getAttrib(tdElm, 'lang'); + var dir = ed.dom.getAttrib(tdElm, 'dir'); + var scope = ed.dom.getAttrib(tdElm, 'scope'); + + // Setup form + addClassesToList('class', 'table_cell_styles'); + TinyMCE_EditableSelects.init(); + + if (!ed.dom.hasClass(tdElm, 'mceSelected')) { + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.backgroundimage.value = backgroundimage; + formObj.width.value = width; + formObj.height.value = height; + formObj.id.value = id; + formObj.lang.value = lang; + formObj.style.value = ed.dom.serializeStyle(st); + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'valign', valign); + selectByValue(formObj, 'class', className, true, true); + selectByValue(formObj, 'celltype', celltype); + selectByValue(formObj, 'dir', dir); + selectByValue(formObj, 'scope', scope); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + } else + tinyMCEPopup.dom.hide('action'); +} + +function updateAction() { + var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0]; + + tinyMCEPopup.restoreSelection(); + el = ed.selection.getStart(); + tdElm = ed.dom.getParent(el, "td,th"); + trElm = ed.dom.getParent(el, "tr"); + tableElm = ed.dom.getParent(el, "table"); + + // Cell is selected + if (ed.dom.hasClass(tdElm, 'mceSelected')) { + // Update all selected sells + tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) { + updateCell(td); + }); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + ed.execCommand('mceBeginUndoLevel'); + + switch (getSelectValue(formObj, 'action')) { + case "cell": + var celltype = getSelectValue(formObj, 'celltype'); + var scope = getSelectValue(formObj, 'scope'); + + function doUpdate(s) { + if (s) { + updateCell(tdElm); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + } + }; + + if (ed.getParam("accessibility_warnings", 1)) { + if (celltype == "th" && scope == "") + tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate); + else + doUpdate(1); + + return; + } + + updateCell(tdElm); + break; + + case "row": + var cell = trElm.firstChild; + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + cell = updateCell(cell, true); + } while ((cell = nextCell(cell)) != null); + + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i 0) { + tinymce.each(tableElm.rows, function(tr) { + var i; + + for (i = 0; i < tr.cells.length; i++) { + if (dom.hasClass(tr.cells[i], 'mceSelected')) { + updateRow(tr, true); + return; + } + } + }); + + inst.addVisual(); + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + inst.execCommand('mceBeginUndoLevel'); + + switch (action) { + case "row": + updateRow(trElm); + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i colLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); + return false; + } else if (rowLimit && rows > rowLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); + return false; + } else if (cellLimit && cols * rows > cellLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); + return false; + } + + // Update table + if (action == "update") { + inst.execCommand('mceBeginUndoLevel'); + + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + dom.setAttrib(elm, 'border', border); + dom.setAttrib(elm, 'align', align); + dom.setAttrib(elm, 'frame', frame); + dom.setAttrib(elm, 'rules', rules); + dom.setAttrib(elm, 'class', className); + dom.setAttrib(elm, 'style', style); + dom.setAttrib(elm, 'id', id); + dom.setAttrib(elm, 'summary', summary); + dom.setAttrib(elm, 'dir', dir); + dom.setAttrib(elm, 'lang', lang); + + capEl = inst.dom.select('caption', elm)[0]; + + if (capEl && !caption) + capEl.parentNode.removeChild(capEl); + + if (!capEl && caption) { + capEl = elm.ownerDocument.createElement('caption'); + + if (!tinymce.isIE) + capEl.innerHTML = '
'; + + elm.insertBefore(capEl, elm.firstChild); + } + + if (width && inst.settings.inline_styles) { + dom.setStyle(elm, 'width', width); + dom.setAttrib(elm, 'width', ''); + } else { + dom.setAttrib(elm, 'width', width, true); + dom.setStyle(elm, 'width', ''); + } + + // Remove these since they are not valid XHTML + dom.setAttrib(elm, 'borderColor', ''); + dom.setAttrib(elm, 'bgColor', ''); + dom.setAttrib(elm, 'background', ''); + + if (height && inst.settings.inline_styles) { + dom.setStyle(elm, 'height', height); + dom.setAttrib(elm, 'height', ''); + } else { + dom.setAttrib(elm, 'height', height, true); + dom.setStyle(elm, 'height', ''); + } + + if (background != '') + elm.style.backgroundImage = "url('" + background + "')"; + else + elm.style.backgroundImage = ''; + +/* if (tinyMCEPopup.getParam("inline_styles")) { + if (width != '') + elm.style.width = getCSSSize(width); + }*/ + + if (bordercolor != "") { + elm.style.borderColor = bordercolor; + elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; + elm.style.borderWidth = border == "" ? "1px" : border; + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + inst.addVisual(); + + // Fix for stange MSIE align bug + //elm.outerHTML = elm.outerHTML; + + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.execCommand('mceRepaint'); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += ''); + + tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { + if (patt) + patt += ','; + + patt += n + ' ._mce_marker'; + }); + + tinymce.each(inst.dom.select(patt), function(n) { + inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); + }); + + dom.setOuterHTML(dom.select('br._mce_marker')[0], html); + } else + inst.execCommand('mceInsertContent', false, html); + + tinymce.each(dom.select('table[_mce_new]'), function(node) { + var td = dom.select('td', node); + + inst.selection.select(td[0], true); + inst.selection.collapse(); + + dom.setAttrib(node, '_mce_new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel'); + + tinyMCEPopup.close(); +} + +function makeAttrib(attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib]; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value == "") + return ""; + + // XML encode it + value = value.replace(/&/g, '&'); + value = value.replace(/\"/g, '"'); + value = value.replace(//g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame; + var inst = tinyMCEPopup.editor, dom = inst.dom; + var formObj = document.forms[0]; + var elm = dom.getParent(inst.selection.getNode(), "table"); + + action = tinyMCEPopup.getWindowArg('action'); + + if (!action) + action = elm ? "update" : "insert"; + + if (elm && action != "insert") { + var rowsAr = elm.rows; + var cols = 0; + for (var i=0; i cols) + cols = rowsAr[i].cells.length; + + cols = cols; + rows = rowsAr.length; + + st = dom.parseStyle(dom.getAttrib(elm, "style")); + border = trimSize(getStyle(elm, 'border', 'borderWidth')); + cellpadding = dom.getAttrib(elm, 'cellpadding', ""); + cellspacing = dom.getAttrib(elm, 'cellspacing', ""); + width = trimSize(getStyle(elm, 'width', 'width')); + height = trimSize(getStyle(elm, 'height', 'height')); + bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); + bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); + align = dom.getAttrib(elm, 'align', align); + frame = dom.getAttrib(elm, 'frame'); + rules = dom.getAttrib(elm, 'rules'); + className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); + id = dom.getAttrib(elm, 'id'); + summary = dom.getAttrib(elm, 'summary'); + style = dom.serializeStyle(st); + dir = dom.getAttrib(elm, 'dir'); + lang = dom.getAttrib(elm, 'lang'); + background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; + + orgTableWidth = width; + orgTableHeight = height; + + action = "update"; + formObj.insert.value = inst.getLang('update'); + } + + addClassesToList('class', "table_styles"); + TinyMCE_EditableSelects.init(); + + // Update form + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'tframe', frame); + selectByValue(formObj, 'rules', rules); + selectByValue(formObj, 'class', className, true, true); + formObj.cols.value = cols; + formObj.rows.value = rows; + formObj.border.value = border; + formObj.cellpadding.value = cellpadding; + formObj.cellspacing.value = cellspacing; + formObj.width.value = width; + formObj.height.value = height; + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.id.value = id; + formObj.summary.value = summary; + formObj.style.value = style; + formObj.dir.value = dir; + formObj.lang.value = lang; + formObj.backgroundimage.value = background; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + // Disable some fields in update mode + if (action == "update") { + formObj.cols.disabled = true; + formObj.rows.disabled = true; + } +} + +function changedSize() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + +/* var width = formObj.width.value; + if (width != "") + st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; + else + st['width'] = "";*/ + + var height = formObj.height.value; + if (height != "") + st['height'] = getCSSSize(height); + else + st['height'] = ""; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBackgroundImage() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBorder() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + // Update border width if the element has a color + if (formObj.border.value != "" && formObj.bordercolor.value != "") + st['border-width'] = formObj.border.value + "px"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedColor() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-color'] = formObj.bgcolor.value; + + if (formObj.bordercolor.value != "") { + st['border-color'] = formObj.bordercolor.value; + + // Add border-width if it's missing + if (!st['border-width']) + st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px"; + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedStyle() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + if (st['background-image']) + formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + else + formObj.backgroundimage.value = ''; + + if (st['width']) + formObj.width.value = trimSize(st['width']); + + if (st['height']) + formObj.height.value = trimSize(st['height']); + + if (st['background-color']) { + formObj.bgcolor.value = st['background-color']; + updateColor('bgcolor_pick','bgcolor'); + } + + if (st['border-color']) { + formObj.bordercolor.value = st['border-color']; + updateColor('bordercolor_pick','bordercolor'); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/table/js/cell.js b/app/plugins/tinymce/webroot/js/plugins/table/js/cell.js new file mode 100644 index 0000000..fae7e6f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/js/cell.js @@ -0,0 +1,286 @@ +tinyMCEPopup.requireLangPack(); + +var ed; + +function init() { + ed = tinyMCEPopup.editor; + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') + + var inst = ed; + var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th"); + var formObj = document.forms[0]; + var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style")); + + // Get table cell data + var celltype = tdElm.nodeName.toLowerCase(); + var align = ed.dom.getAttrib(tdElm, 'align'); + var valign = ed.dom.getAttrib(tdElm, 'valign'); + var width = trimSize(getStyle(tdElm, 'width', 'width')); + var height = trimSize(getStyle(tdElm, 'height', 'height')); + var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); + var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); + var className = ed.dom.getAttrib(tdElm, 'class'); + var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + var id = ed.dom.getAttrib(tdElm, 'id'); + var lang = ed.dom.getAttrib(tdElm, 'lang'); + var dir = ed.dom.getAttrib(tdElm, 'dir'); + var scope = ed.dom.getAttrib(tdElm, 'scope'); + + // Setup form + addClassesToList('class', 'table_cell_styles'); + TinyMCE_EditableSelects.init(); + + if (!ed.dom.hasClass(tdElm, 'mceSelected')) { + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.backgroundimage.value = backgroundimage; + formObj.width.value = width; + formObj.height.value = height; + formObj.id.value = id; + formObj.lang.value = lang; + formObj.style.value = ed.dom.serializeStyle(st); + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'valign', valign); + selectByValue(formObj, 'class', className, true, true); + selectByValue(formObj, 'celltype', celltype); + selectByValue(formObj, 'dir', dir); + selectByValue(formObj, 'scope', scope); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + } else + tinyMCEPopup.dom.hide('action'); +} + +function updateAction() { + var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0]; + + tinyMCEPopup.restoreSelection(); + el = ed.selection.getStart(); + tdElm = ed.dom.getParent(el, "td,th"); + trElm = ed.dom.getParent(el, "tr"); + tableElm = ed.dom.getParent(el, "table"); + + // Cell is selected + if (ed.dom.hasClass(tdElm, 'mceSelected')) { + // Update all selected sells + tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) { + updateCell(td); + }); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + ed.execCommand('mceBeginUndoLevel'); + + switch (getSelectValue(formObj, 'action')) { + case "cell": + var celltype = getSelectValue(formObj, 'celltype'); + var scope = getSelectValue(formObj, 'scope'); + + function doUpdate(s) { + if (s) { + updateCell(tdElm); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + } + }; + + if (ed.getParam("accessibility_warnings", 1)) { + if (celltype == "th" && scope == "") + tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate); + else + doUpdate(1); + + return; + } + + updateCell(tdElm); + break; + + case "row": + var cell = trElm.firstChild; + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + cell = updateCell(cell, true); + } while ((cell = nextCell(cell)) != null); + + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i 0) { + tinymce.each(tableElm.rows, function(tr) { + var i; + + for (i = 0; i < tr.cells.length; i++) { + if (dom.hasClass(tr.cells[i], 'mceSelected')) { + updateRow(tr, true); + return; + } + } + }); + + inst.addVisual(); + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + inst.execCommand('mceBeginUndoLevel'); + + switch (action) { + case "row": + updateRow(trElm); + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i colLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); + return false; + } else if (rowLimit && rows > rowLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); + return false; + } else if (cellLimit && cols * rows > cellLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); + return false; + } + + // Update table + if (action == "update") { + inst.execCommand('mceBeginUndoLevel'); + + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + dom.setAttrib(elm, 'border', border); + dom.setAttrib(elm, 'align', align); + dom.setAttrib(elm, 'frame', frame); + dom.setAttrib(elm, 'rules', rules); + dom.setAttrib(elm, 'class', className); + dom.setAttrib(elm, 'style', style); + dom.setAttrib(elm, 'id', id); + dom.setAttrib(elm, 'summary', summary); + dom.setAttrib(elm, 'dir', dir); + dom.setAttrib(elm, 'lang', lang); + + capEl = inst.dom.select('caption', elm)[0]; + + if (capEl && !caption) + capEl.parentNode.removeChild(capEl); + + if (!capEl && caption) { + capEl = elm.ownerDocument.createElement('caption'); + + if (!tinymce.isIE) + capEl.innerHTML = '
'; + + elm.insertBefore(capEl, elm.firstChild); + } + + if (width && inst.settings.inline_styles) { + dom.setStyle(elm, 'width', width); + dom.setAttrib(elm, 'width', ''); + } else { + dom.setAttrib(elm, 'width', width, true); + dom.setStyle(elm, 'width', ''); + } + + // Remove these since they are not valid XHTML + dom.setAttrib(elm, 'borderColor', ''); + dom.setAttrib(elm, 'bgColor', ''); + dom.setAttrib(elm, 'background', ''); + + if (height && inst.settings.inline_styles) { + dom.setStyle(elm, 'height', height); + dom.setAttrib(elm, 'height', ''); + } else { + dom.setAttrib(elm, 'height', height, true); + dom.setStyle(elm, 'height', ''); + } + + if (background != '') + elm.style.backgroundImage = "url('" + background + "')"; + else + elm.style.backgroundImage = ''; + +/* if (tinyMCEPopup.getParam("inline_styles")) { + if (width != '') + elm.style.width = getCSSSize(width); + }*/ + + if (bordercolor != "") { + elm.style.borderColor = bordercolor; + elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; + elm.style.borderWidth = border == "" ? "1px" : border; + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + inst.addVisual(); + + // Fix for stange MSIE align bug + //elm.outerHTML = elm.outerHTML; + + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.execCommand('mceRepaint'); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += ''); + + tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { + if (patt) + patt += ','; + + patt += n + ' ._mce_marker'; + }); + + tinymce.each(inst.dom.select(patt), function(n) { + inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); + }); + + dom.setOuterHTML(dom.select('br._mce_marker')[0], html); + } else + inst.execCommand('mceInsertContent', false, html); + + tinymce.each(dom.select('table[_mce_new]'), function(node) { + var td = dom.select('td', node); + + inst.selection.select(td[0], true); + inst.selection.collapse(); + + dom.setAttrib(node, '_mce_new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel'); + + tinyMCEPopup.close(); +} + +function makeAttrib(attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib]; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value == "") + return ""; + + // XML encode it + value = value.replace(/&/g, '&'); + value = value.replace(/\"/g, '"'); + value = value.replace(//g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame; + var inst = tinyMCEPopup.editor, dom = inst.dom; + var formObj = document.forms[0]; + var elm = dom.getParent(inst.selection.getNode(), "table"); + + action = tinyMCEPopup.getWindowArg('action'); + + if (!action) + action = elm ? "update" : "insert"; + + if (elm && action != "insert") { + var rowsAr = elm.rows; + var cols = 0; + for (var i=0; i cols) + cols = rowsAr[i].cells.length; + + cols = cols; + rows = rowsAr.length; + + st = dom.parseStyle(dom.getAttrib(elm, "style")); + border = trimSize(getStyle(elm, 'border', 'borderWidth')); + cellpadding = dom.getAttrib(elm, 'cellpadding', ""); + cellspacing = dom.getAttrib(elm, 'cellspacing', ""); + width = trimSize(getStyle(elm, 'width', 'width')); + height = trimSize(getStyle(elm, 'height', 'height')); + bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); + bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); + align = dom.getAttrib(elm, 'align', align); + frame = dom.getAttrib(elm, 'frame'); + rules = dom.getAttrib(elm, 'rules'); + className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); + id = dom.getAttrib(elm, 'id'); + summary = dom.getAttrib(elm, 'summary'); + style = dom.serializeStyle(st); + dir = dom.getAttrib(elm, 'dir'); + lang = dom.getAttrib(elm, 'lang'); + background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; + + orgTableWidth = width; + orgTableHeight = height; + + action = "update"; + formObj.insert.value = inst.getLang('update'); + } + + addClassesToList('class', "table_styles"); + TinyMCE_EditableSelects.init(); + + // Update form + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'tframe', frame); + selectByValue(formObj, 'rules', rules); + selectByValue(formObj, 'class', className, true, true); + formObj.cols.value = cols; + formObj.rows.value = rows; + formObj.border.value = border; + formObj.cellpadding.value = cellpadding; + formObj.cellspacing.value = cellspacing; + formObj.width.value = width; + formObj.height.value = height; + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.id.value = id; + formObj.summary.value = summary; + formObj.style.value = style; + formObj.dir.value = dir; + formObj.lang.value = lang; + formObj.backgroundimage.value = background; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + // Disable some fields in update mode + if (action == "update") { + formObj.cols.disabled = true; + formObj.rows.disabled = true; + } +} + +function changedSize() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + +/* var width = formObj.width.value; + if (width != "") + st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; + else + st['width'] = "";*/ + + var height = formObj.height.value; + if (height != "") + st['height'] = getCSSSize(height); + else + st['height'] = ""; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBackgroundImage() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBorder() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + // Update border width if the element has a color + if (formObj.border.value != "" && formObj.bordercolor.value != "") + st['border-width'] = formObj.border.value + "px"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedColor() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-color'] = formObj.bgcolor.value; + + if (formObj.bordercolor.value != "") { + st['border-color'] = formObj.bordercolor.value; + + // Add border-width if it's missing + if (!st['border-width']) + st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px"; + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedStyle() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + if (st['background-image']) + formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + else + formObj.backgroundimage.value = ''; + + if (st['width']) + formObj.width.value = trimSize(st['width']); + + if (st['height']) + formObj.height.value = trimSize(st['height']); + + if (st['background-color']) { + formObj.bgcolor.value = st['background-color']; + updateColor('bgcolor_pick','bgcolor'); + } + + if (st['border-color']) { + formObj.bordercolor.value = st['border-color']; + updateColor('bordercolor_pick','bordercolor'); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/entries new file mode 100644 index 0000000..b839969 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/table/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +15e65841dce0729b82812f84753fb529 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2064 + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..a33c987 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,74 @@ +tinyMCE.addI18n('en.table_dlg',{ +general_tab:"General", +advanced_tab:"Advanced", +general_props:"General properties", +advanced_props:"Advanced properties", +rowtype:"Row in table part", +title:"Insert/Modify table", +width:"Width", +height:"Height", +cols:"Cols", +rows:"Rows", +cellspacing:"Cellspacing", +cellpadding:"Cellpadding", +border:"Border", +align:"Alignment", +align_default:"Default", +align_left:"Left", +align_right:"Right", +align_middle:"Center", +row_title:"Table row properties", +cell_title:"Table cell properties", +cell_type:"Cell type", +valign:"Vertical alignment", +align_top:"Top", +align_bottom:"Bottom", +bordercolor:"Border color", +bgcolor:"Background color", +merge_cells_title:"Merge table cells", +id:"Id", +style:"Style", +langdir:"Language direction", +langcode:"Language code", +mime:"Target MIME type", +ltr:"Left to right", +rtl:"Right to left", +bgimage:"Background image", +summary:"Summary", +td:"Data", +th:"Header", +cell_cell:"Update current cell", +cell_row:"Update all cells in row", +cell_all:"Update all cells in table", +row_row:"Update current row", +row_odd:"Update odd rows in table", +row_even:"Update even rows in table", +row_all:"Update all rows in table", +thead:"Table Head", +tbody:"Table Body", +tfoot:"Table Foot", +scope:"Scope", +rowgroup:"Row Group", +colgroup:"Col Group", +col_limit:"You've exceeded the maximum number of columns of {$cols}.", +row_limit:"You've exceeded the maximum number of rows of {$rows}.", +cell_limit:"You've exceeded the maximum number of cells of {$cells}.", +missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.", +caption:"Table caption", +frame:"Frame", +frame_none:"none", +frame_groups:"groups", +frame_rows:"rows", +frame_cols:"cols", +frame_all:"all", +rules:"Rules", +rules_void:"void", +rules_above:"above", +rules_below:"below", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..a33c987 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/langs/en_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('en.table_dlg',{ +general_tab:"General", +advanced_tab:"Advanced", +general_props:"General properties", +advanced_props:"Advanced properties", +rowtype:"Row in table part", +title:"Insert/Modify table", +width:"Width", +height:"Height", +cols:"Cols", +rows:"Rows", +cellspacing:"Cellspacing", +cellpadding:"Cellpadding", +border:"Border", +align:"Alignment", +align_default:"Default", +align_left:"Left", +align_right:"Right", +align_middle:"Center", +row_title:"Table row properties", +cell_title:"Table cell properties", +cell_type:"Cell type", +valign:"Vertical alignment", +align_top:"Top", +align_bottom:"Bottom", +bordercolor:"Border color", +bgcolor:"Background color", +merge_cells_title:"Merge table cells", +id:"Id", +style:"Style", +langdir:"Language direction", +langcode:"Language code", +mime:"Target MIME type", +ltr:"Left to right", +rtl:"Right to left", +bgimage:"Background image", +summary:"Summary", +td:"Data", +th:"Header", +cell_cell:"Update current cell", +cell_row:"Update all cells in row", +cell_all:"Update all cells in table", +row_row:"Update current row", +row_odd:"Update odd rows in table", +row_even:"Update even rows in table", +row_all:"Update all rows in table", +thead:"Table Head", +tbody:"Table Body", +tfoot:"Table Foot", +scope:"Scope", +rowgroup:"Row Group", +colgroup:"Col Group", +col_limit:"You've exceeded the maximum number of columns of {$cols}.", +row_limit:"You've exceeded the maximum number of rows of {$rows}.", +cell_limit:"You've exceeded the maximum number of cells of {$cells}.", +missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.", +caption:"Table caption", +frame:"Frame", +frame_none:"none", +frame_groups:"groups", +frame_rows:"rows", +frame_cols:"cols", +frame_all:"all", +rules:"Rules", +rules_void:"void", +rules_above:"above", +rules_below:"below", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/table/merge_cells.htm b/app/plugins/tinymce/webroot/js/plugins/table/merge_cells.htm new file mode 100644 index 0000000..b1a8d9b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/merge_cells.htm @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
+
+ {#table_dlg.merge_cells_title} + + + + + + + + + +
{#table_dlg.cols}:
{#table_dlg.rows}:
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/row.htm b/app/plugins/tinymce/webroot/js/plugins/table/row.htm new file mode 100644 index 0000000..33fc9cc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/row.htm @@ -0,0 +1,155 @@ + + + + {#table_dlg.row_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/table/table.htm b/app/plugins/tinymce/webroot/js/plugins/table/table.htm new file mode 100644 index 0000000..122b04a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/table/table.htm @@ -0,0 +1,187 @@ + + + + {#table_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/template/.svn/entries new file mode 100644 index 0000000..d3e4b29 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/.svn/entries @@ -0,0 +1,173 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/template +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +70cb20c4e287110ae8aeed999893c532 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3302 + +template.htm +file + + + + +2010-09-04T08:55:28.000000Z +db11b816cfdd77ce3215d98b454e122b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1410 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +659f6b605beb1072a368fcaf36654161 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4828 + +css +dir + +js +dir + +blank.htm +file + + + + +2010-09-04T08:55:28.000000Z +9089127d1ef7411473edea629d4be1ce +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +320 + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/blank.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/blank.htm.svn-base new file mode 100644 index 0000000..538a3b1 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/blank.htm.svn-base @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length 0) { + el = dom.create('div', null); + el.appendChild(n[0].cloneNode(true)); + } + + function hasClass(n, c) { + return new RegExp('\\b' + c + '\\b', 'g').test(n.className); + }; + + each(dom.select('*', el), function(n) { + // Replace cdate + if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); + + // Replace mdate + if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); + + // Replace selection + if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) + n.innerHTML = sel; + }); + + t._replaceVals(el); + + ed.execCommand('mceInsertContent', false, el.innerHTML); + ed.addVisual(); + }, + + _replaceVals : function(e) { + var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); + + each(dom.select('*', e), function(e) { + each(vl, function(v, k) { + if (dom.hasClass(e, k)) { + if (typeof(vl[k]) == 'function') + vl[k](e); + } + }); + }); + }, + + _getDateTime : function(d, fmt) { + if (!fmt) + return ""; + + function addZeros(value, len) { + var i; + + value = "" + value; + + if (value.length < len) { + for (i=0; i<(len-value.length); i++) + value = "0" + value; + } + + return value; + } + + fmt = fmt.replace("%D", "%m/%d/%y"); + fmt = fmt.replace("%r", "%I:%M:%S %p"); + fmt = fmt.replace("%Y", "" + d.getFullYear()); + fmt = fmt.replace("%y", "" + d.getYear()); + fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); + fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); + fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); + fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); + fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); + fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); + fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); + fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); + fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); + fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); + fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); + fmt = fmt.replace("%%", "%"); + + return fmt; + } + }); + + // Register plugin + tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/template.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/template.htm.svn-base new file mode 100644 index 0000000..59b7cdc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/.svn/text-base/template.htm.svn-base @@ -0,0 +1,31 @@ + + + {#template_dlg.title} + + + + + +
+
+
{#template_dlg.desc}
+
+ +
+
+
+
+ {#template_dlg.preview} + +
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/blank.htm b/app/plugins/tinymce/webroot/js/plugins/template/blank.htm new file mode 100644 index 0000000..538a3b1 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/entries new file mode 100644 index 0000000..e067488 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/template/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +template.css +file + + + + +2010-09-04T08:55:28.000000Z +6cc98d131d493071f2b14dac07f2cdbd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +252 + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/text-base/template.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/text-base/template.css.svn-base new file mode 100644 index 0000000..0a03f2e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/css/.svn/text-base/template.css.svn-base @@ -0,0 +1,23 @@ +#frmbody { + padding: 10px; + background-color: #FFF; + border: 1px solid #CCC; +} + +.frmRow { + margin-bottom: 10px; +} + +#templatesrc { + border: none; + width: 320px; + height: 240px; +} + +.title { + padding-bottom: 5px; +} + +.mceActionPanel { + padding-top: 5px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/template/css/template.css b/app/plugins/tinymce/webroot/js/plugins/template/css/template.css new file mode 100644 index 0000000..0a03f2e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/css/template.css @@ -0,0 +1,23 @@ +#frmbody { + padding: 10px; + background-color: #FFF; + border: 1px solid #CCC; +} + +.frmRow { + margin-bottom: 10px; +} + +#templatesrc { + border: none; + width: 320px; + height: 240px; +} + +.title { + padding-bottom: 5px; +} + +.mceActionPanel { + padding-top: 5px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/template/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length 0) { + el = dom.create('div', null); + el.appendChild(n[0].cloneNode(true)); + } + + function hasClass(n, c) { + return new RegExp('\\b' + c + '\\b', 'g').test(n.className); + }; + + each(dom.select('*', el), function(n) { + // Replace cdate + if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); + + // Replace mdate + if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); + + // Replace selection + if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) + n.innerHTML = sel; + }); + + t._replaceVals(el); + + ed.execCommand('mceInsertContent', false, el.innerHTML); + ed.addVisual(); + }, + + _replaceVals : function(e) { + var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); + + each(dom.select('*', e), function(e) { + each(vl, function(v, k) { + if (dom.hasClass(e, k)) { + if (typeof(vl[k]) == 'function') + vl[k](e); + } + }); + }); + }, + + _getDateTime : function(d, fmt) { + if (!fmt) + return ""; + + function addZeros(value, len) { + var i; + + value = "" + value; + + if (value.length < len) { + for (i=0; i<(len-value.length); i++) + value = "0" + value; + } + + return value; + } + + fmt = fmt.replace("%D", "%m/%d/%y"); + fmt = fmt.replace("%r", "%I:%M:%S %p"); + fmt = fmt.replace("%Y", "" + d.getFullYear()); + fmt = fmt.replace("%y", "" + d.getYear()); + fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); + fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); + fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); + fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); + fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); + fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); + fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); + fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); + fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); + fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); + fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); + fmt = fmt.replace("%%", "%"); + + return fmt; + } + }); + + // Register plugin + tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/entries new file mode 100644 index 0000000..876ba54 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/template/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +template.js +file + + + + +2010-09-04T08:55:28.000000Z +e65e4c8007b1528670790af8c48e07dc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2672 + diff --git a/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/text-base/template.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/text-base/template.js.svn-base new file mode 100644 index 0000000..7eab2eb --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/template/js/.svn/text-base/template.js.svn-base @@ -0,0 +1,106 @@ +tinyMCEPopup.requireLangPack(); + +var TemplateDialog = { + preInit : function() { + var url = tinyMCEPopup.getParam("template_external_list_url"); + + if (url != null) + document.write(''); + }, + + init : function() { + var ed = tinyMCEPopup.editor, tsrc, sel, x, u; + + tsrc = ed.getParam("template_templates", false); + sel = document.getElementById('tpath'); + + // Setup external template list + if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { + for (x=0, tsrc = []; x'); + }); + }, + + selectTemplate : function(u, ti) { + var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; + + if (!u) + return; + + d.body.innerHTML = this.templateHTML = this.getFileContents(u); + + for (x=0; x'); + }, + + init : function() { + var ed = tinyMCEPopup.editor, tsrc, sel, x, u; + + tsrc = ed.getParam("template_templates", false); + sel = document.getElementById('tpath'); + + // Setup external template list + if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { + for (x=0, tsrc = []; x'); + }); + }, + + selectTemplate : function(u, ti) { + var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; + + if (!u) + return; + + d.body.innerHTML = this.templateHTML = this.getFileContents(u); + + for (x=0; x + + {#template_dlg.title} + + + + + +
+
+
{#template_dlg.desc}
+
+ +
+
+
+
+ {#template_dlg.preview} + +
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/entries new file mode 100644 index 0000000..ca7927f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/visualchars +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +89874ab0a21e056d02a6f1d77fa8288a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1364 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +8af299847e91d625f34a85ceb14afeda +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2109 + diff --git a/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..94719f9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..33b687f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/visualchars/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,83 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualChars', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceVisualChars', t._toggleVisualChars, t); + + // Register buttons + ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); + + ed.onBeforeGetContent.add(function(ed, o) { + if (t.state && o.format != 'raw' && !o.draft) { + t.state = true; + t._toggleVisualChars(false); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual characters', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _toggleVisualChars : function(bookmark) { + var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; + + t.state = !t.state; + ed.controlManager.setActive('visualchars', t.state); + + if (bookmark) + bm = s.getBookmark(); + + if (t.state) { + nl = []; + tinymce.walk(b, function(n) { + if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) + nl.push(n); + }, 'childNodes'); + + for (i = 0; i < nl.length; i++) { + nv = nl[i].nodeValue; + nv = nv.replace(/(\u00a0)/g, '$1'); + + div = ed.dom.create('div', null, nv); + while (node = div.lastChild) + ed.dom.insertAfter(node, nl[i]); + + ed.dom.remove(nl[i]); + } + } else { + nl = ed.dom.select('span.mceItemNbsp', b); + + for (i = nl.length - 1; i >= 0; i--) + ed.dom.remove(nl[i], 1); + } + + s.moveToBookmark(bm); + } + }); + + // Register plugin + tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..94719f9 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..33b687f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/visualchars/editor_plugin_src.js @@ -0,0 +1,83 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualChars', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceVisualChars', t._toggleVisualChars, t); + + // Register buttons + ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); + + ed.onBeforeGetContent.add(function(ed, o) { + if (t.state && o.format != 'raw' && !o.draft) { + t.state = true; + t._toggleVisualChars(false); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual characters', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _toggleVisualChars : function(bookmark) { + var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; + + t.state = !t.state; + ed.controlManager.setActive('visualchars', t.state); + + if (bookmark) + bm = s.getBookmark(); + + if (t.state) { + nl = []; + tinymce.walk(b, function(n) { + if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) + nl.push(n); + }, 'childNodes'); + + for (i = 0; i < nl.length; i++) { + nv = nl[i].nodeValue; + nv = nv.replace(/(\u00a0)/g, '$1'); + + div = ed.dom.create('div', null, nv); + while (node = div.lastChild) + ed.dom.insertAfter(node, nl[i]); + + ed.dom.remove(nl[i]); + } + } else { + nl = ed.dom.select('span.mceItemNbsp', b); + + for (i = nl.length - 1; i >= 0; i--) + ed.dom.remove(nl[i], 1); + } + + s.moveToBookmark(bm); + } + }); + + // Register plugin + tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/entries new file mode 100644 index 0000000..3fc805c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/wordcount +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +46cb9be28db5e11187e57a3507a78d80 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1518 + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +b00b81da2af4b78c65f316116e19a201 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2483 + diff --git a/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..a099e6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(h,"span",{},'0')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..0dc9e34 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/wordcount/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,98 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.WordCount', { + block : 0, + id : null, + countre : null, + cleanre : null, + + init : function(ed, url) { + var t = this, last = 0; + + t.countre = ed.getParam('wordcount_countregex', /\S\s+/g); + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$'"_+=\\\/-]*/g); + t.id = ed.id + '-word-count'; + + ed.onPostRender.add(function(ed, cm) { + var row, id; + + // Add it to the specified id or the theme advanced path + id = ed.getParam('wordcount_target_id'); + if (!id) { + row = tinymce.DOM.get(ed.id + '_path_row'); + + if (row) + tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); + } else + tinymce.DOM.add(id, 'span', {}, '0'); + }); + + ed.onInit.add(function(ed) { + ed.selection.onSetContent.add(function() { + t._count(ed); + }); + + t._count(ed); + }); + + ed.onSetContent.add(function(ed) { + t._count(ed); + }); + + ed.onKeyUp.add(function(ed, e) { + if (e.keyCode == last) + return; + + if (13 == e.keyCode || 8 == last || 46 == last) + t._count(ed); + + last = e.keyCode; + }); + }, + + _count : function(ed) { + var t = this, tc = 0; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + var tx = ed.getContent({format : 'raw'}); + + if (tx) { + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation + tx.replace(t.countre, function() {tc++;}); // count the words + } + + tinymce.DOM.setHTML(t.id, tc.toString()); + + setTimeout(function() {t.block = 0;}, 2000); + }, 1); + }, + + getInfo: function() { + return { + longname : 'Word Count plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..a099e6a --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(h,"span",{},'0')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..0dc9e34 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/wordcount/editor_plugin_src.js @@ -0,0 +1,98 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.WordCount', { + block : 0, + id : null, + countre : null, + cleanre : null, + + init : function(ed, url) { + var t = this, last = 0; + + t.countre = ed.getParam('wordcount_countregex', /\S\s+/g); + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$'"_+=\\\/-]*/g); + t.id = ed.id + '-word-count'; + + ed.onPostRender.add(function(ed, cm) { + var row, id; + + // Add it to the specified id or the theme advanced path + id = ed.getParam('wordcount_target_id'); + if (!id) { + row = tinymce.DOM.get(ed.id + '_path_row'); + + if (row) + tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); + } else + tinymce.DOM.add(id, 'span', {}, '0'); + }); + + ed.onInit.add(function(ed) { + ed.selection.onSetContent.add(function() { + t._count(ed); + }); + + t._count(ed); + }); + + ed.onSetContent.add(function(ed) { + t._count(ed); + }); + + ed.onKeyUp.add(function(ed, e) { + if (e.keyCode == last) + return; + + if (13 == e.keyCode || 8 == last || 46 == last) + t._count(ed); + + last = e.keyCode; + }); + }, + + _count : function(ed) { + var t = this, tc = 0; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + var tx = ed.getContent({format : 'raw'}); + + if (tx) { + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation + tx.replace(t.countre, function() {tc++;}); // count the words + } + + tinymce.DOM.setHTML(t.id, tc.toString()); + + setTimeout(function() {t.block = 0;}, 2000); + }, 1); + }, + + getInfo: function() { + return { + longname : 'Word Count plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); +})(); diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/entries new file mode 100644 index 0000000..0d33054 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/entries @@ -0,0 +1,309 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +acronym.htm +file + + + + +2010-09-04T08:55:28.000000Z +08b443f2dda1d3299655455344373306 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5909 + +editor_plugin.js +file + + + + +2010-09-04T08:55:28.000000Z +a944acb67f43cde2a981bb88fef58d0d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2645 + +ins.htm +file + + + + +2010-09-04T08:55:28.000000Z +c0b7bd28d29b0efc7df0380b5609c763 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6845 + +langs +dir + +editor_plugin_src.js +file + + + + +2010-09-04T08:55:28.000000Z +e85460facc3c38a3da0b7e3cd4bd5b17 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3848 + +css +dir + +cite.htm +file + + + + +2010-09-04T08:55:28.000000Z +f706bb482de6ba90b977c99330c0c90e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5897 + +del.htm +file + + + + +2010-09-04T08:55:28.000000Z +8cafdb2cdf6c5aca494d51fd042a71c6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6843 + +js +dir + +abbr.htm +file + + + + +2010-09-04T08:55:28.000000Z +8484799d84af1d8fa9661488223a0774 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5897 + +attributes.htm +file + + + + +2010-09-04T08:55:28.000000Z +22545526717f57b4f1f0d249920acdf4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5855 + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/abbr.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/abbr.htm.svn-base new file mode 100644 index 0000000..0282fff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/abbr.htm.svn-base @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/acronym.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/acronym.htm.svn-base new file mode 100644 index 0000000..e0ed031 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/acronym.htm.svn-base @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/attributes.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/attributes.htm.svn-base new file mode 100644 index 0000000..fc5ba97 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/attributes.htm.svn-base @@ -0,0 +1,148 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
+ +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/cite.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/cite.htm.svn-base new file mode 100644 index 0000000..b23becc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/cite.htm.svn-base @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/del.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/del.htm.svn-base new file mode 100644 index 0000000..bc80944 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/del.htm.svn-base @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin.js.svn-base new file mode 100644 index 0000000..a9393ad --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin.js.svn-base @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin_src.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin_src.js.svn-base new file mode 100644 index 0000000..1f3f770 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/editor_plugin_src.js.svn-base @@ -0,0 +1,132 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceCite', function() { + ed.windowManager.open({ + file : url + '/cite.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAcronym', function() { + ed.windowManager.open({ + file : url + '/acronym.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAbbr', function() { + ed.windowManager.open({ + file : url + '/abbr.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceDel', function() { + ed.windowManager.open({ + file : url + '/del.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceIns', function() { + ed.windowManager.open({ + file : url + '/ins.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380, + height : 370, + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); + ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); + ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); + ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); + ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); + ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); + + ed.onNodeChange.add(function(ed, cm, n, co) { + n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); + + cm.setDisabled('cite', co); + cm.setDisabled('acronym', co); + cm.setDisabled('abbr', co); + cm.setDisabled('del', co); + cm.setDisabled('ins', co); + cm.setDisabled('attribs', n && n.nodeName == 'BODY'); + cm.setActive('cite', 0); + cm.setActive('acronym', 0); + cm.setActive('abbr', 0); + cm.setActive('del', 0); + cm.setActive('ins', 0); + + // Activate all + if (n) { + do { + cm.setDisabled(n.nodeName.toLowerCase(), 0); + cm.setActive(n.nodeName.toLowerCase(), 1); + } while (n = n.parentNode); + } + }); + + ed.onPreInit.add(function() { + // Fixed IE issue where it can't handle these elements correctly + ed.dom.create('abbr'); + }); + }, + + getInfo : function() { + return { + longname : 'XHTML Xtras Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/ins.htm.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/ins.htm.svn-base new file mode 100644 index 0000000..9448d67 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/.svn/text-base/ins.htm.svn-base @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/abbr.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..0282fff --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/abbr.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/acronym.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..e0ed031 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/acronym.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/attributes.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..fc5ba97 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/attributes.htm @@ -0,0 +1,148 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
+ +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/cite.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..b23becc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/cite.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/entries new file mode 100644 index 0000000..9f57a30 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +popup.css +file + + + + +2010-09-04T08:55:28.000000Z +80b339ec8c041f8adc5aecb03c7d6f99 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +505 + +attributes.css +file + + + + +2010-09-04T08:55:28.000000Z +289bd1e4958e04caf7fac5e4613732fd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +186 + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/attributes.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/attributes.css.svn-base new file mode 100644 index 0000000..85b1b37 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/attributes.css.svn-base @@ -0,0 +1,11 @@ +.panel_wrapper div.current { + height: 290px; +} + +#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { + width: 200px; +} + +#events_panel input { + width: 200px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/popup.css.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/popup.css.svn-base new file mode 100644 index 0000000..034b985 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/.svn/text-base/popup.css.svn-base @@ -0,0 +1,9 @@ +input.field, select.field {width:200px;} +input.picker {width:179px; margin-left: 5px;} +input.disabled {border-color:#F2F2F2;} +img.picker {vertical-align:text-bottom; cursor:pointer;} +h1 {padding: 0 0 5px 0;} +.panel_wrapper div.current {height:160px;} +#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} +a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} +#datetime {width:180px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/attributes.css b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..85b1b37 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/attributes.css @@ -0,0 +1,11 @@ +.panel_wrapper div.current { + height: 290px; +} + +#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { + width: 200px; +} + +#events_panel input { + width: 200px; +} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/popup.css b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..034b985 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/css/popup.css @@ -0,0 +1,9 @@ +input.field, select.field {width:200px;} +input.picker {width:179px; margin-left: 5px;} +input.disabled {border-color:#F2F2F2;} +img.picker {vertical-align:text-bottom; cursor:pointer;} +h1 {padding: 0 0 5px 0;} +.panel_wrapper div.current {height:160px;} +#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} +a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} +#datetime {width:180px;} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/del.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..bc80944 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/del.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin.js b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..a9393ad --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin_src.js b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..1f3f770 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/editor_plugin_src.js @@ -0,0 +1,132 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceCite', function() { + ed.windowManager.open({ + file : url + '/cite.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAcronym', function() { + ed.windowManager.open({ + file : url + '/acronym.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAbbr', function() { + ed.windowManager.open({ + file : url + '/abbr.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceDel', function() { + ed.windowManager.open({ + file : url + '/del.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceIns', function() { + ed.windowManager.open({ + file : url + '/ins.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380, + height : 370, + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); + ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); + ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); + ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); + ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); + ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); + + ed.onNodeChange.add(function(ed, cm, n, co) { + n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); + + cm.setDisabled('cite', co); + cm.setDisabled('acronym', co); + cm.setDisabled('abbr', co); + cm.setDisabled('del', co); + cm.setDisabled('ins', co); + cm.setDisabled('attribs', n && n.nodeName == 'BODY'); + cm.setActive('cite', 0); + cm.setActive('acronym', 0); + cm.setActive('abbr', 0); + cm.setActive('del', 0); + cm.setActive('ins', 0); + + // Activate all + if (n) { + do { + cm.setDisabled(n.nodeName.toLowerCase(), 0); + cm.setActive(n.nodeName.toLowerCase(), 1); + } while (n = n.parentNode); + } + }); + + ed.onPreInit.add(function() { + // Fixed IE issue where it can't handle these elements correctly + ed.dom.create('abbr'); + }); + }, + + getInfo : function() { + return { + longname : 'XHTML Xtras Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/ins.htm b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..9448d67 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/ins.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/entries b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/entries new file mode 100644 index 0000000..c3b22c1 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +cite.js +file + + + + +2010-09-04T08:55:28.000000Z +0a4c237a7bf3e54d8c08d1e912e199be +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +513 + +del.js +file + + + + +2010-09-04T08:55:28.000000Z +dee7ab3aebb0ddd018efecf9d2a02358 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1688 + +abbr.js +file + + + + +2010-09-04T08:55:28.000000Z +0262d05e0ddec030f92818d28ccdbea4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +513 + +attributes.js +file + + + + +2010-09-04T08:55:28.000000Z +86e3ba2ef139711d3c12558dfce1aba8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3671 + +acronym.js +file + + + + +2010-09-04T08:55:28.000000Z +1e8cb09189f3b81274ddea6fb5021525 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +531 + +ins.js +file + + + + +2010-09-04T08:55:28.000000Z +288793d2d585bd81c33e41e251ffa31f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1687 + +element_common.js +file + + + + +2010-09-04T08:55:28.000000Z +dc3706a4924ae7876db7a990ac81226e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7013 + diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/abbr.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/abbr.js.svn-base new file mode 100644 index 0000000..1790e83 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/abbr.js.svn-base @@ -0,0 +1,28 @@ +/** + * abbr.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('abbr'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAbbr() { + SXE.insertElement('abbr'); + tinyMCEPopup.close(); +} + +function removeAbbr() { + SXE.removeElement('abbr'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/acronym.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/acronym.js.svn-base new file mode 100644 index 0000000..93b8d25 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/acronym.js.svn-base @@ -0,0 +1,28 @@ +/** + * acronym.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('acronym'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAcronym() { + SXE.insertElement('acronym'); + tinyMCEPopup.close(); +} + +function removeAcronym() { + SXE.removeElement('acronym'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/attributes.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/attributes.js.svn-base new file mode 100644 index 0000000..c7e0e7f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/attributes.js.svn-base @@ -0,0 +1,126 @@ +/** + * attributes.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + tinyMCEPopup.resizeToInnerSize(); + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + var elm = inst.selection.getNode(); + var f = document.forms[0]; + var onclick = dom.getAttrib(elm, 'onclick'); + + setFormValue('title', dom.getAttrib(elm, 'title')); + setFormValue('id', dom.getAttrib(elm, 'id')); + setFormValue('style', dom.getAttrib(elm, "style")); + setFormValue('dir', dom.getAttrib(elm, 'dir')); + setFormValue('lang', dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('onfocus', dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup')); + className = dom.getAttrib(elm, 'class'); + + addClassesToList('classlist', 'advlink_styles'); + selectByValue(f, 'classlist', className, true); + + TinyMCE_EditableSelects.init(); +} + +function setFormValue(name, value) { + if(value && document.forms[0].elements[name]){ + document.forms[0].elements[name].value = value; + } +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + setAllAttribs(elm); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); +} + +function setAttrib(elm, attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib.toLowerCase()]; + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value != "") { + dom.setAttrib(elm, attrib.toLowerCase(), value); + + if (attrib == "style") + attrib = "style.cssText"; + + if (attrib.substring(0, 2) == 'on') + value = 'return true;' + value; + + if (attrib == "class") + attrib = "className"; + + elm[attrib]=value; + } else + elm.removeAttribute(attrib); +} + +function setAllAttribs(elm) { + var f = document.forms[0]; + + setAttrib(elm, 'title'); + setAttrib(elm, 'id'); + setAttrib(elm, 'style'); + setAttrib(elm, 'class', getSelectValue(f, 'classlist')); + setAttrib(elm, 'dir'); + setAttrib(elm, 'lang'); + setAttrib(elm, 'tabindex'); + setAttrib(elm, 'accesskey'); + setAttrib(elm, 'onfocus'); + setAttrib(elm, 'onblur'); + setAttrib(elm, 'onclick'); + setAttrib(elm, 'ondblclick'); + setAttrib(elm, 'onmousedown'); + setAttrib(elm, 'onmouseup'); + setAttrib(elm, 'onmouseover'); + setAttrib(elm, 'onmousemove'); + setAttrib(elm, 'onmouseout'); + setAttrib(elm, 'onkeypress'); + setAttrib(elm, 'onkeydown'); + setAttrib(elm, 'onkeyup'); + + // Refresh in old MSIE +// if (tinyMCE.isMSIE5) +// elm.outerHTML = elm.outerHTML; +} + +function insertAttribute() { + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); +tinyMCEPopup.requireLangPack(); diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/cite.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/cite.js.svn-base new file mode 100644 index 0000000..b73ef47 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/cite.js.svn-base @@ -0,0 +1,28 @@ +/** + * cite.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('cite'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertCite() { + SXE.insertElement('cite'); + tinyMCEPopup.close(); +} + +function removeCite() { + SXE.removeElement('cite'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/del.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/del.js.svn-base new file mode 100644 index 0000000..d5dd8e4 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/del.js.svn-base @@ -0,0 +1,63 @@ +/** + * del.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('del'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); +} + +function insertDel() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); + + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('del'); + var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';}); + for (var i=0; i 0) { + tagName = element_name; + + insertInlineElement(element_name); + var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); + for (var i=0; i -1) ? true : false; +} + +SXE.removeClass = function(elm,cl) { + if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { + return true; + } + var classNames = elm.className.split(" "); + var newClassNames = ""; + for (var x = 0, cnl = classNames.length; x < cnl; x++) { + if (classNames[x] != cl) { + newClassNames += (classNames[x] + " "); + } + } + elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end +} + +SXE.addClass = function(elm,cl) { + if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; + return true; +} + +function insertInlineElement(en) { + var ed = tinyMCEPopup.editor, dom = ed.dom; + + ed.getDoc().execCommand('FontName', false, 'mceinline'); + tinymce.each(dom.select('span,font'), function(n) { + if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') + dom.replace(dom.create(en, {_mce_new : 1}), n, 1); + }); +} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/ins.js.svn-base b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/ins.js.svn-base new file mode 100644 index 0000000..8d29d53 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/.svn/text-base/ins.js.svn-base @@ -0,0 +1,62 @@ +/** + * ins.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('ins'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('INS'); + var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';}); + for (var i=0; i 0) { + insertInlineElement('del'); + var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';}); + for (var i=0; i 0) { + tagName = element_name; + + insertInlineElement(element_name); + var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); + for (var i=0; i -1) ? true : false; +} + +SXE.removeClass = function(elm,cl) { + if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { + return true; + } + var classNames = elm.className.split(" "); + var newClassNames = ""; + for (var x = 0, cnl = classNames.length; x < cnl; x++) { + if (classNames[x] != cl) { + newClassNames += (classNames[x] + " "); + } + } + elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end +} + +SXE.addClass = function(elm,cl) { + if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; + return true; +} + +function insertInlineElement(en) { + var ed = tinyMCEPopup.editor, dom = ed.dom; + + ed.getDoc().execCommand('FontName', false, 'mceinline'); + tinymce.each(dom.select('span,font'), function(n) { + if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') + dom.replace(dom.create(en, {_mce_new : 1}), n, 1); + }); +} diff --git a/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/ins.js b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..8d29d53 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/plugins/xhtmlxtras/js/ins.js @@ -0,0 +1,62 @@ +/** + * ins.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('ins'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('INS'); + var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';}); + for (var i=0; i + + + {#advanced_dlg.about_title} + + + + + + + +
+
+

{#advanced_dlg.about_title}

+

Version: ()

+

TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

+

Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

+

For more information about this software visit the TinyMCE website.

+ +
+ Got Moxie? + Hosted By Sourceforge + Also on freshmeat +
+
+ +
+
+

{#advanced_dlg.about_loaded}

+ +
+
+ +

 

+
+
+ +
+
+
+
+ +
+ +
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/anchor.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/anchor.htm.svn-base new file mode 100644 index 0000000..9c70f9b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/anchor.htm.svn-base @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
+ + + + + + + + +
{#advanced_dlg.anchor_title}
{#advanced_dlg.anchor_name}:
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/charmap.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/charmap.htm.svn-base new file mode 100644 index 0000000..c36c237 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/charmap.htm.svn-base @@ -0,0 +1,52 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + +
{#advanced_dlg.charmap_title}
+ + + + + + + + + +
 
 
+
+ + + + + + + + + + + + + + + + +
HTML-Code
 
 
NUM-Code
 
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/color_picker.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/color_picker.htm.svn-base new file mode 100644 index 0000000..148550f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/color_picker.htm.svn-base @@ -0,0 +1,73 @@ + + + + {#advanced_dlg.colorpicker_title} + + + + + +
+ + +
+
+
+ {#advanced_dlg.colorpicker_picker_title} +
+ + +
+ +
+ +
+
+
+
+ +
+
+ {#advanced_dlg.colorpicker_palette_title} +
+ +
+ +
+
+
+ +
+
+ {#advanced_dlg.colorpicker_named_title} +
+ +
+ +
+ +
+ {#advanced_dlg.colorpicker_name} +
+
+
+
+ +
+ + +
+ +
+ +
+
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/editor_template.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/editor_template.js.svn-base new file mode 100644 index 0000000..4c43312 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/editor_template.js.svn-base @@ -0,0 +1 @@ +(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},""),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=this.settings,m=d.get(j.id+"_tbl"),n=d.get(j.id+"_ifr");i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);d.setStyle(m,"height","");d.setStyle(n,"height",l);if(k.theme_advanced_resize_horizontal){d.setStyle(m,"width","");d.setStyle(n,"width",i);if(i"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},""));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},""));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":" ");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:n,ch:E})}}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s= 1 && v <= 7) { + k = v + ' (' + t.sizes[v - 1] + 'pt)'; + cl = s.font_size_classes[v - 1]; + v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); + } + + if (/^\s*\./.test(v)) + cl = v.replace(/\./g, ''); + + o[k] = cl ? {'class' : cl} : {fontSize : v}; + }); + + s.theme_advanced_font_sizes = o; + } + + if ((v = s.theme_advanced_path_location) && v != 'none') + s.theme_advanced_statusbar_location = s.theme_advanced_path_location; + + if (s.theme_advanced_statusbar_location == 'none') + s.theme_advanced_statusbar_location = 0; + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) + ed.onNodeChange.add(t._nodeChanged, t); + + if (ed.settings.content_css !== false) + ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css")); + }); + + ed.onSetProgressState.add(function(ed, b, ti) { + var co, id = ed.id, tb; + + if (b) { + t.progressTimer = setTimeout(function() { + co = ed.getContainer(); + co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); + tb = DOM.get(ed.id + '_tbl'); + + DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); + DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); + }, ti || 0); + } else { + DOM.remove(id + '_blocker'); + DOM.remove(id + '_progress'); + clearTimeout(t.progressTimer); + } + }); + + DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); + + if (s.skin_variant) + DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx; + + ed.formatter.register(name, { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }); + + ctrl.add(o['class'], name); + }); + } + }, + + _createStyleSelect : function(n) { + var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; + + // Setup style select box + ctrl = ctrlMan.createListBox('styleselect', { + title : 'advanced.style_select', + onselect : function(name) { + var matches, formatNames = []; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format + matches = ed.formatter.matchAll(formatNames); + if (!name || matches[0] == name) + ed.formatter.remove(matches[0]); + else + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onInit.add(function() { + var counter = 0, formats = ed.getParam('style_formats'); + + if (formats) { + each(formats, function(fmt) { + var name, keys = 0; + + each(fmt, function() {keys++;}); + + if (keys > 1) { + name = fmt.name = fmt.name || 'style_' + (counter++); + ed.formatter.register(name, fmt); + ctrl.add(fmt.title, name); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name; + + if (val) { + name = 'style_' + (counter++); + + ed.formatter.register(name, { + inline : 'span', + classes : val, + selector : '*' + }); + + ctrl.add(t.editor.translate(key), name); + } + }); + } + }); + + // Auto import classes if the ctrl box is empty + if (ctrl.getLength() == 0) { + ctrl.onPostRender.add(function(ed, n) { + if (!ctrl.NativeListBox) { + Event.add(n.id + '_text', 'focus', t._importClasses, t); + Event.add(n.id + '_text', 'mousedown', t._importClasses, t); + Event.add(n.id + '_open', 'focus', t._importClasses, t); + Event.add(n.id + '_open', 'mousedown', t._importClasses, t); + } else + Event.add(n.id, 'focus', t._importClasses, t); + }); + } + + return ctrl; + }, + + _createFontSelect : function() { + var c, t = this, ed = t.editor; + + c = ed.controlManager.createListBox('fontselect', { + title : 'advanced.fontdefault', + onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + ed.execCommand('FontName', false, cur.value); + return; + } + + ed.execCommand('FontName', false, v); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + return false; // No auto select + } + }); + + if (c) { + each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { + c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); + }); + } + + return c; + }, + + _createFontSizeSelect : function() { + var t = this, ed = t.editor, c, i = 0, cl = []; + + c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + cur = cur.value; + + if (cur['class']) { + ed.formatter.toggle('fontsize_class', {value : cur['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else { + ed.execCommand('FontSize', false, cur.fontSize); + } + + return; + } + + if (v['class']) { + ed.focus(); + ed.undoManager.add(); + ed.formatter.toggle('fontsize_class', {value : v['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else + ed.execCommand('FontSize', false, v.fontSize); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + return false; // No auto select + }}); + + if (c) { + each(t.settings.theme_advanced_font_sizes, function(v, k) { + var fz = v.fontSize; + + if (fz >= 1 && fz <= 7) + fz = t.sizes[parseInt(fz) - 1] + 'pt'; + + c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); + }); + } + + return c; + }, + + _createBlockFormats : function() { + var c, fmts = { + p : 'advanced.paragraph', + address : 'advanced.address', + pre : 'advanced.pre', + h1 : 'advanced.h1', + h2 : 'advanced.h2', + h3 : 'advanced.h3', + h4 : 'advanced.h4', + h5 : 'advanced.h5', + h6 : 'advanced.h6', + div : 'advanced.div', + blockquote : 'advanced.blockquote', + code : 'advanced.code', + dt : 'advanced.dt', + dd : 'advanced.dd', + samp : 'advanced.samp' + }, t = this; + + c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'}); + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); + n = tb = DOM.add(n, 'tbody'); + + switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { + case "rowlayout": + ic = t._rowLayout(s, tb, o); + break; + + case "customlayout": + ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); + break; + + default: + ic = t._simpleLayout(s, tb, o, p); + } + + n = o.targetNode; + + // Add classes to first and last TRs + nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8 + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + + return Event.cancel(e); + } + }); +/* + if (DOM.get(ed.id + '_path_row')) { + Event.add(ed.id + '_tbl', 'mouseover', function(e) { + var re; + + e = e.target; + + if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { + re = DOM.get(ed.id + '_path_row'); + t.lastPath = re.innerHTML; + DOM.setHTML(re, e.parentNode.title); + } + }); + + Event.add(ed.id + '_tbl', 'mouseout', function(e) { + if (t.lastPath) { + DOM.setHTML(ed.id + '_path_row', t.lastPath); + t.lastPath = 0; + } + }); + } +*/ + + if (!ed.getParam('accessibility_focus')) + Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + return { + iframeContainer : ic, + editorContainer : ed.id + '_parent', + sizeContainer : sc, + deltaHeight : o.deltaHeight + }; + }, + + getInfo : function() { + return { + longname : 'Advanced theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + }, + + resizeBy : function(dw, dh) { + var e = DOM.get(this.editor.id + '_tbl'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h) { + var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); + + // Boundery fix box + w = Math.max(s.theme_advanced_resizing_min_width || 100, w); + h = Math.max(s.theme_advanced_resizing_min_height || 100, h); + w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); + h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); + + // Resize iframe and container + DOM.setStyle(e, 'height', ''); + DOM.setStyle(ifr, 'height', h); + + if (s.theme_advanced_resize_horizontal) { + DOM.setStyle(e, 'width', ''); + DOM.setStyle(ifr, 'width', w); + + // Make sure that the size is never smaller than the over all ui + if (w < e.clientWidth) + DOM.setStyle(ifr, 'width', e.clientWidth); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (v.toLowerCase()) { + case 'mceeditor': + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + break; + + case 'mceelementpath': + t._addStatusBar(tb, o); + break; + + default: + a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(tb, 'tr'), 'td', { + 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da + }); + + to = cf.createToolbar("toolbar" + i); + t._addControls(v, to); + DOM.setHTML(n, to.renderHTML()); + o.deltaHeight -= s.theme_advanced_row_height; + } + }); + + return ic; + }, + + _addControls : function(v, tb) { + var t = this, s = t.settings, di, cf = t.editor.controlManager; + + if (s.theme_advanced_disable && !t._disabled) { + di = {}; + + each(explode(s.theme_advanced_disable), function(v) { + di[v] = 1; + }); + + t._disabled = di; + } else + di = t._disabled; + + each(explode(v), function(n) { + var c; + + if (di && di[n]) + return; + + // Compatiblity with 2.x + if (n == 'tablecontrols') { + each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { + n = t.createControl(n, cf); + + if (n) + tb.add(n); + }); + + return; + } + + c = t.createControl(n, cf); + + if (c) + tb.add(c); + }); + }, + + _addToolbars : function(c, o) { + var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); + + if (!ed.getParam('accessibility_focus')) + h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '')); + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '')); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); + + if (s['theme_advanced_buttons' + i + '_add']) + v += ',' + s['theme_advanced_buttons' + i + '_add']; + + if (s['theme_advanced_buttons' + i + '_add_before']) + v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; + + t._addControls(v, tb); + + //n.appendChild(n = tb.render()); + h.push(tb.renderHTML()); + + o.deltaHeight -= s.theme_advanced_row_height; + } + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); + DOM.setHTML(n, h.join('')); + }, + + _addStatusBar : function(tb, o) { + var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; + + n = DOM.add(tb, 'tr'); + n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); + n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' '); + DOM.add(n, 'a', {href : '#', accesskey : 'x'}); + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); + + if (s.theme_advanced_resizing_use_cookie) { + ed.onPostRender.add(function() { + var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); + + if (!o) + return; + + t.resizeTo(o.cw, o.ch); + }); + } + + ed.onPostRender.add(function() { + Event.add(ed.id + '_resize', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + + t.resizeTo(width, height); + }; + + function endResize(e) { + // Stop listening + Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); + Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); + Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); + Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); + + // Store away the size + if (s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : width, + ch : height + }); + } + }; + + e.preventDefault(); + + // Get the current rect size + startX = e.screenX; + startY = e.screenY; + ifrElm = DOM.get(t.editor.id + '_ifr'); + startWidth = width = ifrElm.clientWidth; + startHeight = height = ifrElm.clientHeight; + + // Register envent handlers + mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); + mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); + mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); + mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); + }); + }); + } + + o.deltaHeight -= 21; + n = tb = null; + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, formatNames, matches; + + tinymce.each(t.stateControls, function(c) { + cm.setActive(c, ed.queryCommandState(t.controls[c][1])); + }); + + function getParent(name) { + var i, parents = ob.parents, func = name; + + if (typeof(name) == 'string') { + func = function(node) { + return node.nodeName == name; + }; + } + + for (i = 0; i < parents.length; i++) { + if (func(parents[i])) + return parents[i]; + } + }; + + cm.setActive('visualaid', ed.hasVisual); + cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing); + cm.setDisabled('redo', !ed.undoManager.hasRedo()); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + if (!p || !p.name) { + c.setDisabled(!p && co); + c.setActive(!!p); + } + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name); + } + + if (c = cm.get('anchor')) { + c.setActive(!!p && p.name); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + } + + if (c = cm.get('formatselect')) { + p = getParent(DOM.isBlock); + + if (p) + c.select(p.nodeName.toLowerCase()); + } + + // Find out current fontSize, fontFamily and fontClass + getParent(function(n) { + if (n.nodeName === 'SPAN') { + if (!cl && n.className) + cl = n.className; + + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + } + + return false; + }); + + if (c = cm.get('fontselect')) { + c.select(function(v) { + return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; + }); + } + + // Select font size + if (c = cm.get('fontsizeselect')) { + // Use computed style + if (s.theme_advanced_runtime_fontsize && !fz && !cl) + fz = ed.dom.getStyle(n, 'fontSize', true); + + c.select(function(v) { + if (v.fontSize && v.fontSize === fz) + return true; + + if (v['class'] && v['class'] === cl) + return true; + }); + } + + if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + /*if (n.getAttribute('_mce_bogus')) + return; +*/ + // Ignore non element and hidden elements + if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))) + return; + + // Fake name + if (v = DOM.getAttrib(n, 'mce_name')) + na = v; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML') + na = n.scopeName + ':' + na; + + // Remove internal prefix + na = na.replace(/mce\:/g, ''); + + // Handle node name + switch (na) { + case 'b': + na = 'strong'; + break; + + case 'i': + na = 'em'; + break; + + case 'img': + if (v = DOM.getAttrib(n, 'src')) + ti += 'src: ' + v + ' '; + + break; + + case 'a': + if (v = DOM.getAttrib(n, 'name')) { + ti += 'name: ' + v + ' '; + na += '#' + v; + } + + if (v = DOM.getAttrib(n, 'href')) + ti += 'href: ' + v + ' '; + + break; + + case 'font': + if (v = DOM.getAttrib(n, 'face')) + ti += 'font: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'size')) + ti += 'size: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'color')) + ti += 'color: ' + v + ' '; + + break; + + case 'span': + if (v = DOM.getAttrib(n, 'style')) + ti += 'style: ' + v + ' '; + + break; + } + + if (v = DOM.getAttrib(n, 'id')) + ti += 'id: ' + v + ' '; + + if (v = n.className) { + v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '') + + if (v) { + ti += 'class: ' + v + ' '; + + if (DOM.isBlock(n) || na == 'img' || na == 'span') + na += '.' + v; + } + } + + na = na.replace(/(html:)/g, ''); + na = {name : na, node : n, title : ti}; + t.onResolveName.dispatch(t, na); + ti = na.title; + na = na.name; + + //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; + pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + } + }, + + // Commands gets called by execCommand + + _sel : function(v) { + this.editor.execCommand('mceSelectNodeDepth', false, v); + }, + + _mceInsertAnchor : function(ui, v) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/anchor.htm', + width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), + height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceCharMap : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/about.htm', + width : 480, + height : 380, + inline : true + }, { + theme_url : this.url + }); + }, + + _mceColorPicker : function(u, v) { + var ed = this.editor; + + v = v || {}; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/color_picker.htm', + width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), + close_previous : false, + inline : true + }, { + input_color : v.color, + func : v.func, + theme_url : this.url + }); + }, + + _mceCodeEditor : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/source_editor.htm', + width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), + height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), + inline : true, + resizable : true, + maximizable : true + }, { + theme_url : this.url + }); + }, + + _mceImage : function(ui, val) { + var ed = this.editor; + + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/image.htm', + width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), + height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceLink : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/link.htm', + width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), + height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceNewDocument : function() { + var ed = this.editor; + + ed.windowManager.confirm('advanced.newdocument', function(s) { + if (s) + ed.execCommand('mceSetContent', false, ''); + }); + }, + + _mceForeColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.fgColor, + func : function(co) { + t.fgColor = co; + t.editor.execCommand('ForeColor', false, co); + } + }); + }, + + _mceBackColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.bgColor, + func : function(co) { + t.bgColor = co; + t.editor.execCommand('HiliteColor', false, co); + } + }); + }, + + _ufirst : function(s) { + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + }); + + tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); +}(tinymce)); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/image.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/image.htm.svn-base new file mode 100644 index 0000000..98fd2cd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/image.htm.svn-base @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ x +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/link.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/link.htm.svn-base new file mode 100644 index 0000000..22627cc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/link.htm.svn-base @@ -0,0 +1,58 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/source_editor.htm.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/source_editor.htm.svn-base new file mode 100644 index 0000000..78033fd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/.svn/text-base/source_editor.htm.svn-base @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
+
{#advanced_dlg.code_title}
+ +
+ +
+ +
+ + + +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/about.htm b/app/plugins/tinymce/webroot/js/themes/advanced/about.htm new file mode 100644 index 0000000..0e3cb94 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/about.htm @@ -0,0 +1,54 @@ + + + + {#advanced_dlg.about_title} + + + + + + + +
+
+

{#advanced_dlg.about_title}

+

Version: ()

+

TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

+

Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

+

For more information about this software visit the TinyMCE website.

+ +
+ Got Moxie? + Hosted By Sourceforge + Also on freshmeat +
+
+ +
+
+

{#advanced_dlg.about_loaded}

+ +
+
+ +

 

+
+
+ +
+
+
+
+ +
+ +
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/anchor.htm b/app/plugins/tinymce/webroot/js/themes/advanced/anchor.htm new file mode 100644 index 0000000..9c70f9b --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/anchor.htm @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
+ + + + + + + + +
{#advanced_dlg.anchor_title}
{#advanced_dlg.anchor_name}:
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/charmap.htm b/app/plugins/tinymce/webroot/js/themes/advanced/charmap.htm new file mode 100644 index 0000000..c36c237 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/charmap.htm @@ -0,0 +1,52 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + +
{#advanced_dlg.charmap_title}
+ + + + + + + + + +
 
 
+
+ + + + + + + + + + + + + + + + +
HTML-Code
 
 
NUM-Code
 
+
+ + + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/color_picker.htm b/app/plugins/tinymce/webroot/js/themes/advanced/color_picker.htm new file mode 100644 index 0000000..148550f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/color_picker.htm @@ -0,0 +1,73 @@ + + + + {#advanced_dlg.colorpicker_title} + + + + + +
+ + +
+
+
+ {#advanced_dlg.colorpicker_picker_title} +
+ + +
+ +
+ +
+
+
+
+ +
+
+ {#advanced_dlg.colorpicker_palette_title} +
+ +
+ +
+
+
+ +
+
+ {#advanced_dlg.colorpicker_named_title} +
+ +
+ +
+ +
+ {#advanced_dlg.colorpicker_name} +
+
+
+
+ +
+ + +
+ +
+ +
+
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/editor_template.js b/app/plugins/tinymce/webroot/js/themes/advanced/editor_template.js new file mode 100644 index 0000000..4c43312 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/editor_template.js @@ -0,0 +1 @@ +(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},""),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=this.settings,m=d.get(j.id+"_tbl"),n=d.get(j.id+"_ifr");i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);d.setStyle(m,"height","");d.setStyle(n,"height",l);if(k.theme_advanced_resize_horizontal){d.setStyle(m,"width","");d.setStyle(n,"width",i);if(i"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},""));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},""));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":" ");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:n,ch:E})}}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s= 1 && v <= 7) { + k = v + ' (' + t.sizes[v - 1] + 'pt)'; + cl = s.font_size_classes[v - 1]; + v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); + } + + if (/^\s*\./.test(v)) + cl = v.replace(/\./g, ''); + + o[k] = cl ? {'class' : cl} : {fontSize : v}; + }); + + s.theme_advanced_font_sizes = o; + } + + if ((v = s.theme_advanced_path_location) && v != 'none') + s.theme_advanced_statusbar_location = s.theme_advanced_path_location; + + if (s.theme_advanced_statusbar_location == 'none') + s.theme_advanced_statusbar_location = 0; + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) + ed.onNodeChange.add(t._nodeChanged, t); + + if (ed.settings.content_css !== false) + ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css")); + }); + + ed.onSetProgressState.add(function(ed, b, ti) { + var co, id = ed.id, tb; + + if (b) { + t.progressTimer = setTimeout(function() { + co = ed.getContainer(); + co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); + tb = DOM.get(ed.id + '_tbl'); + + DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); + DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); + }, ti || 0); + } else { + DOM.remove(id + '_blocker'); + DOM.remove(id + '_progress'); + clearTimeout(t.progressTimer); + } + }); + + DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); + + if (s.skin_variant) + DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx; + + ed.formatter.register(name, { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }); + + ctrl.add(o['class'], name); + }); + } + }, + + _createStyleSelect : function(n) { + var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; + + // Setup style select box + ctrl = ctrlMan.createListBox('styleselect', { + title : 'advanced.style_select', + onselect : function(name) { + var matches, formatNames = []; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format + matches = ed.formatter.matchAll(formatNames); + if (!name || matches[0] == name) + ed.formatter.remove(matches[0]); + else + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onInit.add(function() { + var counter = 0, formats = ed.getParam('style_formats'); + + if (formats) { + each(formats, function(fmt) { + var name, keys = 0; + + each(fmt, function() {keys++;}); + + if (keys > 1) { + name = fmt.name = fmt.name || 'style_' + (counter++); + ed.formatter.register(name, fmt); + ctrl.add(fmt.title, name); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name; + + if (val) { + name = 'style_' + (counter++); + + ed.formatter.register(name, { + inline : 'span', + classes : val, + selector : '*' + }); + + ctrl.add(t.editor.translate(key), name); + } + }); + } + }); + + // Auto import classes if the ctrl box is empty + if (ctrl.getLength() == 0) { + ctrl.onPostRender.add(function(ed, n) { + if (!ctrl.NativeListBox) { + Event.add(n.id + '_text', 'focus', t._importClasses, t); + Event.add(n.id + '_text', 'mousedown', t._importClasses, t); + Event.add(n.id + '_open', 'focus', t._importClasses, t); + Event.add(n.id + '_open', 'mousedown', t._importClasses, t); + } else + Event.add(n.id, 'focus', t._importClasses, t); + }); + } + + return ctrl; + }, + + _createFontSelect : function() { + var c, t = this, ed = t.editor; + + c = ed.controlManager.createListBox('fontselect', { + title : 'advanced.fontdefault', + onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + ed.execCommand('FontName', false, cur.value); + return; + } + + ed.execCommand('FontName', false, v); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + return false; // No auto select + } + }); + + if (c) { + each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { + c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); + }); + } + + return c; + }, + + _createFontSizeSelect : function() { + var t = this, ed = t.editor, c, i = 0, cl = []; + + c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + cur = cur.value; + + if (cur['class']) { + ed.formatter.toggle('fontsize_class', {value : cur['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else { + ed.execCommand('FontSize', false, cur.fontSize); + } + + return; + } + + if (v['class']) { + ed.focus(); + ed.undoManager.add(); + ed.formatter.toggle('fontsize_class', {value : v['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else + ed.execCommand('FontSize', false, v.fontSize); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + return false; // No auto select + }}); + + if (c) { + each(t.settings.theme_advanced_font_sizes, function(v, k) { + var fz = v.fontSize; + + if (fz >= 1 && fz <= 7) + fz = t.sizes[parseInt(fz) - 1] + 'pt'; + + c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); + }); + } + + return c; + }, + + _createBlockFormats : function() { + var c, fmts = { + p : 'advanced.paragraph', + address : 'advanced.address', + pre : 'advanced.pre', + h1 : 'advanced.h1', + h2 : 'advanced.h2', + h3 : 'advanced.h3', + h4 : 'advanced.h4', + h5 : 'advanced.h5', + h6 : 'advanced.h6', + div : 'advanced.div', + blockquote : 'advanced.blockquote', + code : 'advanced.code', + dt : 'advanced.dt', + dd : 'advanced.dd', + samp : 'advanced.samp' + }, t = this; + + c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'}); + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); + n = tb = DOM.add(n, 'tbody'); + + switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { + case "rowlayout": + ic = t._rowLayout(s, tb, o); + break; + + case "customlayout": + ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); + break; + + default: + ic = t._simpleLayout(s, tb, o, p); + } + + n = o.targetNode; + + // Add classes to first and last TRs + nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8 + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + + return Event.cancel(e); + } + }); +/* + if (DOM.get(ed.id + '_path_row')) { + Event.add(ed.id + '_tbl', 'mouseover', function(e) { + var re; + + e = e.target; + + if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { + re = DOM.get(ed.id + '_path_row'); + t.lastPath = re.innerHTML; + DOM.setHTML(re, e.parentNode.title); + } + }); + + Event.add(ed.id + '_tbl', 'mouseout', function(e) { + if (t.lastPath) { + DOM.setHTML(ed.id + '_path_row', t.lastPath); + t.lastPath = 0; + } + }); + } +*/ + + if (!ed.getParam('accessibility_focus')) + Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + return { + iframeContainer : ic, + editorContainer : ed.id + '_parent', + sizeContainer : sc, + deltaHeight : o.deltaHeight + }; + }, + + getInfo : function() { + return { + longname : 'Advanced theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + }, + + resizeBy : function(dw, dh) { + var e = DOM.get(this.editor.id + '_tbl'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h) { + var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); + + // Boundery fix box + w = Math.max(s.theme_advanced_resizing_min_width || 100, w); + h = Math.max(s.theme_advanced_resizing_min_height || 100, h); + w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); + h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); + + // Resize iframe and container + DOM.setStyle(e, 'height', ''); + DOM.setStyle(ifr, 'height', h); + + if (s.theme_advanced_resize_horizontal) { + DOM.setStyle(e, 'width', ''); + DOM.setStyle(ifr, 'width', w); + + // Make sure that the size is never smaller than the over all ui + if (w < e.clientWidth) + DOM.setStyle(ifr, 'width', e.clientWidth); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (v.toLowerCase()) { + case 'mceeditor': + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + break; + + case 'mceelementpath': + t._addStatusBar(tb, o); + break; + + default: + a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(tb, 'tr'), 'td', { + 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da + }); + + to = cf.createToolbar("toolbar" + i); + t._addControls(v, to); + DOM.setHTML(n, to.renderHTML()); + o.deltaHeight -= s.theme_advanced_row_height; + } + }); + + return ic; + }, + + _addControls : function(v, tb) { + var t = this, s = t.settings, di, cf = t.editor.controlManager; + + if (s.theme_advanced_disable && !t._disabled) { + di = {}; + + each(explode(s.theme_advanced_disable), function(v) { + di[v] = 1; + }); + + t._disabled = di; + } else + di = t._disabled; + + each(explode(v), function(n) { + var c; + + if (di && di[n]) + return; + + // Compatiblity with 2.x + if (n == 'tablecontrols') { + each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { + n = t.createControl(n, cf); + + if (n) + tb.add(n); + }); + + return; + } + + c = t.createControl(n, cf); + + if (c) + tb.add(c); + }); + }, + + _addToolbars : function(c, o) { + var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); + + if (!ed.getParam('accessibility_focus')) + h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '')); + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '')); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); + + if (s['theme_advanced_buttons' + i + '_add']) + v += ',' + s['theme_advanced_buttons' + i + '_add']; + + if (s['theme_advanced_buttons' + i + '_add_before']) + v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; + + t._addControls(v, tb); + + //n.appendChild(n = tb.render()); + h.push(tb.renderHTML()); + + o.deltaHeight -= s.theme_advanced_row_height; + } + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); + DOM.setHTML(n, h.join('')); + }, + + _addStatusBar : function(tb, o) { + var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; + + n = DOM.add(tb, 'tr'); + n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); + n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' '); + DOM.add(n, 'a', {href : '#', accesskey : 'x'}); + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); + + if (s.theme_advanced_resizing_use_cookie) { + ed.onPostRender.add(function() { + var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); + + if (!o) + return; + + t.resizeTo(o.cw, o.ch); + }); + } + + ed.onPostRender.add(function() { + Event.add(ed.id + '_resize', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + + t.resizeTo(width, height); + }; + + function endResize(e) { + // Stop listening + Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); + Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); + Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); + Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); + + // Store away the size + if (s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : width, + ch : height + }); + } + }; + + e.preventDefault(); + + // Get the current rect size + startX = e.screenX; + startY = e.screenY; + ifrElm = DOM.get(t.editor.id + '_ifr'); + startWidth = width = ifrElm.clientWidth; + startHeight = height = ifrElm.clientHeight; + + // Register envent handlers + mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); + mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); + mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); + mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); + }); + }); + } + + o.deltaHeight -= 21; + n = tb = null; + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, formatNames, matches; + + tinymce.each(t.stateControls, function(c) { + cm.setActive(c, ed.queryCommandState(t.controls[c][1])); + }); + + function getParent(name) { + var i, parents = ob.parents, func = name; + + if (typeof(name) == 'string') { + func = function(node) { + return node.nodeName == name; + }; + } + + for (i = 0; i < parents.length; i++) { + if (func(parents[i])) + return parents[i]; + } + }; + + cm.setActive('visualaid', ed.hasVisual); + cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing); + cm.setDisabled('redo', !ed.undoManager.hasRedo()); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + if (!p || !p.name) { + c.setDisabled(!p && co); + c.setActive(!!p); + } + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name); + } + + if (c = cm.get('anchor')) { + c.setActive(!!p && p.name); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + } + + if (c = cm.get('formatselect')) { + p = getParent(DOM.isBlock); + + if (p) + c.select(p.nodeName.toLowerCase()); + } + + // Find out current fontSize, fontFamily and fontClass + getParent(function(n) { + if (n.nodeName === 'SPAN') { + if (!cl && n.className) + cl = n.className; + + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + } + + return false; + }); + + if (c = cm.get('fontselect')) { + c.select(function(v) { + return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; + }); + } + + // Select font size + if (c = cm.get('fontsizeselect')) { + // Use computed style + if (s.theme_advanced_runtime_fontsize && !fz && !cl) + fz = ed.dom.getStyle(n, 'fontSize', true); + + c.select(function(v) { + if (v.fontSize && v.fontSize === fz) + return true; + + if (v['class'] && v['class'] === cl) + return true; + }); + } + + if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + /*if (n.getAttribute('_mce_bogus')) + return; +*/ + // Ignore non element and hidden elements + if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))) + return; + + // Fake name + if (v = DOM.getAttrib(n, 'mce_name')) + na = v; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML') + na = n.scopeName + ':' + na; + + // Remove internal prefix + na = na.replace(/mce\:/g, ''); + + // Handle node name + switch (na) { + case 'b': + na = 'strong'; + break; + + case 'i': + na = 'em'; + break; + + case 'img': + if (v = DOM.getAttrib(n, 'src')) + ti += 'src: ' + v + ' '; + + break; + + case 'a': + if (v = DOM.getAttrib(n, 'name')) { + ti += 'name: ' + v + ' '; + na += '#' + v; + } + + if (v = DOM.getAttrib(n, 'href')) + ti += 'href: ' + v + ' '; + + break; + + case 'font': + if (v = DOM.getAttrib(n, 'face')) + ti += 'font: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'size')) + ti += 'size: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'color')) + ti += 'color: ' + v + ' '; + + break; + + case 'span': + if (v = DOM.getAttrib(n, 'style')) + ti += 'style: ' + v + ' '; + + break; + } + + if (v = DOM.getAttrib(n, 'id')) + ti += 'id: ' + v + ' '; + + if (v = n.className) { + v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '') + + if (v) { + ti += 'class: ' + v + ' '; + + if (DOM.isBlock(n) || na == 'img' || na == 'span') + na += '.' + v; + } + } + + na = na.replace(/(html:)/g, ''); + na = {name : na, node : n, title : ti}; + t.onResolveName.dispatch(t, na); + ti = na.title; + na = na.name; + + //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; + pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + } + }, + + // Commands gets called by execCommand + + _sel : function(v) { + this.editor.execCommand('mceSelectNodeDepth', false, v); + }, + + _mceInsertAnchor : function(ui, v) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/anchor.htm', + width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), + height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceCharMap : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/about.htm', + width : 480, + height : 380, + inline : true + }, { + theme_url : this.url + }); + }, + + _mceColorPicker : function(u, v) { + var ed = this.editor; + + v = v || {}; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/color_picker.htm', + width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), + close_previous : false, + inline : true + }, { + input_color : v.color, + func : v.func, + theme_url : this.url + }); + }, + + _mceCodeEditor : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/source_editor.htm', + width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), + height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), + inline : true, + resizable : true, + maximizable : true + }, { + theme_url : this.url + }); + }, + + _mceImage : function(ui, val) { + var ed = this.editor; + + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/image.htm', + width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), + height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceLink : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/link.htm', + width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), + height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceNewDocument : function() { + var ed = this.editor; + + ed.windowManager.confirm('advanced.newdocument', function(s) { + if (s) + ed.execCommand('mceSetContent', false, ''); + }); + }, + + _mceForeColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.fgColor, + func : function(co) { + t.fgColor = co; + t.editor.execCommand('ForeColor', false, co); + } + }); + }, + + _mceBackColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.bgColor, + func : function(co) { + t.bgColor = co; + t.editor.execCommand('HiliteColor', false, co); + } + }); + }, + + _ufirst : function(s) { + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + }); + + tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); +}(tinymce)); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/image.htm b/app/plugins/tinymce/webroot/js/themes/advanced/image.htm new file mode 100644 index 0000000..98fd2cd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ x +
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/entries new file mode 100644 index 0000000..bb2d9df --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +icons.gif +file + + + + +2010-09-04T08:55:28.000000Z +092b023d8d0073b8f651a92a1f711ccd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +11794 + +colorpicker.jpg +file + + + + +2010-09-04T08:55:28.000000Z +02ae48639aa5729e6a40fb64455c32a2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +3189 + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/colorpicker.jpg.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/colorpicker.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/colorpicker.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/icons.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/icons.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/prop-base/icons.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/colorpicker.jpg.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/colorpicker.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..b4c542d107b25f68a9d4f9d7a109d0565d1f1437 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/icons.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/img/.svn/text-base/icons.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e46de5333082869b9bdab2576a554a2f9d01a966 GIT binary patch literal 11794 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 F{{gR&nqvR} literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/colorpicker.jpg b/app/plugins/tinymce/webroot/js/themes/advanced/img/colorpicker.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c542d107b25f68a9d4f9d7a109d0565d1f1437 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/img/icons.gif b/app/plugins/tinymce/webroot/js/themes/advanced/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..e46de5333082869b9bdab2576a554a2f9d01a966 GIT binary patch literal 11794 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 F{{gR&nqvR} literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/entries new file mode 100644 index 0000000..831cdda --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +source_editor.js +file + + + + +2010-09-04T08:55:28.000000Z +cd02d9651fd1f076f4ac5d7d7961bd58 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1443 + +about.js +file + + + + +2010-09-04T08:55:28.000000Z +cd4f25e57d9c7c3c5eaed2b4234c8787 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2054 + +anchor.js +file + + + + +2010-09-04T08:55:28.000000Z +fda96d6d56eefb394e13c1bc1cb8619d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +854 + +charmap.js +file + + + + +2010-09-04T08:55:28.000000Z +f816574961189f44e338076169d21d1f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +14724 + +color_picker.js +file + + + + +2010-09-04T08:55:28.000000Z +2ce934aa3086cba10c51c6d055177f8f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11017 + +link.js +file + + + + +2010-09-04T08:55:28.000000Z +9f192e4711b35b2fae293ce5d8a1c59e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4803 + +image.js +file + + + + +2010-09-04T08:55:28.000000Z +713a50438cae8001506eb6129215cc9a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5846 + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/about.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/about.js.svn-base new file mode 100644 index 0000000..7fc8ba2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/about.js.svn-base @@ -0,0 +1,72 @@ +tinyMCEPopup.requireLangPack(); + +function init() { + var ed, tcont; + + tinyMCEPopup.resizeToInnerSize(); + ed = tinyMCEPopup.editor; + + // Give FF some time + window.setTimeout(insertHelpIFrame, 10); + + tcont = document.getElementById('plugintablecontainer'); + document.getElementById('plugins_tab').style.display = 'none'; + + var html = ""; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + tinymce.each(ed.plugins, function(p, n) { + var info; + + if (!p.getInfo) + return; + + html += ''; + + info = p.getInfo(); + + if (info.infourl != null && info.infourl != '') + html += ''; + else + html += ''; + + if (info.authorurl != null && info.authorurl != '') + html += ''; + else + html += ''; + + html += ''; + html += ''; + + document.getElementById('plugins_tab').style.display = ''; + + }); + + html += ''; + html += '
' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
'; + + tcont.innerHTML = html; + + tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion; + tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate; +} + +function insertHelpIFrame() { + var html; + + if (tinyMCEPopup.getParam('docs_url')) { + html = ''; + document.getElementById('iframecontainer').innerHTML = html; + document.getElementById('help_tab').style.display = 'block'; + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/anchor.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/anchor.js.svn-base new file mode 100644 index 0000000..d7a854e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/anchor.js.svn-base @@ -0,0 +1,37 @@ +tinyMCEPopup.requireLangPack(); + +var AnchorDialog = { + init : function(ed) { + var action, elm, f = document.forms[0]; + + this.editor = ed; + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + v = ed.dom.getAttrib(elm, 'name'); + + if (v) { + this.action = 'update'; + f.anchorName.value = v; + } + + f.insert.value = ed.getLang(elm ? 'update' : 'insert'); + }, + + update : function() { + var ed = this.editor, elm, name = document.forms[0].anchorName.value; + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) + elm.name = name; + else + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, '')); + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/charmap.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/charmap.js.svn-base new file mode 100644 index 0000000..53a2683 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/charmap.js.svn-base @@ -0,0 +1,335 @@ +/** + * charmap.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +tinyMCEPopup.requireLangPack(); + +var charmap = [ + [' ', ' ', true, 'no-break space'], + ['&', '&', true, 'ampersand'], + ['"', '"', true, 'quotation mark'], +// finance + ['¢', '¢', true, 'cent sign'], + ['€', '€', true, 'euro sign'], + ['£', '£', true, 'pound sign'], + ['¥', '¥', true, 'yen sign'], +// signs + ['©', '©', true, 'copyright sign'], + ['®', '®', true, 'registered sign'], + ['™', '™', true, 'trade mark sign'], + ['‰', '‰', true, 'per mille sign'], + ['µ', 'µ', true, 'micro sign'], + ['·', '·', true, 'middle dot'], + ['•', '•', true, 'bullet'], + ['…', '…', true, 'three dot leader'], + ['′', '′', true, 'minutes / feet'], + ['″', '″', true, 'seconds / inches'], + ['§', '§', true, 'section sign'], + ['¶', '¶', true, 'paragraph sign'], + ['ß', 'ß', true, 'sharp s / ess-zed'], +// quotations + ['‹', '‹', true, 'single left-pointing angle quotation mark'], + ['›', '›', true, 'single right-pointing angle quotation mark'], + ['«', '«', true, 'left pointing guillemet'], + ['»', '»', true, 'right pointing guillemet'], + ['‘', '‘', true, 'left single quotation mark'], + ['’', '’', true, 'right single quotation mark'], + ['“', '“', true, 'left double quotation mark'], + ['”', '”', true, 'right double quotation mark'], + ['‚', '‚', true, 'single low-9 quotation mark'], + ['„', '„', true, 'double low-9 quotation mark'], + ['<', '<', true, 'less-than sign'], + ['>', '>', true, 'greater-than sign'], + ['≤', '≤', true, 'less-than or equal to'], + ['≥', '≥', true, 'greater-than or equal to'], + ['–', '–', true, 'en dash'], + ['—', '—', true, 'em dash'], + ['¯', '¯', true, 'macron'], + ['‾', '‾', true, 'overline'], + ['¤', '¤', true, 'currency sign'], + ['¦', '¦', true, 'broken bar'], + ['¨', '¨', true, 'diaeresis'], + ['¡', '¡', true, 'inverted exclamation mark'], + ['¿', '¿', true, 'turned question mark'], + ['ˆ', 'ˆ', true, 'circumflex accent'], + ['˜', '˜', true, 'small tilde'], + ['°', '°', true, 'degree sign'], + ['−', '−', true, 'minus sign'], + ['±', '±', true, 'plus-minus sign'], + ['÷', '÷', true, 'division sign'], + ['⁄', '⁄', true, 'fraction slash'], + ['×', '×', true, 'multiplication sign'], + ['¹', '¹', true, 'superscript one'], + ['²', '²', true, 'superscript two'], + ['³', '³', true, 'superscript three'], + ['¼', '¼', true, 'fraction one quarter'], + ['½', '½', true, 'fraction one half'], + ['¾', '¾', true, 'fraction three quarters'], +// math / logical + ['ƒ', 'ƒ', true, 'function / florin'], + ['∫', '∫', true, 'integral'], + ['∑', '∑', true, 'n-ary sumation'], + ['∞', '∞', true, 'infinity'], + ['√', '√', true, 'square root'], + ['∼', '∼', false,'similar to'], + ['≅', '≅', false,'approximately equal to'], + ['≈', '≈', true, 'almost equal to'], + ['≠', '≠', true, 'not equal to'], + ['≡', '≡', true, 'identical to'], + ['∈', '∈', false,'element of'], + ['∉', '∉', false,'not an element of'], + ['∋', '∋', false,'contains as member'], + ['∏', '∏', true, 'n-ary product'], + ['∧', '∧', false,'logical and'], + ['∨', '∨', false,'logical or'], + ['¬', '¬', true, 'not sign'], + ['∩', '∩', true, 'intersection'], + ['∪', '∪', false,'union'], + ['∂', '∂', true, 'partial differential'], + ['∀', '∀', false,'for all'], + ['∃', '∃', false,'there exists'], + ['∅', '∅', false,'diameter'], + ['∇', '∇', false,'backward difference'], + ['∗', '∗', false,'asterisk operator'], + ['∝', '∝', false,'proportional to'], + ['∠', '∠', false,'angle'], +// undefined + ['´', '´', true, 'acute accent'], + ['¸', '¸', true, 'cedilla'], + ['ª', 'ª', true, 'feminine ordinal indicator'], + ['º', 'º', true, 'masculine ordinal indicator'], + ['†', '†', true, 'dagger'], + ['‡', '‡', true, 'double dagger'], +// alphabetical special chars + ['À', 'À', true, 'A - grave'], + ['Á', 'Á', true, 'A - acute'], + ['Â', 'Â', true, 'A - circumflex'], + ['Ã', 'Ã', true, 'A - tilde'], + ['Ä', 'Ä', true, 'A - diaeresis'], + ['Å', 'Å', true, 'A - ring above'], + ['Æ', 'Æ', true, 'ligature AE'], + ['Ç', 'Ç', true, 'C - cedilla'], + ['È', 'È', true, 'E - grave'], + ['É', 'É', true, 'E - acute'], + ['Ê', 'Ê', true, 'E - circumflex'], + ['Ë', 'Ë', true, 'E - diaeresis'], + ['Ì', 'Ì', true, 'I - grave'], + ['Í', 'Í', true, 'I - acute'], + ['Î', 'Î', true, 'I - circumflex'], + ['Ï', 'Ï', true, 'I - diaeresis'], + ['Ð', 'Ð', true, 'ETH'], + ['Ñ', 'Ñ', true, 'N - tilde'], + ['Ò', 'Ò', true, 'O - grave'], + ['Ó', 'Ó', true, 'O - acute'], + ['Ô', 'Ô', true, 'O - circumflex'], + ['Õ', 'Õ', true, 'O - tilde'], + ['Ö', 'Ö', true, 'O - diaeresis'], + ['Ø', 'Ø', true, 'O - slash'], + ['Œ', 'Œ', true, 'ligature OE'], + ['Š', 'Š', true, 'S - caron'], + ['Ù', 'Ù', true, 'U - grave'], + ['Ú', 'Ú', true, 'U - acute'], + ['Û', 'Û', true, 'U - circumflex'], + ['Ü', 'Ü', true, 'U - diaeresis'], + ['Ý', 'Ý', true, 'Y - acute'], + ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], + ['Þ', 'Þ', true, 'THORN'], + ['à', 'à', true, 'a - grave'], + ['á', 'á', true, 'a - acute'], + ['â', 'â', true, 'a - circumflex'], + ['ã', 'ã', true, 'a - tilde'], + ['ä', 'ä', true, 'a - diaeresis'], + ['å', 'å', true, 'a - ring above'], + ['æ', 'æ', true, 'ligature ae'], + ['ç', 'ç', true, 'c - cedilla'], + ['è', 'è', true, 'e - grave'], + ['é', 'é', true, 'e - acute'], + ['ê', 'ê', true, 'e - circumflex'], + ['ë', 'ë', true, 'e - diaeresis'], + ['ì', 'ì', true, 'i - grave'], + ['í', 'í', true, 'i - acute'], + ['î', 'î', true, 'i - circumflex'], + ['ï', 'ï', true, 'i - diaeresis'], + ['ð', 'ð', true, 'eth'], + ['ñ', 'ñ', true, 'n - tilde'], + ['ò', 'ò', true, 'o - grave'], + ['ó', 'ó', true, 'o - acute'], + ['ô', 'ô', true, 'o - circumflex'], + ['õ', 'õ', true, 'o - tilde'], + ['ö', 'ö', true, 'o - diaeresis'], + ['ø', 'ø', true, 'o slash'], + ['œ', 'œ', true, 'ligature oe'], + ['š', 'š', true, 's - caron'], + ['ù', 'ù', true, 'u - grave'], + ['ú', 'ú', true, 'u - acute'], + ['û', 'û', true, 'u - circumflex'], + ['ü', 'ü', true, 'u - diaeresis'], + ['ý', 'ý', true, 'y - acute'], + ['þ', 'þ', true, 'thorn'], + ['ÿ', 'ÿ', true, 'y - diaeresis'], + ['Α', 'Α', true, 'Alpha'], + ['Β', 'Β', true, 'Beta'], + ['Γ', 'Γ', true, 'Gamma'], + ['Δ', 'Δ', true, 'Delta'], + ['Ε', 'Ε', true, 'Epsilon'], + ['Ζ', 'Ζ', true, 'Zeta'], + ['Η', 'Η', true, 'Eta'], + ['Θ', 'Θ', true, 'Theta'], + ['Ι', 'Ι', true, 'Iota'], + ['Κ', 'Κ', true, 'Kappa'], + ['Λ', 'Λ', true, 'Lambda'], + ['Μ', 'Μ', true, 'Mu'], + ['Ν', 'Ν', true, 'Nu'], + ['Ξ', 'Ξ', true, 'Xi'], + ['Ο', 'Ο', true, 'Omicron'], + ['Π', 'Π', true, 'Pi'], + ['Ρ', 'Ρ', true, 'Rho'], + ['Σ', 'Σ', true, 'Sigma'], + ['Τ', 'Τ', true, 'Tau'], + ['Υ', 'Υ', true, 'Upsilon'], + ['Φ', 'Φ', true, 'Phi'], + ['Χ', 'Χ', true, 'Chi'], + ['Ψ', 'Ψ', true, 'Psi'], + ['Ω', 'Ω', true, 'Omega'], + ['α', 'α', true, 'alpha'], + ['β', 'β', true, 'beta'], + ['γ', 'γ', true, 'gamma'], + ['δ', 'δ', true, 'delta'], + ['ε', 'ε', true, 'epsilon'], + ['ζ', 'ζ', true, 'zeta'], + ['η', 'η', true, 'eta'], + ['θ', 'θ', true, 'theta'], + ['ι', 'ι', true, 'iota'], + ['κ', 'κ', true, 'kappa'], + ['λ', 'λ', true, 'lambda'], + ['μ', 'μ', true, 'mu'], + ['ν', 'ν', true, 'nu'], + ['ξ', 'ξ', true, 'xi'], + ['ο', 'ο', true, 'omicron'], + ['π', 'π', true, 'pi'], + ['ρ', 'ρ', true, 'rho'], + ['ς', 'ς', true, 'final sigma'], + ['σ', 'σ', true, 'sigma'], + ['τ', 'τ', true, 'tau'], + ['υ', 'υ', true, 'upsilon'], + ['φ', 'φ', true, 'phi'], + ['χ', 'χ', true, 'chi'], + ['ψ', 'ψ', true, 'psi'], + ['ω', 'ω', true, 'omega'], +// symbols + ['ℵ', 'ℵ', false,'alef symbol'], + ['ϖ', 'ϖ', false,'pi symbol'], + ['ℜ', 'ℜ', false,'real part symbol'], + ['ϑ','ϑ', false,'theta symbol'], + ['ϒ', 'ϒ', false,'upsilon - hook symbol'], + ['℘', '℘', false,'Weierstrass p'], + ['ℑ', 'ℑ', false,'imaginary part'], +// arrows + ['←', '←', true, 'leftwards arrow'], + ['↑', '↑', true, 'upwards arrow'], + ['→', '→', true, 'rightwards arrow'], + ['↓', '↓', true, 'downwards arrow'], + ['↔', '↔', true, 'left right arrow'], + ['↵', '↵', false,'carriage return'], + ['⇐', '⇐', false,'leftwards double arrow'], + ['⇑', '⇑', false,'upwards double arrow'], + ['⇒', '⇒', false,'rightwards double arrow'], + ['⇓', '⇓', false,'downwards double arrow'], + ['⇔', '⇔', false,'left right double arrow'], + ['∴', '∴', false,'therefore'], + ['⊂', '⊂', false,'subset of'], + ['⊃', '⊃', false,'superset of'], + ['⊄', '⊄', false,'not a subset of'], + ['⊆', '⊆', false,'subset of or equal to'], + ['⊇', '⊇', false,'superset of or equal to'], + ['⊕', '⊕', false,'circled plus'], + ['⊗', '⊗', false,'circled times'], + ['⊥', '⊥', false,'perpendicular'], + ['⋅', '⋅', false,'dot operator'], + ['⌈', '⌈', false,'left ceiling'], + ['⌉', '⌉', false,'right ceiling'], + ['⌊', '⌊', false,'left floor'], + ['⌋', '⌋', false,'right floor'], + ['⟨', '〈', false,'left-pointing angle bracket'], + ['⟩', '〉', false,'right-pointing angle bracket'], + ['◊', '◊', true,'lozenge'], + ['♠', '♠', false,'black spade suit'], + ['♣', '♣', true, 'black club suit'], + ['♥', '♥', true, 'black heart suit'], + ['♦', '♦', true, 'black diamond suit'], + [' ', ' ', false,'en space'], + [' ', ' ', false,'em space'], + [' ', ' ', false,'thin space'], + ['‌', '‌', false,'zero width non-joiner'], + ['‍', '‍', false,'zero width joiner'], + ['‎', '‎', false,'left-to-right mark'], + ['‏', '‏', false,'right-to-left mark'], + ['­', '­', false,'soft hyphen'] +]; + +tinyMCEPopup.onInit.add(function() { + tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML()); +}); + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20, i; + var html = ''; + var cols=-1; + + for (i=0; i' + + '' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + + html += '
'; + + return html; +} + +function insertChar(chr) { + tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); + + // Refocus in window + if (tinyMCEPopup.isWindow) + window.focus(); + + tinyMCEPopup.editor.focus(); + tinyMCEPopup.close(); +} + +function previewChar(codeA, codeB, codeN) { + var elmA = document.getElementById('codeA'); + var elmB = document.getElementById('codeB'); + var elmV = document.getElementById('codeV'); + var elmN = document.getElementById('codeN'); + + if (codeA=='#160;') { + elmV.innerHTML = '__'; + } else { + elmV.innerHTML = '&' + codeA; + } + + elmB.innerHTML = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/color_picker.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/color_picker.js.svn-base new file mode 100644 index 0000000..c1a65db --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/color_picker.js.svn-base @@ -0,0 +1,253 @@ +tinyMCEPopup.requireLangPack(); + +var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; + +var colors = [ + "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", + "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", + "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", + "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", + "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", + "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", + "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", + "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", + "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", + "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", + "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", + "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", + "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", + "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", + "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", + "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", + "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", + "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", + "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", + "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", + "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", + "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", + "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", + "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", + "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", + "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", + "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" +]; + +var named = { + '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', + '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', + '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', + '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', + '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', + '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', + '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', + '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', + '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', + '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', + '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', + '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', + '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', + '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' +}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')); + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + tinyMCEPopup.restoreSelection(); + + if (f) + f(color); + + tinyMCEPopup.close(); +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toLowerCase(); +} + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + if (!col) + return col; + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return {r : r, g : g, b : b}; + } + + return null; +} + +function generatePicker() { + var el = document.getElementById('light'), h = '', i; + + for (i = 0; i < detail; i++){ + h += '
'; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + h += '' + + ''; + + for (i=0; i' + + '' + + ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
'; + + el.innerHTML = h; + el.className = 'generated'; +} + +function generateNamedColors() { + var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; + + if (el.className == 'generated') + return; + + for (n in named) { + v = named[n]; + h += '' + } + + el.innerHTML = h; + el.className = 'generated'; +} + +function dechex(n) { + return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); +} + +function computeColor(e) { + var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB; + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0); + + partWidth = document.getElementById('colors').width / 6; + partDetail = detail / 2; + imHeight = document.getElementById('colors').height; + + r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; + g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); + b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); + + coef = (imHeight - y) / imHeight; + r = 128 + (r - 128) * coef; + g = 128 + (g - 128) * coef; + b = 128 + (b - 128) * coef; + + changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); + updateLight(r, g, b); +} + +function updateLight(r, g, b) { + var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; + + for (i=0; i=0) && (i'); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '180px'; + + e = ed.selection.getNode(); + + this.fillFileList('image_list', 'tinyMCEImageList'); + + if (e.nodeName == 'IMG') { + f.src.value = ed.dom.getAttrib(e, 'src'); + f.alt.value = ed.dom.getAttrib(e, 'alt'); + f.border.value = this.getAttrib(e, 'border'); + f.vspace.value = this.getAttrib(e, 'vspace'); + f.hspace.value = this.getAttrib(e, 'hspace'); + f.width.value = ed.dom.getAttrib(e, 'width'); + f.height.value = ed.dom.getAttrib(e, 'height'); + f.insert.value = ed.getLang('update'); + this.styleVal = ed.dom.getAttrib(e, 'style'); + selectByValue(f, 'image_list', f.src.value); + selectByValue(f, 'align', this.getAttrib(e, 'align')); + this.updateStyle(); + } + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + update : function() { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (!ed.settings.inline_styles) { + args = tinymce.extend(args, { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }); + } else + args.style = this.styleVal; + + tinymce.extend(args, { + src : f.src.value, + alt : f.alt.value, + width : f.width.value, + height : f.height.value + }); + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + st = tinyMCEPopup.dom.parseStyle(this.styleVal); + + // Handle align + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') { + st['float'] = v; + delete st['vertical-align']; + } else { + st['vertical-align'] = v; + delete st['float']; + } + } else { + delete st['float']; + delete st['vertical-align']; + } + + // Handle border + v = f.border.value; + if (v || v == '0') { + if (v == '0') + st['border'] = '0'; + else + st['border'] = v + 'px solid black'; + } else + delete st['border']; + + // Handle hspace + v = f.hspace.value; + if (v) { + delete st['margin']; + st['margin-left'] = v + 'px'; + st['margin-right'] = v + 'px'; + } else { + delete st['margin-left']; + delete st['margin-right']; + } + + // Handle vspace + v = f.vspace.value; + if (v) { + delete st['margin']; + st['margin-top'] = v + 'px'; + st['margin-bottom'] = v + 'px'; + } else { + delete st['margin-top']; + delete st['margin-bottom']; + } + + // Merge + st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.width.value = f.height.value = ""; + }, + + updateImageData : function() { + var f = document.forms[0], t = ImageDialog; + + if (f.width.value == "") + f.width.value = t.preloadImg.width; + + if (f.height.value == "") + f.height.value = t.preloadImg.height; + }, + + getImageData : function() { + var f = document.forms[0]; + + this.preloadImg = new Image(); + this.preloadImg.onload = this.updateImageData; + this.preloadImg.onerror = this.resetImageData; + this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/link.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/link.js.svn-base new file mode 100644 index 0000000..73b9f59 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/link.js.svn-base @@ -0,0 +1,156 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link'); + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '180px'; + + this.fillClassList('class_list'); + this.fillFileList('link_list', 'tinyMCELinkList'); + this.fillTargetList('target_list'); + + if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) { + f.href.value = ed.dom.getAttrib(e, 'href'); + f.linktitle.value = ed.dom.getAttrib(e, 'title'); + f.insert.value = ed.getLang('update'); + selectByValue(f, 'link_list', f.href.value); + selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target')); + selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class')); + } + }, + + update : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor, e, b; + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); + + tinymce.each(ed.dom.select("a"), function(n) { + if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { + e = n; + + ed.dom.setAttribs(e, { + href : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + }); + } else { + ed.dom.setAttribs(e, { + href : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + + // Don't move caret if selection was image + if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { + ed.focus(); + ed.selection.select(e); + ed.selection.collapse(0); + tinyMCEPopup.storeSelection(); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + }, + + checkPrefix : function(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) + n.value = 'http://' + n.value; + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillTargetList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v; + + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); + + if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { + tinymce.each(v.split(','), function(v) { + v = v.split('='); + lst.options[lst.options.length] = new Option(v[0], v[1]); + }); + } + } +}; + +LinkDialog.preInit(); +tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/source_editor.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/source_editor.js.svn-base new file mode 100644 index 0000000..81063ec --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/.svn/text-base/source_editor.js.svn-base @@ -0,0 +1,62 @@ +tinyMCEPopup.requireLangPack(); +tinyMCEPopup.onInit.add(onLoadInit); + +function saveContent() { + tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Remove Gecko spellchecking + if (tinymce.isGecko) + document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); + + document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); + + if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { + setWrap('soft'); + document.getElementById('wraped').checked = true; + } + + resizeInputs(); +} + +function setWrap(val) { + var v, n, s = document.getElementById('htmlSource'); + + s.wrap = val; + + if (!tinymce.isIE) { + v = s.value; + n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function toggleWordWrap(elm) { + if (elm.checked) + setWrap('soft'); + else + setWrap('off'); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + var el = document.getElementById('htmlSource'); + + if (!tinymce.isIE) { + wHeight = self.innerHeight - 65; + wWidth = self.innerWidth - 16; + } else { + wHeight = document.body.clientHeight - 70; + wWidth = document.body.clientWidth - 16; + } + + el.style.height = Math.abs(wHeight) + 'px'; + el.style.width = Math.abs(wWidth) + 'px'; +} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/about.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/about.js new file mode 100644 index 0000000..7fc8ba2 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/about.js @@ -0,0 +1,72 @@ +tinyMCEPopup.requireLangPack(); + +function init() { + var ed, tcont; + + tinyMCEPopup.resizeToInnerSize(); + ed = tinyMCEPopup.editor; + + // Give FF some time + window.setTimeout(insertHelpIFrame, 10); + + tcont = document.getElementById('plugintablecontainer'); + document.getElementById('plugins_tab').style.display = 'none'; + + var html = ""; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + tinymce.each(ed.plugins, function(p, n) { + var info; + + if (!p.getInfo) + return; + + html += ''; + + info = p.getInfo(); + + if (info.infourl != null && info.infourl != '') + html += ''; + else + html += ''; + + if (info.authorurl != null && info.authorurl != '') + html += ''; + else + html += ''; + + html += ''; + html += ''; + + document.getElementById('plugins_tab').style.display = ''; + + }); + + html += ''; + html += '
' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
'; + + tcont.innerHTML = html; + + tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion; + tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate; +} + +function insertHelpIFrame() { + var html; + + if (tinyMCEPopup.getParam('docs_url')) { + html = ''; + document.getElementById('iframecontainer').innerHTML = html; + document.getElementById('help_tab').style.display = 'block'; + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/anchor.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/anchor.js new file mode 100644 index 0000000..d7a854e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/anchor.js @@ -0,0 +1,37 @@ +tinyMCEPopup.requireLangPack(); + +var AnchorDialog = { + init : function(ed) { + var action, elm, f = document.forms[0]; + + this.editor = ed; + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + v = ed.dom.getAttrib(elm, 'name'); + + if (v) { + this.action = 'update'; + f.anchorName.value = v; + } + + f.insert.value = ed.getLang(elm ? 'update' : 'insert'); + }, + + update : function() { + var ed = this.editor, elm, name = document.forms[0].anchorName.value; + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) + elm.name = name; + else + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, '')); + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/charmap.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/charmap.js new file mode 100644 index 0000000..53a2683 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/charmap.js @@ -0,0 +1,335 @@ +/** + * charmap.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +tinyMCEPopup.requireLangPack(); + +var charmap = [ + [' ', ' ', true, 'no-break space'], + ['&', '&', true, 'ampersand'], + ['"', '"', true, 'quotation mark'], +// finance + ['¢', '¢', true, 'cent sign'], + ['€', '€', true, 'euro sign'], + ['£', '£', true, 'pound sign'], + ['¥', '¥', true, 'yen sign'], +// signs + ['©', '©', true, 'copyright sign'], + ['®', '®', true, 'registered sign'], + ['™', '™', true, 'trade mark sign'], + ['‰', '‰', true, 'per mille sign'], + ['µ', 'µ', true, 'micro sign'], + ['·', '·', true, 'middle dot'], + ['•', '•', true, 'bullet'], + ['…', '…', true, 'three dot leader'], + ['′', '′', true, 'minutes / feet'], + ['″', '″', true, 'seconds / inches'], + ['§', '§', true, 'section sign'], + ['¶', '¶', true, 'paragraph sign'], + ['ß', 'ß', true, 'sharp s / ess-zed'], +// quotations + ['‹', '‹', true, 'single left-pointing angle quotation mark'], + ['›', '›', true, 'single right-pointing angle quotation mark'], + ['«', '«', true, 'left pointing guillemet'], + ['»', '»', true, 'right pointing guillemet'], + ['‘', '‘', true, 'left single quotation mark'], + ['’', '’', true, 'right single quotation mark'], + ['“', '“', true, 'left double quotation mark'], + ['”', '”', true, 'right double quotation mark'], + ['‚', '‚', true, 'single low-9 quotation mark'], + ['„', '„', true, 'double low-9 quotation mark'], + ['<', '<', true, 'less-than sign'], + ['>', '>', true, 'greater-than sign'], + ['≤', '≤', true, 'less-than or equal to'], + ['≥', '≥', true, 'greater-than or equal to'], + ['–', '–', true, 'en dash'], + ['—', '—', true, 'em dash'], + ['¯', '¯', true, 'macron'], + ['‾', '‾', true, 'overline'], + ['¤', '¤', true, 'currency sign'], + ['¦', '¦', true, 'broken bar'], + ['¨', '¨', true, 'diaeresis'], + ['¡', '¡', true, 'inverted exclamation mark'], + ['¿', '¿', true, 'turned question mark'], + ['ˆ', 'ˆ', true, 'circumflex accent'], + ['˜', '˜', true, 'small tilde'], + ['°', '°', true, 'degree sign'], + ['−', '−', true, 'minus sign'], + ['±', '±', true, 'plus-minus sign'], + ['÷', '÷', true, 'division sign'], + ['⁄', '⁄', true, 'fraction slash'], + ['×', '×', true, 'multiplication sign'], + ['¹', '¹', true, 'superscript one'], + ['²', '²', true, 'superscript two'], + ['³', '³', true, 'superscript three'], + ['¼', '¼', true, 'fraction one quarter'], + ['½', '½', true, 'fraction one half'], + ['¾', '¾', true, 'fraction three quarters'], +// math / logical + ['ƒ', 'ƒ', true, 'function / florin'], + ['∫', '∫', true, 'integral'], + ['∑', '∑', true, 'n-ary sumation'], + ['∞', '∞', true, 'infinity'], + ['√', '√', true, 'square root'], + ['∼', '∼', false,'similar to'], + ['≅', '≅', false,'approximately equal to'], + ['≈', '≈', true, 'almost equal to'], + ['≠', '≠', true, 'not equal to'], + ['≡', '≡', true, 'identical to'], + ['∈', '∈', false,'element of'], + ['∉', '∉', false,'not an element of'], + ['∋', '∋', false,'contains as member'], + ['∏', '∏', true, 'n-ary product'], + ['∧', '∧', false,'logical and'], + ['∨', '∨', false,'logical or'], + ['¬', '¬', true, 'not sign'], + ['∩', '∩', true, 'intersection'], + ['∪', '∪', false,'union'], + ['∂', '∂', true, 'partial differential'], + ['∀', '∀', false,'for all'], + ['∃', '∃', false,'there exists'], + ['∅', '∅', false,'diameter'], + ['∇', '∇', false,'backward difference'], + ['∗', '∗', false,'asterisk operator'], + ['∝', '∝', false,'proportional to'], + ['∠', '∠', false,'angle'], +// undefined + ['´', '´', true, 'acute accent'], + ['¸', '¸', true, 'cedilla'], + ['ª', 'ª', true, 'feminine ordinal indicator'], + ['º', 'º', true, 'masculine ordinal indicator'], + ['†', '†', true, 'dagger'], + ['‡', '‡', true, 'double dagger'], +// alphabetical special chars + ['À', 'À', true, 'A - grave'], + ['Á', 'Á', true, 'A - acute'], + ['Â', 'Â', true, 'A - circumflex'], + ['Ã', 'Ã', true, 'A - tilde'], + ['Ä', 'Ä', true, 'A - diaeresis'], + ['Å', 'Å', true, 'A - ring above'], + ['Æ', 'Æ', true, 'ligature AE'], + ['Ç', 'Ç', true, 'C - cedilla'], + ['È', 'È', true, 'E - grave'], + ['É', 'É', true, 'E - acute'], + ['Ê', 'Ê', true, 'E - circumflex'], + ['Ë', 'Ë', true, 'E - diaeresis'], + ['Ì', 'Ì', true, 'I - grave'], + ['Í', 'Í', true, 'I - acute'], + ['Î', 'Î', true, 'I - circumflex'], + ['Ï', 'Ï', true, 'I - diaeresis'], + ['Ð', 'Ð', true, 'ETH'], + ['Ñ', 'Ñ', true, 'N - tilde'], + ['Ò', 'Ò', true, 'O - grave'], + ['Ó', 'Ó', true, 'O - acute'], + ['Ô', 'Ô', true, 'O - circumflex'], + ['Õ', 'Õ', true, 'O - tilde'], + ['Ö', 'Ö', true, 'O - diaeresis'], + ['Ø', 'Ø', true, 'O - slash'], + ['Œ', 'Œ', true, 'ligature OE'], + ['Š', 'Š', true, 'S - caron'], + ['Ù', 'Ù', true, 'U - grave'], + ['Ú', 'Ú', true, 'U - acute'], + ['Û', 'Û', true, 'U - circumflex'], + ['Ü', 'Ü', true, 'U - diaeresis'], + ['Ý', 'Ý', true, 'Y - acute'], + ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], + ['Þ', 'Þ', true, 'THORN'], + ['à', 'à', true, 'a - grave'], + ['á', 'á', true, 'a - acute'], + ['â', 'â', true, 'a - circumflex'], + ['ã', 'ã', true, 'a - tilde'], + ['ä', 'ä', true, 'a - diaeresis'], + ['å', 'å', true, 'a - ring above'], + ['æ', 'æ', true, 'ligature ae'], + ['ç', 'ç', true, 'c - cedilla'], + ['è', 'è', true, 'e - grave'], + ['é', 'é', true, 'e - acute'], + ['ê', 'ê', true, 'e - circumflex'], + ['ë', 'ë', true, 'e - diaeresis'], + ['ì', 'ì', true, 'i - grave'], + ['í', 'í', true, 'i - acute'], + ['î', 'î', true, 'i - circumflex'], + ['ï', 'ï', true, 'i - diaeresis'], + ['ð', 'ð', true, 'eth'], + ['ñ', 'ñ', true, 'n - tilde'], + ['ò', 'ò', true, 'o - grave'], + ['ó', 'ó', true, 'o - acute'], + ['ô', 'ô', true, 'o - circumflex'], + ['õ', 'õ', true, 'o - tilde'], + ['ö', 'ö', true, 'o - diaeresis'], + ['ø', 'ø', true, 'o slash'], + ['œ', 'œ', true, 'ligature oe'], + ['š', 'š', true, 's - caron'], + ['ù', 'ù', true, 'u - grave'], + ['ú', 'ú', true, 'u - acute'], + ['û', 'û', true, 'u - circumflex'], + ['ü', 'ü', true, 'u - diaeresis'], + ['ý', 'ý', true, 'y - acute'], + ['þ', 'þ', true, 'thorn'], + ['ÿ', 'ÿ', true, 'y - diaeresis'], + ['Α', 'Α', true, 'Alpha'], + ['Β', 'Β', true, 'Beta'], + ['Γ', 'Γ', true, 'Gamma'], + ['Δ', 'Δ', true, 'Delta'], + ['Ε', 'Ε', true, 'Epsilon'], + ['Ζ', 'Ζ', true, 'Zeta'], + ['Η', 'Η', true, 'Eta'], + ['Θ', 'Θ', true, 'Theta'], + ['Ι', 'Ι', true, 'Iota'], + ['Κ', 'Κ', true, 'Kappa'], + ['Λ', 'Λ', true, 'Lambda'], + ['Μ', 'Μ', true, 'Mu'], + ['Ν', 'Ν', true, 'Nu'], + ['Ξ', 'Ξ', true, 'Xi'], + ['Ο', 'Ο', true, 'Omicron'], + ['Π', 'Π', true, 'Pi'], + ['Ρ', 'Ρ', true, 'Rho'], + ['Σ', 'Σ', true, 'Sigma'], + ['Τ', 'Τ', true, 'Tau'], + ['Υ', 'Υ', true, 'Upsilon'], + ['Φ', 'Φ', true, 'Phi'], + ['Χ', 'Χ', true, 'Chi'], + ['Ψ', 'Ψ', true, 'Psi'], + ['Ω', 'Ω', true, 'Omega'], + ['α', 'α', true, 'alpha'], + ['β', 'β', true, 'beta'], + ['γ', 'γ', true, 'gamma'], + ['δ', 'δ', true, 'delta'], + ['ε', 'ε', true, 'epsilon'], + ['ζ', 'ζ', true, 'zeta'], + ['η', 'η', true, 'eta'], + ['θ', 'θ', true, 'theta'], + ['ι', 'ι', true, 'iota'], + ['κ', 'κ', true, 'kappa'], + ['λ', 'λ', true, 'lambda'], + ['μ', 'μ', true, 'mu'], + ['ν', 'ν', true, 'nu'], + ['ξ', 'ξ', true, 'xi'], + ['ο', 'ο', true, 'omicron'], + ['π', 'π', true, 'pi'], + ['ρ', 'ρ', true, 'rho'], + ['ς', 'ς', true, 'final sigma'], + ['σ', 'σ', true, 'sigma'], + ['τ', 'τ', true, 'tau'], + ['υ', 'υ', true, 'upsilon'], + ['φ', 'φ', true, 'phi'], + ['χ', 'χ', true, 'chi'], + ['ψ', 'ψ', true, 'psi'], + ['ω', 'ω', true, 'omega'], +// symbols + ['ℵ', 'ℵ', false,'alef symbol'], + ['ϖ', 'ϖ', false,'pi symbol'], + ['ℜ', 'ℜ', false,'real part symbol'], + ['ϑ','ϑ', false,'theta symbol'], + ['ϒ', 'ϒ', false,'upsilon - hook symbol'], + ['℘', '℘', false,'Weierstrass p'], + ['ℑ', 'ℑ', false,'imaginary part'], +// arrows + ['←', '←', true, 'leftwards arrow'], + ['↑', '↑', true, 'upwards arrow'], + ['→', '→', true, 'rightwards arrow'], + ['↓', '↓', true, 'downwards arrow'], + ['↔', '↔', true, 'left right arrow'], + ['↵', '↵', false,'carriage return'], + ['⇐', '⇐', false,'leftwards double arrow'], + ['⇑', '⇑', false,'upwards double arrow'], + ['⇒', '⇒', false,'rightwards double arrow'], + ['⇓', '⇓', false,'downwards double arrow'], + ['⇔', '⇔', false,'left right double arrow'], + ['∴', '∴', false,'therefore'], + ['⊂', '⊂', false,'subset of'], + ['⊃', '⊃', false,'superset of'], + ['⊄', '⊄', false,'not a subset of'], + ['⊆', '⊆', false,'subset of or equal to'], + ['⊇', '⊇', false,'superset of or equal to'], + ['⊕', '⊕', false,'circled plus'], + ['⊗', '⊗', false,'circled times'], + ['⊥', '⊥', false,'perpendicular'], + ['⋅', '⋅', false,'dot operator'], + ['⌈', '⌈', false,'left ceiling'], + ['⌉', '⌉', false,'right ceiling'], + ['⌊', '⌊', false,'left floor'], + ['⌋', '⌋', false,'right floor'], + ['⟨', '〈', false,'left-pointing angle bracket'], + ['⟩', '〉', false,'right-pointing angle bracket'], + ['◊', '◊', true,'lozenge'], + ['♠', '♠', false,'black spade suit'], + ['♣', '♣', true, 'black club suit'], + ['♥', '♥', true, 'black heart suit'], + ['♦', '♦', true, 'black diamond suit'], + [' ', ' ', false,'en space'], + [' ', ' ', false,'em space'], + [' ', ' ', false,'thin space'], + ['‌', '‌', false,'zero width non-joiner'], + ['‍', '‍', false,'zero width joiner'], + ['‎', '‎', false,'left-to-right mark'], + ['‏', '‏', false,'right-to-left mark'], + ['­', '­', false,'soft hyphen'] +]; + +tinyMCEPopup.onInit.add(function() { + tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML()); +}); + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20, i; + var html = ''; + var cols=-1; + + for (i=0; i' + + '' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + + html += '
'; + + return html; +} + +function insertChar(chr) { + tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); + + // Refocus in window + if (tinyMCEPopup.isWindow) + window.focus(); + + tinyMCEPopup.editor.focus(); + tinyMCEPopup.close(); +} + +function previewChar(codeA, codeB, codeN) { + var elmA = document.getElementById('codeA'); + var elmB = document.getElementById('codeB'); + var elmV = document.getElementById('codeV'); + var elmN = document.getElementById('codeN'); + + if (codeA=='#160;') { + elmV.innerHTML = '__'; + } else { + elmV.innerHTML = '&' + codeA; + } + + elmB.innerHTML = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/color_picker.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..c1a65db --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/color_picker.js @@ -0,0 +1,253 @@ +tinyMCEPopup.requireLangPack(); + +var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; + +var colors = [ + "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", + "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", + "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", + "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", + "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", + "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", + "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", + "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", + "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", + "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", + "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", + "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", + "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", + "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", + "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", + "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", + "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", + "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", + "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", + "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", + "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", + "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", + "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", + "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", + "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", + "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", + "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" +]; + +var named = { + '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', + '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', + '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', + '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', + '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', + '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', + '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', + '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', + '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', + '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', + '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', + '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', + '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', + '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' +}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')); + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + tinyMCEPopup.restoreSelection(); + + if (f) + f(color); + + tinyMCEPopup.close(); +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toLowerCase(); +} + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + if (!col) + return col; + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return {r : r, g : g, b : b}; + } + + return null; +} + +function generatePicker() { + var el = document.getElementById('light'), h = '', i; + + for (i = 0; i < detail; i++){ + h += '
'; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + h += '' + + ''; + + for (i=0; i' + + '' + + ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
'; + + el.innerHTML = h; + el.className = 'generated'; +} + +function generateNamedColors() { + var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; + + if (el.className == 'generated') + return; + + for (n in named) { + v = named[n]; + h += '' + } + + el.innerHTML = h; + el.className = 'generated'; +} + +function dechex(n) { + return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); +} + +function computeColor(e) { + var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB; + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0); + + partWidth = document.getElementById('colors').width / 6; + partDetail = detail / 2; + imHeight = document.getElementById('colors').height; + + r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; + g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); + b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); + + coef = (imHeight - y) / imHeight; + r = 128 + (r - 128) * coef; + g = 128 + (g - 128) * coef; + b = 128 + (b - 128) * coef; + + changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); + updateLight(r, g, b); +} + +function updateLight(r, g, b) { + var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; + + for (i=0; i=0) && (i'); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '180px'; + + e = ed.selection.getNode(); + + this.fillFileList('image_list', 'tinyMCEImageList'); + + if (e.nodeName == 'IMG') { + f.src.value = ed.dom.getAttrib(e, 'src'); + f.alt.value = ed.dom.getAttrib(e, 'alt'); + f.border.value = this.getAttrib(e, 'border'); + f.vspace.value = this.getAttrib(e, 'vspace'); + f.hspace.value = this.getAttrib(e, 'hspace'); + f.width.value = ed.dom.getAttrib(e, 'width'); + f.height.value = ed.dom.getAttrib(e, 'height'); + f.insert.value = ed.getLang('update'); + this.styleVal = ed.dom.getAttrib(e, 'style'); + selectByValue(f, 'image_list', f.src.value); + selectByValue(f, 'align', this.getAttrib(e, 'align')); + this.updateStyle(); + } + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + update : function() { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (!ed.settings.inline_styles) { + args = tinymce.extend(args, { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }); + } else + args.style = this.styleVal; + + tinymce.extend(args, { + src : f.src.value, + alt : f.alt.value, + width : f.width.value, + height : f.height.value + }); + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + st = tinyMCEPopup.dom.parseStyle(this.styleVal); + + // Handle align + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') { + st['float'] = v; + delete st['vertical-align']; + } else { + st['vertical-align'] = v; + delete st['float']; + } + } else { + delete st['float']; + delete st['vertical-align']; + } + + // Handle border + v = f.border.value; + if (v || v == '0') { + if (v == '0') + st['border'] = '0'; + else + st['border'] = v + 'px solid black'; + } else + delete st['border']; + + // Handle hspace + v = f.hspace.value; + if (v) { + delete st['margin']; + st['margin-left'] = v + 'px'; + st['margin-right'] = v + 'px'; + } else { + delete st['margin-left']; + delete st['margin-right']; + } + + // Handle vspace + v = f.vspace.value; + if (v) { + delete st['margin']; + st['margin-top'] = v + 'px'; + st['margin-bottom'] = v + 'px'; + } else { + delete st['margin-top']; + delete st['margin-bottom']; + } + + // Merge + st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.width.value = f.height.value = ""; + }, + + updateImageData : function() { + var f = document.forms[0], t = ImageDialog; + + if (f.width.value == "") + f.width.value = t.preloadImg.width; + + if (f.height.value == "") + f.height.value = t.preloadImg.height; + }, + + getImageData : function() { + var f = document.forms[0]; + + this.preloadImg = new Image(); + this.preloadImg.onload = this.updateImageData; + this.preloadImg.onerror = this.resetImageData; + this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/link.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/link.js new file mode 100644 index 0000000..73b9f59 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/link.js @@ -0,0 +1,156 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link'); + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '180px'; + + this.fillClassList('class_list'); + this.fillFileList('link_list', 'tinyMCELinkList'); + this.fillTargetList('target_list'); + + if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) { + f.href.value = ed.dom.getAttrib(e, 'href'); + f.linktitle.value = ed.dom.getAttrib(e, 'title'); + f.insert.value = ed.getLang('update'); + selectByValue(f, 'link_list', f.href.value); + selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target')); + selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class')); + } + }, + + update : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor, e, b; + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); + + tinymce.each(ed.dom.select("a"), function(n) { + if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { + e = n; + + ed.dom.setAttribs(e, { + href : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + }); + } else { + ed.dom.setAttribs(e, { + href : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + + // Don't move caret if selection was image + if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { + ed.focus(); + ed.selection.select(e); + ed.selection.collapse(0); + tinyMCEPopup.storeSelection(); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + }, + + checkPrefix : function(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) + n.value = 'http://' + n.value; + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillTargetList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v; + + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); + + if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { + tinymce.each(v.split(','), function(v) { + v = v.split('='); + lst.options[lst.options.length] = new Option(v[0], v[1]); + }); + } + } +}; + +LinkDialog.preInit(); +tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/js/source_editor.js b/app/plugins/tinymce/webroot/js/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..81063ec --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/js/source_editor.js @@ -0,0 +1,62 @@ +tinyMCEPopup.requireLangPack(); +tinyMCEPopup.onInit.add(onLoadInit); + +function saveContent() { + tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Remove Gecko spellchecking + if (tinymce.isGecko) + document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); + + document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); + + if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { + setWrap('soft'); + document.getElementById('wraped').checked = true; + } + + resizeInputs(); +} + +function setWrap(val) { + var v, n, s = document.getElementById('htmlSource'); + + s.wrap = val; + + if (!tinymce.isIE) { + v = s.value; + n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function toggleWordWrap(elm) { + if (elm.checked) + setWrap('soft'); + else + setWrap('off'); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + var el = document.getElementById('htmlSource'); + + if (!tinymce.isIE) { + wHeight = self.innerHeight - 65; + wWidth = self.innerWidth - 16; + } else { + wHeight = document.body.clientHeight - 70; + wWidth = document.body.clientWidth - 16; + } + + el.style.height = Math.abs(wHeight) + 'px'; + el.style.width = Math.abs(wWidth) + 'px'; +} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/entries new file mode 100644 index 0000000..cc672b7 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/langs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +en_dlg.js +file + + + + +2010-09-04T08:55:28.000000Z +9a83ef13d214953214b354ca5b657867 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1674 + +en.js +file + + + + +2010-09-04T08:55:28.000000Z +6cfaa5303f0e96e2fbe1ff210ba1f65b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1835 + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en.js.svn-base new file mode 100644 index 0000000..52989e3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en.js.svn-base @@ -0,0 +1,62 @@ +tinyMCE.addI18n('en.advanced',{ +style_select:"Styles", +font_size:"Font size", +fontdefault:"Font family", +block:"Format", +paragraph:"Paragraph", +div:"Div", +address:"Address", +pre:"Preformatted", +h1:"Heading 1", +h2:"Heading 2", +h3:"Heading 3", +h4:"Heading 4", +h5:"Heading 5", +h6:"Heading 6", +blockquote:"Blockquote", +code:"Code", +samp:"Code sample", +dt:"Definition term ", +dd:"Definition description", +bold_desc:"Bold (Ctrl+B)", +italic_desc:"Italic (Ctrl+I)", +underline_desc:"Underline (Ctrl+U)", +striketrough_desc:"Strikethrough", +justifyleft_desc:"Align left", +justifycenter_desc:"Align center", +justifyright_desc:"Align right", +justifyfull_desc:"Align full", +bullist_desc:"Unordered list", +numlist_desc:"Ordered list", +outdent_desc:"Outdent", +indent_desc:"Indent", +undo_desc:"Undo (Ctrl+Z)", +redo_desc:"Redo (Ctrl+Y)", +link_desc:"Insert/edit link", +unlink_desc:"Unlink", +image_desc:"Insert/edit image", +cleanup_desc:"Cleanup messy code", +code_desc:"Edit HTML Source", +sub_desc:"Subscript", +sup_desc:"Superscript", +hr_desc:"Insert horizontal ruler", +removeformat_desc:"Remove formatting", +custom1_desc:"Your custom description here", +forecolor_desc:"Select text color", +backcolor_desc:"Select background color", +charmap_desc:"Insert custom character", +visualaid_desc:"Toggle guidelines/invisible elements", +anchor_desc:"Insert/edit anchor", +cut_desc:"Cut", +copy_desc:"Copy", +paste_desc:"Paste", +image_props_desc:"Image properties", +newdocument_desc:"New document", +help_desc:"Help", +blockquote_desc:"Blockquote", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?", +path:"Path", +newdocument:"Are you sure you want clear all contents?", +toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X", +more_colors:"More colors" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en_dlg.js.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en_dlg.js.svn-base new file mode 100644 index 0000000..80e4941 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/langs/.svn/text-base/en_dlg.js.svn-base @@ -0,0 +1,51 @@ +tinyMCE.addI18n('en.advanced_dlg',{ +about_title:"About TinyMCE", +about_general:"About", +about_help:"Help", +about_license:"License", +about_plugins:"Plugins", +about_plugin:"Plugin", +about_author:"Author", +about_version:"Version", +about_loaded:"Loaded plugins", +anchor_title:"Insert/edit anchor", +anchor_name:"Anchor name", +code_title:"HTML Source Editor", +code_wordwrap:"Word wrap", +colorpicker_title:"Select a color", +colorpicker_picker_tab:"Picker", +colorpicker_picker_title:"Color picker", +colorpicker_palette_tab:"Palette", +colorpicker_palette_title:"Palette colors", +colorpicker_named_tab:"Named", +colorpicker_named_title:"Named colors", +colorpicker_color:"Color:", +colorpicker_name:"Name:", +charmap_title:"Select custom character", +image_title:"Insert/edit image", +image_src:"Image URL", +image_alt:"Image description", +image_list:"Image list", +image_border:"Border", +image_dimensions:"Dimensions", +image_vspace:"Vertical space", +image_hspace:"Horizontal space", +image_align:"Alignment", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text bottom", +image_align_left:"Left", +image_align_right:"Right", +link_title:"Insert/edit link", +link_url:"Link URL", +link_target:"Target", +link_target_same:"Open link in the same window", +link_target_blank:"Open link in a new window", +link_titlefield:"Title", +link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +link_list:"Link list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/langs/en.js b/app/plugins/tinymce/webroot/js/themes/advanced/langs/en.js new file mode 100644 index 0000000..52989e3 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/langs/en.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('en.advanced',{ +style_select:"Styles", +font_size:"Font size", +fontdefault:"Font family", +block:"Format", +paragraph:"Paragraph", +div:"Div", +address:"Address", +pre:"Preformatted", +h1:"Heading 1", +h2:"Heading 2", +h3:"Heading 3", +h4:"Heading 4", +h5:"Heading 5", +h6:"Heading 6", +blockquote:"Blockquote", +code:"Code", +samp:"Code sample", +dt:"Definition term ", +dd:"Definition description", +bold_desc:"Bold (Ctrl+B)", +italic_desc:"Italic (Ctrl+I)", +underline_desc:"Underline (Ctrl+U)", +striketrough_desc:"Strikethrough", +justifyleft_desc:"Align left", +justifycenter_desc:"Align center", +justifyright_desc:"Align right", +justifyfull_desc:"Align full", +bullist_desc:"Unordered list", +numlist_desc:"Ordered list", +outdent_desc:"Outdent", +indent_desc:"Indent", +undo_desc:"Undo (Ctrl+Z)", +redo_desc:"Redo (Ctrl+Y)", +link_desc:"Insert/edit link", +unlink_desc:"Unlink", +image_desc:"Insert/edit image", +cleanup_desc:"Cleanup messy code", +code_desc:"Edit HTML Source", +sub_desc:"Subscript", +sup_desc:"Superscript", +hr_desc:"Insert horizontal ruler", +removeformat_desc:"Remove formatting", +custom1_desc:"Your custom description here", +forecolor_desc:"Select text color", +backcolor_desc:"Select background color", +charmap_desc:"Insert custom character", +visualaid_desc:"Toggle guidelines/invisible elements", +anchor_desc:"Insert/edit anchor", +cut_desc:"Cut", +copy_desc:"Copy", +paste_desc:"Paste", +image_props_desc:"Image properties", +newdocument_desc:"New document", +help_desc:"Help", +blockquote_desc:"Blockquote", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?", +path:"Path", +newdocument:"Are you sure you want clear all contents?", +toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X", +more_colors:"More colors" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/langs/en_dlg.js b/app/plugins/tinymce/webroot/js/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..80e4941 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/langs/en_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('en.advanced_dlg',{ +about_title:"About TinyMCE", +about_general:"About", +about_help:"Help", +about_license:"License", +about_plugins:"Plugins", +about_plugin:"Plugin", +about_author:"Author", +about_version:"Version", +about_loaded:"Loaded plugins", +anchor_title:"Insert/edit anchor", +anchor_name:"Anchor name", +code_title:"HTML Source Editor", +code_wordwrap:"Word wrap", +colorpicker_title:"Select a color", +colorpicker_picker_tab:"Picker", +colorpicker_picker_title:"Color picker", +colorpicker_palette_tab:"Palette", +colorpicker_palette_title:"Palette colors", +colorpicker_named_tab:"Named", +colorpicker_named_title:"Named colors", +colorpicker_color:"Color:", +colorpicker_name:"Name:", +charmap_title:"Select custom character", +image_title:"Insert/edit image", +image_src:"Image URL", +image_alt:"Image description", +image_list:"Image list", +image_border:"Border", +image_dimensions:"Dimensions", +image_vspace:"Vertical space", +image_hspace:"Horizontal space", +image_align:"Alignment", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text bottom", +image_align_left:"Left", +image_align_right:"Right", +link_title:"Insert/edit link", +link_url:"Link URL", +link_target:"Target", +link_target_same:"Open link in the same window", +link_target_blank:"Open link in a new window", +link_titlefield:"Title", +link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +link_list:"Link list" +}); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/link.htm b/app/plugins/tinymce/webroot/js/themes/advanced/link.htm new file mode 100644 index 0000000..22627cc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/link.htm @@ -0,0 +1,58 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/skins/.svn/entries new file mode 100644 index 0000000..548c977 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/skins +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +o2k7 +dir + +default +dir + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/entries new file mode 100644 index 0000000..9200420 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/entries @@ -0,0 +1,133 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/skins/default +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +content.css +file + + + + +2010-09-04T08:55:28.000000Z +81929c113470c66349b5086c6c7c9af0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1408 + +ui.css +file + + + + +2010-09-04T08:55:28.000000Z +79352a602390ae6d4e3bf6f9c2494173 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +15417 + +dialog.css +file + + + + +2010-09-04T08:55:28.000000Z +56b99f4e744b576fc0b79da0a997f328 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5499 + +img +dir + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/content.css.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/content.css.svn-base new file mode 100644 index 0000000..dd8fb95 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/content.css.svn-base @@ -0,0 +1,36 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/dialog.css.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/dialog.css.svn-base new file mode 100644 index 0000000..1f5598c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/dialog.css.svn-base @@ -0,0 +1,117 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker #previewblock {float:right; padding-left:10px; height:20px;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/ui.css.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/ui.css.svn-base new file mode 100644 index 0000000..7f6cf5f --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/.svn/text-base/ui.css.svn-base @@ -0,0 +1,213 @@ +/* Reset */ +.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} +.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.defaultSkin table td {vertical-align:middle} + +/* Containers */ +.defaultSkin table {direction:ltr; background:#F0F0EE} +.defaultSkin iframe {display:block; background:#FFF} +.defaultSkin .mceToolbar {height:26px} +.defaultSkin .mceLeft {text-align:left} +.defaultSkin .mceRight {text-align:right} + +/* External */ +.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} +.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC} +.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} +.defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top} +.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} +.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} +.defaultSkin .mceStatusbar div {float:left; margin:2px} +.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.defaultSkin .mceStatusbar a:hover {text-decoration:underline} +.defaultSkin table.mceToolbar {margin-left:3px} +.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.defaultSkin td.mceCenter {text-align:center;} +.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;} +.defaultSkin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px} +.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceButtonLabeled {width:auto} +.defaultSkin .mceButtonLabeled span.mceIcon {float:left} +.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px} + +/* ListBox */ +.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block} +.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;} +.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF} +.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0} +.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} +.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px} +.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} +.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} + +/* SplitButton */ +.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr} +.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block} +.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} +.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);} +.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;} +.defaultSkin .mceSplitButton span.mceOpen {display:none} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} +.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;} + +/* ColorSplitButton */ +.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.defaultSkin .mceColorSplitMenu td {padding:2px} +.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} +.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} +.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} + +/* Menu */ +.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8} +.defaultSkin .mceNoIcons span.mceIcon {width:0;} +.defaultSkin .mceNoIcons a .mceText {padding-left:10px} +.defaultSkin .mceMenu table {background:#FFF} +.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block} +.defaultSkin .mceMenu td {height:20px} +.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0} +.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px} +.defaultSkin .mceMenu pre.mceText {font-family:Monospace} +.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px} +.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} +.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.defaultSkin .mceMenuItemDisabled .mceText {color:#888} +.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} +.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} +.defaultSkin .mceMenu span.mceMenuLine {display:none} +.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} + +/* Progress,Resize */ +.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} +.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Formats */ +.defaultSkin .mce_formatPreview a {font-size:10px} +.defaultSkin .mce_p span.mceText {} +.defaultSkin .mce_address span.mceText {font-style:italic} +.defaultSkin .mce_pre span.mceText {font-family:monospace} +.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.defaultSkin span.mce_bold {background-position:0 0} +.defaultSkin span.mce_italic {background-position:-60px 0} +.defaultSkin span.mce_underline {background-position:-140px 0} +.defaultSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSkin span.mce_undo {background-position:-160px 0} +.defaultSkin span.mce_redo {background-position:-100px 0} +.defaultSkin span.mce_cleanup {background-position:-40px 0} +.defaultSkin span.mce_bullist {background-position:-20px 0} +.defaultSkin span.mce_numlist {background-position:-80px 0} +.defaultSkin span.mce_justifyleft {background-position:-460px 0} +.defaultSkin span.mce_justifyright {background-position:-480px 0} +.defaultSkin span.mce_justifycenter {background-position:-420px 0} +.defaultSkin span.mce_justifyfull {background-position:-440px 0} +.defaultSkin span.mce_anchor {background-position:-200px 0} +.defaultSkin span.mce_indent {background-position:-400px 0} +.defaultSkin span.mce_outdent {background-position:-540px 0} +.defaultSkin span.mce_link {background-position:-500px 0} +.defaultSkin span.mce_unlink {background-position:-640px 0} +.defaultSkin span.mce_sub {background-position:-600px 0} +.defaultSkin span.mce_sup {background-position:-620px 0} +.defaultSkin span.mce_removeformat {background-position:-580px 0} +.defaultSkin span.mce_newdocument {background-position:-520px 0} +.defaultSkin span.mce_image {background-position:-380px 0} +.defaultSkin span.mce_help {background-position:-340px 0} +.defaultSkin span.mce_code {background-position:-260px 0} +.defaultSkin span.mce_hr {background-position:-360px 0} +.defaultSkin span.mce_visualaid {background-position:-660px 0} +.defaultSkin span.mce_charmap {background-position:-240px 0} +.defaultSkin span.mce_paste {background-position:-560px 0} +.defaultSkin span.mce_copy {background-position:-700px 0} +.defaultSkin span.mce_cut {background-position:-680px 0} +.defaultSkin span.mce_blockquote {background-position:-220px 0} +.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0} +.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.defaultSkin span.mce_forecolorpicker {background-position:-720px 0} +.defaultSkin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.defaultSkin span.mce_advhr {background-position:-0px -20px} +.defaultSkin span.mce_ltr {background-position:-20px -20px} +.defaultSkin span.mce_rtl {background-position:-40px -20px} +.defaultSkin span.mce_emotions {background-position:-60px -20px} +.defaultSkin span.mce_fullpage {background-position:-80px -20px} +.defaultSkin span.mce_fullscreen {background-position:-100px -20px} +.defaultSkin span.mce_iespell {background-position:-120px -20px} +.defaultSkin span.mce_insertdate {background-position:-140px -20px} +.defaultSkin span.mce_inserttime {background-position:-160px -20px} +.defaultSkin span.mce_absolute {background-position:-180px -20px} +.defaultSkin span.mce_backward {background-position:-200px -20px} +.defaultSkin span.mce_forward {background-position:-220px -20px} +.defaultSkin span.mce_insert_layer {background-position:-240px -20px} +.defaultSkin span.mce_insertlayer {background-position:-260px -20px} +.defaultSkin span.mce_movebackward {background-position:-280px -20px} +.defaultSkin span.mce_moveforward {background-position:-300px -20px} +.defaultSkin span.mce_media {background-position:-320px -20px} +.defaultSkin span.mce_nonbreaking {background-position:-340px -20px} +.defaultSkin span.mce_pastetext {background-position:-360px -20px} +.defaultSkin span.mce_pasteword {background-position:-380px -20px} +.defaultSkin span.mce_selectall {background-position:-400px -20px} +.defaultSkin span.mce_preview {background-position:-420px -20px} +.defaultSkin span.mce_print {background-position:-440px -20px} +.defaultSkin span.mce_cancel {background-position:-460px -20px} +.defaultSkin span.mce_save {background-position:-480px -20px} +.defaultSkin span.mce_replace {background-position:-500px -20px} +.defaultSkin span.mce_search {background-position:-520px -20px} +.defaultSkin span.mce_styleprops {background-position:-560px -20px} +.defaultSkin span.mce_table {background-position:-580px -20px} +.defaultSkin span.mce_cell_props {background-position:-600px -20px} +.defaultSkin span.mce_delete_table {background-position:-620px -20px} +.defaultSkin span.mce_delete_col {background-position:-640px -20px} +.defaultSkin span.mce_delete_row {background-position:-660px -20px} +.defaultSkin span.mce_col_after {background-position:-680px -20px} +.defaultSkin span.mce_col_before {background-position:-700px -20px} +.defaultSkin span.mce_row_after {background-position:-720px -20px} +.defaultSkin span.mce_row_before {background-position:-740px -20px} +.defaultSkin span.mce_merge_cells {background-position:-760px -20px} +.defaultSkin span.mce_table_props {background-position:-980px -20px} +.defaultSkin span.mce_row_props {background-position:-780px -20px} +.defaultSkin span.mce_split_cells {background-position:-800px -20px} +.defaultSkin span.mce_template {background-position:-820px -20px} +.defaultSkin span.mce_visualchars {background-position:-840px -20px} +.defaultSkin span.mce_abbr {background-position:-860px -20px} +.defaultSkin span.mce_acronym {background-position:-880px -20px} +.defaultSkin span.mce_attribs {background-position:-900px -20px} +.defaultSkin span.mce_cite {background-position:-920px -20px} +.defaultSkin span.mce_del {background-position:-940px -20px} +.defaultSkin span.mce_ins {background-position:-960px -20px} +.defaultSkin span.mce_pagebreak {background-position:0 -40px} +.defaultSkin span.mce_restoredraft {background-position:-20px -40px} +.defaultSkin span.mce_spellchecker {background-position:-540px -20px} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/content.css b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..c5b7e82 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/content.css @@ -0,0 +1,36 @@ +body, td, pre {color:#333; font-family:Georgia, Arial, Helvetica, sans-serif; font-size:14px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/dialog.css b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..1f5598c --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/dialog.css @@ -0,0 +1,117 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker #previewblock {float:right; padding-left:10px; height:20px;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/entries b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/entries new file mode 100644 index 0000000..4a1ed5d --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/entries @@ -0,0 +1,232 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +buttons.png +file + + + + +2010-09-04T08:55:28.000000Z +1e0acdc2135897e6a95bb40cfde2fbc6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +3274 + +menu_arrow.gif +file + + + + +2010-09-04T08:55:28.000000Z +e21752451a9d80e276fef7b602bdbdba +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +68 + +items.gif +file + + + + +2010-09-04T08:55:28.000000Z +5cb42865ce70a58d420786854fed4ae1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +70 + +menu_check.gif +file + + + + +2010-09-04T08:55:28.000000Z +c7d003885737f94768eecae49dcbca63 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +70 + +progress.gif +file + + + + +2010-09-04T08:55:28.000000Z +50c5e3e79b276c92df6cc52caeb464f0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1787 + +tabs.gif +file + + + + +2010-09-04T08:55:28.000000Z +93f97588a35da1f45fdcb975d4380913 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1326 + diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/buttons.png.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/buttons.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/buttons.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/items.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/items.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/items.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_arrow.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_arrow.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_arrow.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_check.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_check.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/menu_check.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/progress.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/progress.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/progress.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/tabs.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/tabs.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/prop-base/tabs.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/buttons.png.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/buttons.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7dd58418ba7cfe58ae7efdf174e0b223fe3aa6a0 GIT binary patch literal 3274 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 SLTQbO*E^TJI;F+RU=09Vu@yA{ literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/menu_check.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/.svn/text-base/menu_check.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..adfdddccd7cac62a17d68873fa53c248bff8351a GIT binary patch literal 70 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 SLTQbO*E^TJI;F+RU=09Vu@yA{ literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/menu_check.gif b/app/plugins/tinymce/webroot/js/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..adfdddccd7cac62a17d68873fa53c248bff8351a GIT binary patch literal 70 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 R!Sp}^Mt9BhYjvGt{|88cricIl literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/text-base/button_bg_black.png.svn-base b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/.svn/text-base/button_bg_black.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..8996c7493e8a58c9c40845cbe8abdc3e6730716d GIT binary patch literal 3736 zcmV;J4rlR+P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000BCNkl)#*re`t|z!@uXQTe7P#;w#Wn=3>BNw{8@$8{@lQTY-PZN7P@?K?Gj zwyh>rjW7nIn1{^QG`8%on(qc8CV(xigUr`7w(PH(?}{LZ1z=n2AoDeiE&HqHGlS6# z<{k|0!N^@1vHK(QHH|I%tL8I<@eCF*F<4lQb18Ga?Qf;>3u`&*#FuMQ)tDj@gnL?+ zxAm_gB0;6{hE)7Um$l7e>&Ne1W6JjfLOsnUkHcDX{8g_)L`17zrR&;ZV(Y}$snNA{ zh3$QHu0!IiJXwRq?iF9_s_e%Eu&s5F`I^R-{Z;c5&)|OMsK;PGCI(wt2br&FY}sEm zpBW5iF!x~Y!Q6ut_Urebmhr)lp99~6uV1}lr)GVVYyceilo$(Yz}V4n zP`(d_C!HvOqs3NgayGsi@d6C|wnfB2sVXyr<6toNU~muS7GbAF2yPMB7SWl(e&QJH zTzt^Zpl3HDGWZw==T!UMK)8pl`DTW@K7`0`L2pUzihK1EnL zMfjcHMI@KOgLH~u2BR754+FqR2IF2=GJ|d4;MbYKePZzLx8wl)_h4WFR;tSRy$mGR z93ZCWc_TZAw{Yw49Y)Ger7An9-zuB_R#?|izg0$=tF6+SS{PMV2RLmN{Qf|6v_=os zQEE*rtg5SHItn;a)eZ$PAJZ6MTW8fi0h}OKh#E7P8O%MHTLiZVZV|)E;3HKzgzDQ5 zOHtxXNA+a}TiN79wLs43?6K-Quq{H=6GY(F9&DoeGJ}Wq6pKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000UJNklsV|cYlY&q4zsSqY(=s&=iZ>cW|Jxv$MmG9zDvBot+(KW~|_7TD<6H{cAkN3K|aG zcrux+oO=g@0Ya4~{cSpH8q)S^C!RJ4&uZ})*9T~k*=eimkK)R(5Tt1);2fRB?TM})FJ3}Q5GXUb8Lk){FF_3Wx z=iJIUQx^{h5)s+dB4+IF?&d(;*xttO?zotV+(ty0F%iZKw08@d%-%zcDVt0A1Sf#Z z!$i550O_}rB?3rfgC(+rO4veFh#~^8Hy-20_BQs$V=WfUeQHPBy1+Q2J>DBT_nOd; zg%BBtmQXJ}Okfa+99U7I2a5MoP!1ME*2}cE*xTO+2~p?`YNwur5G5ud?C!LPP@KOm{BB z#+D0KgT?0I#e@*i(sz&zP75$15rJ3S|2QI{O)t_@pSjQy1b~?`xvW2-u@wmfCWc_c z)13c;fEO-bc3xDzZd;8l6W9w42 zW<`}u<0ZaeC@-Kijls+P(6(Jz6qgLJDBi=ii9)_II9f8%T4>=@up99}kB^U{(Z*SusdxZ;9thpIi5|i%i*z7$Q42&#_|A+Sh|kzjQ25$CH1E&}eROqug=T&4vm5K@rO%+N(%@`EF2u{BU z2Qnvsn%2zW93s5e7jCOIXrWnutK12sf9DVsIqQl!K zhoN|xb6z?(C(OXNeio?91RU=H0IvOZk=t(m;#^_H#4j{gps5xS*M76PNc)#Z#YNxG ziV!N#^i_O(Q*TlwRk0u{wdK&9Q_#P8{fY~KbKOP@%m6t7Q#fr z6(&y=#~QAtQ!vp0V0x&ttt5csqa28v*RKG_N5#EX2FeV0Jl4nlM=tICkBWPb$GWXo z+@j2iWlp6fpqDxQv_v1P%!ka5<0Jz&aqHWHjHo#FZ)M=#a_bw+j+mn}px!qeOTe}Q zY!hrb(x+I|44{$-^&C&VxQs>Iq8|c?*8SU-N@Z4=h=ATktzooG$I%jf zM^9NqP`kBL{y`K^Q5aM2ED-e}OpJ=ndH@$KuK0e+hz~1_tWL#>s0WxKT0l$@h4C8d{u@yJ}>WAE3Fd(@KviX7h9|z;NfuiI1EEH+t=KPgTM3Aw^tS8%B9EP z^FIQ3GY}A4!0e!2MEv!BH|*f^eOPO4vn>O8GOk!rNj0Vl^C`K{oB$@Vy3__9;QQZu zsT%p6nI|0@Px#?8vwI>zRXr6&qMS=T9077Cn~IJ)5MpqpvI zv*Y?!y^a9vbgF8avwNRNI6?R_xcWD=lsNK`)oC{XE_1H47NP>Y@&~8_J8U8J9{vFU zaP8Kjt$p*SAL^5fKL#$m)&YR~8wE(E1t_M@-d$N4PclpTv(-N;ISMKwaxkx7!L@h) z?Ofv@=u{EZUkCL!fwc{Yb$ys~>ThPh>-m8-eczl@e;u@L&NuaSNK0aRs52VW1Ma=! zW`6IzQ`|$`4H1F0bD)atgv*kf_TDsm_bxeM`GEfvi4`EMXxeA*;pX*U0iV6+){Bk+ z%x6ReTe}PSOr2szl;!Ry`!)GE+Z)6|z#gj^AWExl?*DF~j;SAfiH08s_s-@COXCse zt1K&4O)3x&A>UQ0%;Mqbl!n9UBEXfN+*(&e#D=3fmi?ZrZcfuxmO$jOUxm5?aMX7! zfjl>t#TnF+1%XC-2r6=Uu4xg9gQtKvc9uisyY6kqWefa}R)j}lGU^Bi!vc^> z9-S($V$V6bv=SaqzQ4o2%)s%DcQ3_4T)pHJ_8n&Rr~9ROG-5#LxX)wLf6NO|fq`uOj7mdgJI0H2v4wf~~Kng9R* M07*qoM6N<$f@g#ZbN~PV literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg.png b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..12cfb419bbf2fb87f845731aa0fceb653d0dbf88 GIT binary patch literal 5859 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 R!Sp}^Mt9BhYjvGt{|88cricIl literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg_black.png b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000000000000000000000000000000000000..8996c7493e8a58c9c40845cbe8abdc3e6730716d GIT binary patch literal 3736 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 M07*qoM6N<$f@g#ZbN~PV literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui.css b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..52f5760 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui.css @@ -0,0 +1,215 @@ +/* Reset */ +.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} +.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.o2k7Skin table td {vertical-align:middle} + +/* Containers */ +.o2k7Skin table {background:#E5EFFD} +.o2k7Skin iframe {display:block; background:#FFF} +.o2k7Skin .mceToolbar {height:26px} + +/* External */ +.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none} +.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD} +.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0} +.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px} +.o2k7Skin .mceStatusbar div {float:left; padding:2px} +.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.o2k7Skin .mceStatusbar a:hover {text-decoration:underline} +.o2k7Skin table.mceToolbar {margin-left:3px} +.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;} +.o2k7Skin .mceToolbar td.mceFirst span {margin:0} +.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none} +.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px} +.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.o2k7Skin td.mceCenter {text-align:center;} +.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;} +.o2k7Skin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px} +.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px} +.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px} +.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceButtonLabeled {width:auto} +.o2k7Skin .mceButtonLabeled span.mceIcon {float:left} +.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* ListBox */ +.o2k7Skin .mceListBox {margin-left:3px} +.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block} +.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0} +.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF} +.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px} +.o2k7Skin .mceListBoxDisabled .mceText {color:gray} +.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px} +.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;} + +/* SplitButton */ +.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px} +.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)} +.o2k7Skin .mceSplitButton a.mceAction {width:22px} +.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)} +.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0} +.o2k7Skin .mceSplitButton span.mceOpen {display:none} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px} +.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceSplitButtonActive {background-position:0 -44px} + +/* ColorSplitButton */ +.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.o2k7Skin .mceColorSplitMenu td {padding:2px} +.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} +.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden} +.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden} + +/* Menu */ +.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD} +.o2k7Skin .mceNoIcons span.mceIcon {width:0;} +.o2k7Skin .mceNoIcons a .mceText {padding-left:10px} +.o2k7Skin .mceMenu table {background:#FFF} +.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block} +.o2k7Skin .mceMenu td {height:20px} +.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0} +.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px} +.o2k7Skin .mceMenu pre.mceText {font-family:Monospace} +.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px} +.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.o2k7Skin .mceMenuItemDisabled .mceText {color:#888} +.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)} +.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center} +.o2k7Skin .mceMenu span.mceMenuLine {display:none} +.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;} + +/* Progress,Resize */ +.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Formats */ +.o2k7Skin .mce_formatPreview a {font-size:10px} +.o2k7Skin .mce_p span.mceText {} +.o2k7Skin .mce_address span.mceText {font-style:italic} +.o2k7Skin .mce_pre span.mceText {font-family:monospace} +.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.o2k7Skin span.mce_bold {background-position:0 0} +.o2k7Skin span.mce_italic {background-position:-60px 0} +.o2k7Skin span.mce_underline {background-position:-140px 0} +.o2k7Skin span.mce_strikethrough {background-position:-120px 0} +.o2k7Skin span.mce_undo {background-position:-160px 0} +.o2k7Skin span.mce_redo {background-position:-100px 0} +.o2k7Skin span.mce_cleanup {background-position:-40px 0} +.o2k7Skin span.mce_bullist {background-position:-20px 0} +.o2k7Skin span.mce_numlist {background-position:-80px 0} +.o2k7Skin span.mce_justifyleft {background-position:-460px 0} +.o2k7Skin span.mce_justifyright {background-position:-480px 0} +.o2k7Skin span.mce_justifycenter {background-position:-420px 0} +.o2k7Skin span.mce_justifyfull {background-position:-440px 0} +.o2k7Skin span.mce_anchor {background-position:-200px 0} +.o2k7Skin span.mce_indent {background-position:-400px 0} +.o2k7Skin span.mce_outdent {background-position:-540px 0} +.o2k7Skin span.mce_link {background-position:-500px 0} +.o2k7Skin span.mce_unlink {background-position:-640px 0} +.o2k7Skin span.mce_sub {background-position:-600px 0} +.o2k7Skin span.mce_sup {background-position:-620px 0} +.o2k7Skin span.mce_removeformat {background-position:-580px 0} +.o2k7Skin span.mce_newdocument {background-position:-520px 0} +.o2k7Skin span.mce_image {background-position:-380px 0} +.o2k7Skin span.mce_help {background-position:-340px 0} +.o2k7Skin span.mce_code {background-position:-260px 0} +.o2k7Skin span.mce_hr {background-position:-360px 0} +.o2k7Skin span.mce_visualaid {background-position:-660px 0} +.o2k7Skin span.mce_charmap {background-position:-240px 0} +.o2k7Skin span.mce_paste {background-position:-560px 0} +.o2k7Skin span.mce_copy {background-position:-700px 0} +.o2k7Skin span.mce_cut {background-position:-680px 0} +.o2k7Skin span.mce_blockquote {background-position:-220px 0} +.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0} +.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0} +.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0} +.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.o2k7Skin span.mce_advhr {background-position:-0px -20px} +.o2k7Skin span.mce_ltr {background-position:-20px -20px} +.o2k7Skin span.mce_rtl {background-position:-40px -20px} +.o2k7Skin span.mce_emotions {background-position:-60px -20px} +.o2k7Skin span.mce_fullpage {background-position:-80px -20px} +.o2k7Skin span.mce_fullscreen {background-position:-100px -20px} +.o2k7Skin span.mce_iespell {background-position:-120px -20px} +.o2k7Skin span.mce_insertdate {background-position:-140px -20px} +.o2k7Skin span.mce_inserttime {background-position:-160px -20px} +.o2k7Skin span.mce_absolute {background-position:-180px -20px} +.o2k7Skin span.mce_backward {background-position:-200px -20px} +.o2k7Skin span.mce_forward {background-position:-220px -20px} +.o2k7Skin span.mce_insert_layer {background-position:-240px -20px} +.o2k7Skin span.mce_insertlayer {background-position:-260px -20px} +.o2k7Skin span.mce_movebackward {background-position:-280px -20px} +.o2k7Skin span.mce_moveforward {background-position:-300px -20px} +.o2k7Skin span.mce_media {background-position:-320px -20px} +.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px} +.o2k7Skin span.mce_pastetext {background-position:-360px -20px} +.o2k7Skin span.mce_pasteword {background-position:-380px -20px} +.o2k7Skin span.mce_selectall {background-position:-400px -20px} +.o2k7Skin span.mce_preview {background-position:-420px -20px} +.o2k7Skin span.mce_print {background-position:-440px -20px} +.o2k7Skin span.mce_cancel {background-position:-460px -20px} +.o2k7Skin span.mce_save {background-position:-480px -20px} +.o2k7Skin span.mce_replace {background-position:-500px -20px} +.o2k7Skin span.mce_search {background-position:-520px -20px} +.o2k7Skin span.mce_styleprops {background-position:-560px -20px} +.o2k7Skin span.mce_table {background-position:-580px -20px} +.o2k7Skin span.mce_cell_props {background-position:-600px -20px} +.o2k7Skin span.mce_delete_table {background-position:-620px -20px} +.o2k7Skin span.mce_delete_col {background-position:-640px -20px} +.o2k7Skin span.mce_delete_row {background-position:-660px -20px} +.o2k7Skin span.mce_col_after {background-position:-680px -20px} +.o2k7Skin span.mce_col_before {background-position:-700px -20px} +.o2k7Skin span.mce_row_after {background-position:-720px -20px} +.o2k7Skin span.mce_row_before {background-position:-740px -20px} +.o2k7Skin span.mce_merge_cells {background-position:-760px -20px} +.o2k7Skin span.mce_table_props {background-position:-980px -20px} +.o2k7Skin span.mce_row_props {background-position:-780px -20px} +.o2k7Skin span.mce_split_cells {background-position:-800px -20px} +.o2k7Skin span.mce_template {background-position:-820px -20px} +.o2k7Skin span.mce_visualchars {background-position:-840px -20px} +.o2k7Skin span.mce_abbr {background-position:-860px -20px} +.o2k7Skin span.mce_acronym {background-position:-880px -20px} +.o2k7Skin span.mce_attribs {background-position:-900px -20px} +.o2k7Skin span.mce_cite {background-position:-920px -20px} +.o2k7Skin span.mce_del {background-position:-940px -20px} +.o2k7Skin span.mce_ins {background-position:-960px -20px} +.o2k7Skin span.mce_pagebreak {background-position:0 -40px} +.o2k7Skin span.mce_restoredraft {background-position:-20px -40px} +.o2k7Skin span.mce_spellchecker {background-position:-540px -20px} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_black.css b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..81dbfe4 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_black.css @@ -0,0 +1,8 @@ +/* Black */ +.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF} +.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0} +.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0} +.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;} +.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1} \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_silver.css b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..e8ae844 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/skins/o2k7/ui_silver.css @@ -0,0 +1,5 @@ +/* Silver */ +.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)} +.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee} +.o2k7SkinSilver .mceListBox .mceText {background:#FFF} +.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb} diff --git a/app/plugins/tinymce/webroot/js/themes/advanced/source_editor.htm b/app/plugins/tinymce/webroot/js/themes/advanced/source_editor.htm new file mode 100644 index 0000000..78033fd --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
+
{#advanced_dlg.code_title}
+ +
+ +
+ +
+ + + +
+ + +
+
+ + diff --git a/app/plugins/tinymce/webroot/js/themes/simple/.svn/entries b/app/plugins/tinymce/webroot/js/themes/simple/.svn/entries new file mode 100644 index 0000000..49a1ebf --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/.svn/entries @@ -0,0 +1,105 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/simple +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +editor_template_src.js +file + + + + +2010-09-04T08:55:28.000000Z +20a76a48f4b845d16315829fc3249d80 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3120 + +langs +dir + +skins +dir + +editor_template.js +file + + + + +2010-09-04T08:55:28.000000Z +7631da315121f802e49dd27222b58ade +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2222 + +img +dir + diff --git a/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template.js.svn-base b/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template.js.svn-base new file mode 100644 index 0000000..ed89abc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template.js.svn-base @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template_src.js.svn-base b/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template_src.js.svn-base new file mode 100644 index 0000000..ec9e963 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/.svn/text-base/editor_template_src.js.svn-base @@ -0,0 +1,85 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('simple'); + + tinymce.create('tinymce.themes.SimpleTheme', { + init : function(ed, url) { + var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings; + + t.editor = ed; + + ed.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + + ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css"); + }); + + DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css"); + }, + + renderUI : function(o) { + var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc; + + n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n); + n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'}); + n = tb = DOM.add(n, 'tbody'); + + // Create iframe container + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'}); + + // Create toolbar container + n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'}); + + // Create toolbar + tb = t.toolbar = cf.createToolbar("tools1"); + tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'})); + tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'})); + tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'})); + tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'})); + tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'})); + tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'})); + tb.renderTo(n); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_container', + sizeContainer : sc, + deltaHeight : -20 + }; + }, + + getInfo : function() { + return { + longname : 'Simple theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + } + }); + + tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/simple/editor_template.js b/app/plugins/tinymce/webroot/js/themes/simple/editor_template.js new file mode 100644 index 0000000..ed89abc --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/editor_template.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/simple/editor_template_src.js b/app/plugins/tinymce/webroot/js/themes/simple/editor_template_src.js new file mode 100644 index 0000000..ec9e963 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/editor_template_src.js @@ -0,0 +1,85 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('simple'); + + tinymce.create('tinymce.themes.SimpleTheme', { + init : function(ed, url) { + var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings; + + t.editor = ed; + + ed.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + + ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css"); + }); + + DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css"); + }, + + renderUI : function(o) { + var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc; + + n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n); + n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'}); + n = tb = DOM.add(n, 'tbody'); + + // Create iframe container + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'}); + + // Create toolbar container + n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'}); + + // Create toolbar + tb = t.toolbar = cf.createToolbar("tools1"); + tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'})); + tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'})); + tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'})); + tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'})); + tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'})); + tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'})); + tb.renderTo(n); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_container', + sizeContainer : sc, + deltaHeight : -20 + }; + }, + + getInfo : function() { + return { + longname : 'Simple theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + } + }); + + tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme); +})(); \ No newline at end of file diff --git a/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/entries b/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/entries new file mode 100644 index 0000000..95c7b28 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/plugins/tinymce/webroot/js/themes/simple/img +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +icons.gif +file + + + + +2010-09-04T08:55:28.000000Z +749151955998f915596270f8c452af6e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1440 + diff --git a/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/prop-base/icons.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/prop-base/icons.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/prop-base/icons.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/text-base/icons.gif.svn-base b/app/plugins/tinymce/webroot/js/themes/simple/img/.svn/text-base/icons.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..16af141ff0eea376a889b1e8d28e9c1cacaaab16 GIT binary patch literal 1440 zcmV;R1z-9{Nk%w1VaNa!0QUd@Ib*`7v&H}b0P*i`B{WZ*I4YI8{iDPCZ*XyWj;?N! z&ooP8CcKTM%}ImAk&d@bUef&=iA% zhPA3sm56OYcjMRI^s}jof~E0n!SIozxs`y)bZpaM%~elOt(xIz_1F@`xREtxwxO@X zElsNLx;f_MIwnTOux@bk@5r<-;@s){f~fMSskU>S&vlpdmZGk)n^Ks084*pfMo5}`Y)@uBrt7q^ z_xb)XxI@^-XhLVQWPPfUtMQSg&Xb6UQhU2=S3pa1!Lhs1Kwz1)!P59aI6r5pthLM4 zE-ud4`aC>8zybolqcQ$sRq*)W>+kl^)!br%x2LJkVv+Dui1Oh7|6z>ag023Luhg%= z;=sbh)RP30t>V}2$H?fg=;-%zOTU8v0MO8l85I$+z}bYP#G9DS_#hs}n3hj*tissz zAwYQh{QX~VkH5&*9YTcu{{H^`{_yYcW|;u|{Qilm^upTyi?sd!nVG)6{{LrW`s5%! zQETJeu@Y0sB3Qy+jGVB@-BWO)C1U{h_4v@?@UEu*S8lPiucH6>|4vxO2|0#LaF@v0 z@ZaCy@c8hkxVXaB{z|fT@U~;Hv$d$T$J*xpqPpE8TH+G^0=vlI+KzIEuZN}B@UYO} z&dtoGp5{=vw)ErQRcDJbQgSxGf8JYL_`X^{uFH_9uqY`f`}_Of)zF}&w4mVd!0r05 zoM3>k!2kdMA^8LW00930EC2ui0LTCo000R80RIUbNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVW@EluM+^lPFV4B&kwhfCK?JZW}S8Lq-x8D(>2KU{_0tBn}8A zagb%p1Q&P-6u`78(}*2LRH3FT;{^Z%ooYoWl!#X%K7Tem@Rf*AgGMWAZK^N;uLKrJ zgqs_6Dufyfw<06~AZA3KR{>nO09GJYj!yq2Mo2^;St0-;UpPxp*8_}f6+Z>JE!?&a z+dPb*b~hYDra%-%J`C}|)xna%9$;-yz|zc`Z6DmMS)p07fiENwe4t=jwVQEwY|=zo zxL=@s=&E6Qp)TGXT_1)l*emUVx)m?~6;Hl)c5^2e&KlH&3v877L9rfP;Fp}T4iu?af8AOXd@5C0(U&fK3z8Av u{UxbKCcKTM%}ImAk&d@bUef&=iA% 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/button_bg.png b/app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..527e3495a653e57d76bf7e55316793d17dda497a GIT binary patch literal 5102 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/ui.css b/app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..021d650 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/themes/simple/skins/o2k7/ui.css @@ -0,0 +1,35 @@ +/* Reset */ +.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} + +/* Containers */ +.o2k7SimpleSkin {position:relative} +.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;} +.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;} +.o2k7SimpleSkin .mceToolbar {height:26px;} + +/* Layout */ +.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; } +.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px} +.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} + +/* Button */ +.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px} +.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px} +.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +/* Separator */ +.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* Theme */ +.o2k7SimpleSkin span.mce_bold {background-position:0 0} +.o2k7SimpleSkin span.mce_italic {background-position:-60px 0} +.o2k7SimpleSkin span.mce_underline {background-position:-140px 0} +.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0} +.o2k7SimpleSkin span.mce_undo {background-position:-160px 0} +.o2k7SimpleSkin span.mce_redo {background-position:-100px 0} +.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0} +.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} +.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/app/plugins/tinymce/webroot/js/tiny_mce.js b/app/plugins/tinymce/webroot/js/tiny_mce.js new file mode 100644 index 0000000..14d3570 --- /dev/null +++ b/app/plugins/tinymce/webroot/js/tiny_mce.js @@ -0,0 +1 @@ +(function(c){var a=/^\s*|\s*$/g,d;var b={majorVersion:"3",minorVersion:"3.8",releaseDate:"2010-06-30",_init:function(){var r=this,o=document,m=navigator,f=m.userAgent,l,e,k,j,h,q;r.isOpera=c.opera&&opera.buildNumber;r.isWebKit=/WebKit/.test(f);r.isIE=!r.isWebKit&&!r.isOpera&&(/MSIE/gi).test(f)&&(/Explorer/gi).test(m.appName);r.isIE6=r.isIE&&/MSIE [56]/.test(f);r.isGecko=!r.isWebKit&&/Gecko/.test(f);r.isMac=f.indexOf("Mac")!=-1;r.isAir=/adobeair/i.test(f);r.isIDevice=/(iPad|iPhone)/.test(f);if(c.tinyMCEPreInit){r.suffix=tinyMCEPreInit.suffix;r.baseURL=tinyMCEPreInit.base;r.query=tinyMCEPreInit.query;return}r.suffix="";e=o.getElementsByTagName("base");for(l=0;l=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&",'"':""","<":"<",">":">"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat";p.stdMode=u.documentMode===8;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},select:function(q,p){var o=this;return m.dom.Sizzle(q,o.get(p)||o.get(o.settings.root_element)||o.doc,[])},is:function(q,o){var p;if(q.length===undefined){if(o==="*"){return q.nodeType==1}if(b.test(o)){o=o.toLowerCase().split(/,/);q=q.nodeName.toLowerCase();for(p=o.length-1;p>=0;p--){if(o[p]==q){return true}}return false}}return m.dom.Sizzle.matches(o,q.nodeType?[q]:q).length>0},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(m.is(s)){return u+">"+s+""}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=(""+o).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="
"+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="
"+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/

<\/p>|]+)><\/p>|/gi,' 

')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/

]+)>|

/ig,'

');p=p.replace(/<\/p>/gi,"
");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r]+)\/>|/gi,"");if(q.keep_values){if(/)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return""})}r=r.replace(//g,"");function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=z.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){return}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null};if(g.dom.boxModel){(function(){var q=d.doc,l=q.body,n,o;q.documentElement.unselectable=c;function p(r,u){var s=l.createTextRange();try{s.moveToPoint(r,u)}catch(t){s=null}return s}function m(s){var r;if(s.button){r=p(s.x,s.y);if(r){if(r.compareEndPoints("StartToStart",o)>0){r.setEndPoint("StartToStart",o)}else{r.setEndPoint("EndToEnd",o)}r.select()}}else{k()}}function k(){d.unbind(q,"mouseup",k);d.unbind(q,"mousemove",m);n=0}d.bind(q,"mousedown",function(r){if(r.target.nodeName==="HTML"){if(n){k()}n=1;o=p(r.x,r.y);if(o){d.bind(q,"mouseup",k);d.bind(q,"mousemove",m);o.select()}}})})()}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return re[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="

";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j_';if(j.startContainer==k&&j.endContainer==k){k.body.innerHTML=i}else{j.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=i}else{j.insertNode(j.createContextualFragment(i))}}l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndBefore(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML(''+l+"");if(!n){j.collapse(false);j.pasteHTML(''+l+"")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='
'}return t}k("start");k("end");f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=g.win.document.createRange?g.win.document.createRange():g.win.document.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>||<\/html>||]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,">")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"<";case">":return">";case"&":return"&";case'"':return"""}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(
\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^
\s*<\//.test(n)){return""}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(]*>)(.*?)(<\/script>)/g},{pattern:/(]*>)(.*?)(<\/noscript>)/g},{pattern:/(]*>)(.*?)(<\/style>)/g},{pattern:/(]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/()/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/

\s+<\/p>|]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?" 

":" 

");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(//g,"");if(k.entity_encoding=="raw"){j=j.replace(/

 <\/p>|]+)> <\/p>/g,"\u00a0

")}j=j.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return""+i.dom.decode(o.replace(//g,""))+""})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+""+p}))});return j},_unprotect:function(i,j){i=i.replace(/\"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,""))}}if(b.stdMode){e+=''+j.renderHTML()+""}else{e+=""+j.renderHTML()+""}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,""))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,""));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},""+e+"")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+=''}E.iframeHTML+='';if(m.relaxedDomain){E.iframeHTML+=' + + '; + } + + /* Mailhide related code */ + protected function _recaptcha_aes_encrypt($val,$ky) { + if (! function_exists ("mcrypt_encrypt")) { + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode=MCRYPT_MODE_CBC; + $enc=MCRYPT_RIJNDAEL_128; + $val=$this->_recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + } + + protected function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode ($x), '+/', '-_'); + } + + /* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ + public function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at http://mailhide.recaptcha.net/apikey"); + } + + + $ky = pack('H*', $privkey); + $cryptmail = $this->_recaptcha_aes_encrypt ($email, $ky); + + return "http://mailhide.recaptcha.net/d?k=" . $pubkey . "&c=" . $this->_recaptcha_mailhide_urlbase64 ($cryptmail); + } + + /** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ + protected function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email ); + + if (strlen ($arr[0]) <= 4) { + $arr[0] = substr ($arr[0], 0, 1); + } else if (strlen ($arr[0]) <= 6) { + $arr[0] = substr ($arr[0], 0, 3); + } else { + $arr[0] = substr ($arr[0], 0, 4); + } + return $arr; + } + + /** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://mailhide.recaptcha.net/apikey + */ + public function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = $this->_recaptcha_mailhide_email_parts ($email); + $url = $this->recaptcha_mailhide_url ($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); + + } + + +} +?> \ No newline at end of file diff --git a/app/views/helpers/custom.php b/app/views/helpers/custom.php new file mode 100644 index 0000000..71720e1 --- /dev/null +++ b/app/views/helpers/custom.php @@ -0,0 +1,29 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class CustomHelper extends Helper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array(); + +} +?> \ No newline at end of file diff --git a/app/views/helpers/empty b/app/views/helpers/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/views/helpers/filemanager.php b/app/views/helpers/filemanager.php new file mode 100644 index 0000000..0b55283 --- /dev/null +++ b/app/views/helpers/filemanager.php @@ -0,0 +1,207 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class FilemanagerHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array('Html'); +/** + * Get extension from a file name. + * + * @param string $filename file name + * @return string + */ + public function filename2ext($filename) { + $filename = strtolower($filename) ; + //$exts = split("[/\\.]", $filename) ; + //$n = count($exts)-1; + $filename_e = explode(".", $filename); + if ($filename_e == 1) { + return "file"; + } else { + $n = count($filename_e) - 1; + return $filename_e[$n]; + } + } +/** + * Get icon from file extension + * + * @param string $ext + * @return string + */ + public function ext2icon($ext) { + $ext = strtolower($ext); + + $ext2icon = array( + 'css' => 'css.png', + 'htm' => 'html.png', + 'html' => 'html.png', + 'php' => 'page_white_php.png', + + 'rar' => 'page_white_compressed.png', + 'tar' => 'page_white_compressed.png', + 'zip' => 'page_white_compressed.png', + + 'bmp' => 'picture.png', + 'gif' => 'picture.png', + 'jpg' => 'picture.png', + 'jpeg' => 'picture.png', + 'png' => 'picture.png', + ); + + if (isset($ext2icon[$ext])) { + $output = $ext2icon[$ext]; + } else { + $output = 'page_white.png'; + } + + return $output; + } +/** + * Get icon from file name + * + * @param string $filename file name + */ + public function filename2icon($filename) { + $ext = $this->filename2ext($filename); + $icon = $this->ext2icon($ext); + return $icon; + } +/** + * Breadcrumb + * + * @param string $path absolute path + * @return string + */ + public function breadcrumb($path) { + $path_e = explode(DS, $path); + + $output = array(); + if (DS == '/') { + $current_path = DS; + } else { + $current_path = ''; + } + foreach ($path_e AS $p) { + if ($p != null) { + $current_path .= $p.DS; + $output[$p] = $current_path; + } + } + + return $output; + } +/** + * Generate anchor tag for a file/directory + * + * @param string $title link title + * @param array $url link url + * @param string $path file/directory path + * @param string $pathKey default is 'path' + * @return string + */ + public function link($title, $url, $path, $pathKey = 'path') { + $onclick = ''; + if (isset($url['action']) && ($url['action'] == 'delete_directory' || $url['action'] == 'delete_file')) { + $onclick = 'return confirm('Are you sure?');'; + } + $output = "" . $title . ""; + return $output; + } +/** + * Generate anchor tag for directory + * + * @param string $title link title + * @param string $path directory path + * @return string + */ + public function linkDirectory($title, $path) { + $output = $this->link($title, array('controller' => 'filemanager', 'action' => 'browse'), $path); + return $output; + } +/** + * Generate anchor tag for file + * + * @param string $title + * @param string $path + * @return string + */ + public function linkFile($title, $path) { + $output = " 'filemanager', 'action' => 'editfile')) . "?path=" . urlencode($path) . "'>{$title}"; + return $output; + } +/** + * Generate anchor tag for upload link + * + * @param string $title link title + * @param string $path absolute path + * @return string + */ + public function linkUpload($title, $path) { + $output = $this->link($title, array('controller' => 'filemanager', 'action' => 'upload'), $path); + return $output; + } +/** + * Generate anchor tag for 'create a new directory' link + * + * @param string $title link title + * @param string $path absolute path + * @return string + */ + public function linkCreateDirectory($title, $path) { + $output = $this->link($title, array('controller' => 'filemanager', 'action' => 'new'), $path); + return $output; + } +/** + * Get icon from mime type + * + * @param string $mimeType mine type + * @return string + */ + public function mimeTypeToImage($mimeType) { + $mime = explode('/', $mimeType); + $mime = $mime['0']; + + $mimeToImages = array(); + $mimeToImages['text'] = 'page_white.png'; + + if (isset($mimeToImages[$mime])) { + $output = $mimeToImages[$mime]; + } else { + $output = 'page_white.png'; + } + + return $output; + } +/** + * Checks if searched location is under any of the paths + * + * @param array $paths + * @param string $search + * @return boolean + */ + public function inPath($paths, $search) { + foreach ($paths AS $path) { + if (strpos($search, $path) !== false) { + return true; + } + } + return false; + } +} + +?> \ No newline at end of file diff --git a/app/views/helpers/image.php b/app/views/helpers/image.php new file mode 100644 index 0000000..0f5bf45 --- /dev/null +++ b/app/views/helpers/image.php @@ -0,0 +1,78 @@ + (changes) + */ +class ImageHelper extends Helper { + public $helpers = array('Html'); + public $cacheDir = 'resized'; // relative to 'img'.DS + + /** + * Automatically resizes an image and returns formatted IMG tag + * + * @param string $path Path to the image file, relative to the webroot/img/ directory. + * @param integer $width Image of returned image + * @param integer $height Height of returned image + * @param boolean $aspect Maintain aspect ratio (default: true) + * @param array $htmlAttributes Array of HTML attributes. + * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. + * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. + * @access public + */ + public function resize($path, $width, $height, $aspect = true, $htmlAttributes = array(), $return = false) { + $types = array(1 => "gif", "jpeg", "png", "swf", "psd", "wbmp"); // used to determine image type + if(empty($htmlAttributes['alt'])) $htmlAttributes['alt'] = 'thumb'; // Ponemos alt default + + $uploadsDir = 'uploads'; + + $fullpath = ROOT.DS.APP_DIR.DS.WEBROOT_DIR.DS.$uploadsDir.DS; + $url = ROOT.DS.APP_DIR.DS.WEBROOT_DIR.DS.$path; + + if (!($size = getimagesize($url))) + return; // image doesn't exist + + if ($aspect) { // adjust to aspect. + if (($size[1]/$height) > ($size[0]/$width)) // $size[0]:width, [1]:height, [2]:type + $width = ceil(($size[0]/$size[1]) * $height); + else + $height = ceil($width / ($size[0]/$size[1])); + } + + $relfile = $this->webroot.$uploadsDir.'/'.$this->cacheDir.'/'.$width.'x'.$height.'_'.basename($path); // relative file + $cachefile = $fullpath.$this->cacheDir.DS.$width.'x'.$height.'_'.basename($path); // location on server + + if (file_exists($cachefile)) { + $csize = getimagesize($cachefile); + $cached = ($csize[0] == $width && $csize[1] == $height); // image is cached + if (@filemtime($cachefile) < @filemtime($url)) // check if up to date + $cached = false; + } else { + $cached = false; + } + + if (!$cached) { + $resize = ($size[0] > $width || $size[1] > $height) || ($size[0] < $width || $size[1] < $height); + } else { + $resize = false; + } + + if ($resize) { + $image = call_user_func('imagecreatefrom'.$types[$size[2]], $url); + if (function_exists("imagecreatetruecolor") && ($temp = imagecreatetruecolor ($width, $height))) { + imagecopyresampled ($temp, $image, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); + } else { + $temp = imagecreate ($width, $height); + imagecopyresized ($temp, $image, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); + } + call_user_func("image".$types[$size[2]], $temp, $cachefile); + imagedestroy ($image); + imagedestroy ($temp); + } else { + //copy($url, $cachefile); + } + + return $this->output(sprintf($this->Html->tags['image'], $relfile, $this->Html->_parseAttributes($htmlAttributes, null, '', ' ')), $return); + } +} +?> \ No newline at end of file diff --git a/app/views/helpers/layout.php b/app/views/helpers/layout.php new file mode 100644 index 0000000..77ef3bd --- /dev/null +++ b/app/views/helpers/layout.php @@ -0,0 +1,834 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class LayoutHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + public $helpers = array( + 'Html', + 'Form', + 'Session', + 'Js', + ); +/** + * Current Node + * + * @var array + * @access public + */ + public $node = null; +/** + * Core helpers + * + * Extra supported callbacks, like beforeNodeInfo() and afterNodeInfo(), + * won't be called for these helpers. + * + * @var array + * @access public + */ + public $coreHelpers = array( + // CakePHP + 'Ajax', + 'Cache', + 'Form', + 'Html', + 'Javascript', + 'JqueryEngine', + 'Js', + 'MootoolsEngine', + 'Number', + 'Paginator', + 'PrototypeEngine', + 'Rss', + 'Session', + 'Text', + 'Time', + 'Xml', + + // Croogo + 'Filemanager', + 'Image', + 'Layout', + 'Recaptcha', + ); +/** + * Constructor + * + * @param array $options options + * @access public + */ + public function __construct($options = array()) { + $this->View =& ClassRegistry::getObject('view'); + return parent::__construct($options); + } +/** + * Javascript variables + * + * Shows croogo.js file along with useful information like the applications's basePath, etc. + * + * Also merges Configure::read('Js') with the Croogo js variable. + * So you can set javascript info anywhere like Configure::write('Js.my_var', 'my value'), + * and you can access it like 'Croogo.my_var' in your javascript. + * + * @return string + */ + public function js() { + $croogo = array(); + if (isset($this->params['locale'])) { + $croogo['basePath'] = Router::url('/'.$this->params['locale'].'/'); + } else { + $croogo['basePath'] = Router::url('/'); + } + $croogo['params'] = array( + 'controller' => $this->params['controller'], + 'action' => $this->params['action'], + 'named' => $this->params['named'], + ); + if (is_array(Configure::read('Js'))) { + $croogo = Set::merge($croogo, Configure::read('Js')); + } + return $this->Html->scriptBlock('var Croogo = ' . $this->Js->object($croogo) . ';'); + } +/** + * Status + * + * instead of 0/1, show tick/cross + * + * @param integer $value 0 or 1 + * @return string formatted img tag + */ + public function status($value) { + if ($value == 1) { + $output = $this->Html->image('/img/icons/tick.png'); + } else { + $output = $this->Html->image('/img/icons/cross.png'); + } + return $output; + } +/** + * Show flash message + * + * @return void + */ + public function sessionFlash() { + $messages = $this->Session->read('Message'); + if( is_array($messages) ) { + foreach(array_keys($messages) AS $key) { + echo $this->Session->flash($key); + } + } + } +/** + * Meta tags + * + * @return string + */ + public function meta($metaForLayout = array()) { + $_metaForLayout = array(); + if (is_array(Configure::read('Meta'))) { + $_metaForLayout = Configure::read('Meta'); + } + + if (count($metaForLayout) == 0 && + isset($this->View->viewVars['node']['CustomFields']) && + count($this->View->viewVars['node']['CustomFields']) > 0) { + $metaForLayout = array(); + foreach ($this->View->viewVars['node']['CustomFields'] AS $key => $value) { + if (strstr($key, 'meta_')) { + $key = str_replace('meta_', '', $key); + $metaForLayout[$key] = $value; + } + } + } + + $metaForLayout = array_merge($_metaForLayout, $metaForLayout); + + $output = ''; + foreach ($metaForLayout AS $name => $content) { + $output .= ''; + } + + return $output; + } +/** + * isLoggedIn + * + * if User is logged in + * + * @return boolean + */ + public function isLoggedIn() { + if ($this->Session->check('Auth.User.id')) { + return true; + } else { + return false; + } + } +/** + * Feed + * + * RSS feeds + * + * @param boolean $returnUrl if true, only the URL will be returned + * @return string + */ + public function feed($returnUrl = false) { + if (Configure::read('Site.feed_url')) { + $url = Configure::read('Site.feed_url'); + } else { + /*$url = Router::url(array( + 'controller' => 'nodes', + 'action' => 'index', + 'type' => 'blog', + 'ext' => 'rss', + ));*/ + $url = '/nodes/promoted.rss'; + } + + if ($returnUrl) { + $output = $url; + } else { + $url = Router::url($url); + $output = ''; + return $output; + } + + return $output; + } +/** + * Get Role ID + * + * @return integer + */ + public function getRoleId() { + if ($this->isLoggedIn()) { + $roleId = $this->Session->read('Auth.User.role_id'); + } else { + // Public + $roleId = 3; + } + return $roleId; + } +/** + * Region is empty + * + * returns true if Region has no Blocks. + * + * @param string $regionAlias Region alias + * @return boolean + */ + public function regionIsEmpty($regionAlias) { + if (isset($this->View->viewVars['blocks_for_layout'][$regionAlias]) && + count($this->View->viewVars['blocks_for_layout'][$regionAlias]) > 0) { + return false; + } else { + return true; + } + } +/** + * Show Blocks for a particular Region + * + * @param string $regionAlias Region alias + * @param array $options + * @return string + */ + public function blocks($regionAlias, $options = array()) { + $_options = array(); + $options = array_merge($_options, $options); + + $output = ''; + if (!$this->regionIsEmpty($regionAlias)) { + $blocks = $this->View->viewVars['blocks_for_layout'][$regionAlias]; + foreach ($blocks AS $block) { + $plugin = false; + if ($block['Block']['element'] != null) { + if (strstr($block['Block']['element'], '.')) { + $plugin_element = explode('.', $block['Block']['element']); + $plugin = $plugin_element[0]; + $element = $plugin_element[1]; + } else { + $element = $block['Block']['element']; + } + } else { + $element = 'block'; + } + if ($plugin) { + $output .= $this->View->element($element, array('block' => $block, 'plugin' => $plugin)); + } else { + $output .= $this->View->element($element, array('block' => $block)); + } + } + } + + return $output; + } +/** + * Show Menu by Alias + * + * @param string $menuAlias Menu alias + * @param array $options (optional) + * @return string + */ + public function menu($menuAlias, $options = array()) { + $_options = array( + 'tag' => 'ul', + 'tagAttributes' => array(), + 'selected' => 'selected', + 'dropdown' => false, + 'dropdownClass' => 'sf-menu', + 'element' => 'menu', + ); + $options = array_merge($_options, $options); + + if (!isset($this->View->viewVars['menus_for_layout'][$menuAlias])) { + return false; + } + $menu = $this->View->viewVars['menus_for_layout'][$menuAlias]; + $output = $this->View->element($options['element'], array( + 'menu' => $menu, + 'options' => $options, + )); + return $output; + } +/** + * Nested Links + * + * @param array $links model output (threaded) + * @param array $options (optional) + * @param integer $depth depth level + * @return string + */ + public function nestedLinks($links, $options = array(), $depth = 1) { + $_options = array(); + $options = array_merge($_options, $options); + + $output = ''; + foreach ($links AS $link) { + $linkAttr = array( + 'id' => 'link-' . $link['Link']['id'], + 'rel' => $link['Link']['rel'], + 'target' => $link['Link']['target'], + 'title' => $link['Link']['description'], + ); + + foreach ($linkAttr AS $attrKey => $attrValue) { + if ($attrValue == null) { + unset($linkAttr[$attrKey]); + } + } + + // if link is in the format: controller:contacts/action:view + if (strstr($link['Link']['link'], 'controller:')) { + $link['Link']['link'] = $this->linkStringToArray($link['Link']['link']); + } + + // Remove locale part before comparing links + if (!empty($this->params['locale'])) { + $currentUrl = substr($this->params['url']['url'], strlen($this->params['locale'])); + } else { + $currentUrl = $this->params['url']['url']; + } + + if (Router::url($link['Link']['link']) == Router::url('/' . $currentUrl)) { + $linkAttr['class'] = $options['selected']; + } + + $linkOutput = $this->Html->link($link['Link']['title'], $link['Link']['link'], $linkAttr); + if (isset($link['children']) && count($link['children']) > 0) { + $linkOutput .= $this->nestedLinks($link['children'], $options, $depth + 1); + } + $linkOutput = $this->Html->tag('li', $linkOutput); + $output .= $linkOutput; + } + if ($output != null) { + $tagAttr = $options['tagAttributes']; + if ($options['dropdown'] && $depth == 1) { + $tagAttr['class'] = $options['dropdownClass']; + } + $output = $this->Html->tag($options['tag'], $output, $tagAttr); + } + + return $output; + } +/** + * Converts strings like controller:abc/action:xyz/ to arrays + * + * @param string $link link + * @return array + */ + public function linkStringToArray($link) { + $link = explode('/', $link); + $linkArr = array(); + foreach ($link AS $linkElement) { + if ($linkElement != null) { + $linkElementE = explode(':', $linkElement); + if (isset($linkElementE['1'])) { + $linkArr[$linkElementE['0']] = $linkElementE['1']; + } else { + $linkArr[] = $linkElement; + } + } + } + if (!isset($linkArr['plugin'])) { + $linkArr['plugin'] = false; + } + + return $linkArr; + } +/** + * Show Vocabulary by Alias + * + * @param string $vocabularyAlias Vocabulary alias + * @param array $options (optional) + * @return string + */ + public function vocabulary($vocabularyAlias, $options = array()) { + $_options = array( + 'tag' => 'ul', + 'tagAttributes' => array(), + 'type' => null, + 'link' => true, + 'plugin' => false, + 'controller' => 'nodes', + 'action' => 'term', + 'element' => 'vocabulary', + ); + $options = array_merge($_options, $options); + + $output = ''; + if (isset($this->View->viewVars['vocabularies_for_layout'][$vocabularyAlias]['threaded'])) { + $vocabulary = $this->View->viewVars['vocabularies_for_layout'][$vocabularyAlias]; + $output .= $this->View->element($options['element'], array( + 'vocabulary' => $vocabulary, + 'options' => $options, + )); + } + return $output; + } +/** + * Nested Terms + * + * @param array $terms + * @param array $options + * @param integer $depth + */ + public function nestedTerms($terms, $options, $depth = 1) { + $_options = array(); + $options = array_merge($_options, $options); + + $output = ''; + foreach ($terms AS $term) { + if ($options['link']) { + $termAttr = array( + 'id' => 'term-' . $term['Term']['id'], + ); + $termOutput = $this->Html->link($term['Term']['title'], array( + 'plugin' => $options['plugin'], + 'controller' => $options['controller'], + 'action' => $options['action'], + 'type' => $options['type'], + 'slug' => $term['Term']['slug'], + ), $termAttr); + } else { + $termOutput = $term['Term']['title']; + } + if (isset($term['children']) && count($term['children']) > 0) { + $termOutput .= $this->nestedTerms($term['children'], $options, $depth + 1); + } + $termOutput = $this->Html->tag('li', $termOutput); + $output .= $termOutput; + } + if ($output != null) { + $output = $this->Html->tag($options['tag'], $output, $options['tagAttributes']); + } + + return $output; + } +/** + * Show nodes list + * + * @param string $alias Node query alias + * @param array $options (optional) + * @return string + */ + public function nodeList($alias, $options = array()) { + $_options = array( + 'link' => true, + 'plugin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'element' => 'node_list', + ); + $options = array_merge($_options, $options); + + $output = ''; + if (isset($this->View->viewVars['nodes_for_layout'][$alias])) { + $nodes = $this->View->viewVars['nodes_for_layout'][$alias]; + $output = $this->View->element($options['element'], array( + 'alias' => $alias, + 'nodesList' => $this->View->viewVars['nodes_for_layout'][$alias], + 'options' => $options, + )); + } + return $output; + } +/** + * Filter content + * + * Replaces bbcode-like element tags + * + * @param string $content content + * @return string + */ + public function filter($content) { + $content = $this->filterElements($content); + $content = $this->filterMenus($content); + $content = $this->filterVocabularies($content); + $content = $this->filterNodes($content); + return $content; + } +/** + * Filter content for elements + * + * Original post by Stefan Zollinger: http://bakery.cakephp.org/articles/view/element-helper + * [element:element_name] or [e:element_name] + * + * @param string $content + * @return string + */ + public function filterElements($content) { + preg_match_all('/\[(element|e):([A-Za-z0-9_\-]*)(.*?)\]/i', $content, $tagMatches); + for ($i=0; $i < count($tagMatches[1]); $i++) { + $regex = '/(\S+)=[\'"]?((?:.(?![\'"]?\s+(?:\S+)=|[>\'"]))+.)[\'"]?/i'; + preg_match_all($regex, $tagMatches[3][$i], $attributes); + $element = $tagMatches[2][$i]; + $options = array(); + for ($j=0; $j < count($attributes[0]); $j++) { + $options[$attributes[1][$j]] = $attributes[2][$j]; + } + $content = str_replace($tagMatches[0][$i], $this->View->element($element,$options), $content); + } + return $content; + } +/** + * Filter content for Menus + * + * Replaces [menu:menu_alias] or [m:menu_alias] with Menu list + * + * @param string $content + * @return string + */ + public function filterMenus($content) { + preg_match_all('/\[(menu|m):([A-Za-z0-9_\-]*)(.*?)\]/i', $content, $tagMatches); + for ($i=0; $i < count($tagMatches[1]); $i++) { + $regex = '/(\S+)=[\'"]?((?:.(?![\'"]?\s+(?:\S+)=|[>\'"]))+.)[\'"]?/i'; + preg_match_all($regex, $tagMatches[3][$i], $attributes); + $menuAlias = $tagMatches[2][$i]; + $options = array(); + for ($j=0; $j < count($attributes[0]); $j++) { + $options[$attributes[1][$j]] = $attributes[2][$j]; + } + $content = str_replace($tagMatches[0][$i], $this->menu($menuAlias,$options), $content); + } + return $content; + } +/** + * Filter content for Vocabularies + * + * Replaces [vocabulary:vocabulary_alias] or [v:vocabulary_alias] with Terms list + * + * @param string $content + * @return string + */ + public function filterVocabularies($content) { + preg_match_all('/\[(vocabulary|v):([A-Za-z0-9_\-]*)(.*?)\]/i', $content, $tagMatches); + for ($i=0; $i < count($tagMatches[1]); $i++) { + $regex = '/(\S+)=[\'"]?((?:.(?![\'"]?\s+(?:\S+)=|[>\'"]))+.)[\'"]?/i'; + preg_match_all($regex, $tagMatches[3][$i], $attributes); + $vocabularyAlias = $tagMatches[2][$i]; + $options = array(); + for ($j=0; $j < count($attributes[0]); $j++) { + $options[$attributes[1][$j]] = $attributes[2][$j]; + } + $content = str_replace($tagMatches[0][$i], $this->vocabulary($vocabularyAlias,$options), $content); + } + return $content; + } +/** + * Filter content for Nodes + * + * Replaces [node:unique_name_for_query] or [n:unique_name_for_query] with Nodes list + * + * @param string $content + * @return string + */ + public function filterNodes($content) { + preg_match_all('/\[(node|n):([A-Za-z0-9_\-]*)(.*?)\]/i', $content, $tagMatches); + for ($i=0; $i < count($tagMatches[1]); $i++) { + $regex = '/(\S+)=[\'"]?((?:.(?![\'"]?\s+(?:\S+)=|[>\'"]))+.)[\'"]?/i'; + preg_match_all($regex, $tagMatches[3][$i], $attributes); + $alias = $tagMatches[2][$i]; + $options = array(); + for ($j=0; $j < count($attributes[0]); $j++) { + $options[$attributes[1][$j]] = $attributes[2][$j]; + } + $content = str_replace($tagMatches[0][$i], $this->nodeList($alias,$options), $content); + } + return $content; + } +/** + * Meta field: with key/value fields + * + * @param string $key (optional) key + * @param string $value (optional) value + * @param integer $id (optional) ID of Meta + * @param array $options (optional) options + * @return string + */ + public function metaField($key = '', $value = null, $id = null, $options = array()) { + $_options = array( + 'key' => array( + 'label' => __('Key', true), + 'value' => $key, + ), + 'value' => array( + 'label' => __('Value', true), + 'value' => $value, + ), + ); + $options = Set::merge($_options, $options); + $uuid = String::uuid(); + + $fields = ''; + if ($id != null) { + $fields .= $this->Form->input('Meta.'.$uuid.'.id', array('type' => 'hidden', 'value' => $id)); + } + $fields .= $this->Form->input('Meta.'.$uuid.'.key', $options['key']); + $fields .= $this->Form->input('Meta.'.$uuid.'.value', $options['value']); + $fields = $this->Html->tag('div', $fields, array('class' => 'fields')); + + $actions = $this->Html->link(__('Remove', true), '#', array('class' => 'remove-meta', 'rel' => $id), null, null, false); + $actions = $this->Html->tag('div', $actions, array('class' => 'actions')); + + $output = $this->Html->tag('div', $actions . $fields, array('class' => 'meta')); + return $output; + } +/** + * Show links under Actions column + * + * @param integer $id + * @param array $options + * @return string + */ + public function adminRowActions($id, $options = array()) { + $_options = array(); + $options = array_merge($_options, $options); + + $output = ''; + $rowActions = Configure::read('Admin.rowActions.' . Inflector::camelize($this->params['controller']) . '/' . $this->params['action']); + if (is_array($rowActions)) { + foreach ($rowActions AS $title => $link) { + if ($output != '') { + $output .= ' '; + } + $link = $this->linkStringToArray(str_replace(':id', $id, $link)); + $output .= $this->Html->link($title, $link); + } + } + return $output; + } +/** + * Show tabs + * + * @return string + */ + public function adminTabs($show = null) { + if (!isset($this->adminTabs)) { + $this->adminTabs = false; + } + + $output = ''; + $tabs = Configure::read('Admin.tabs.' . Inflector::camelize($this->params['controller']) . '/' . $this->params['action']); + if (is_array($tabs)) { + foreach ($tabs AS $title => $tab) { + if (!isset($tab['options']['type']) || (isset($tab['options']['type']) && (in_array($this->View->viewVars['typeAlias'], $tab['options']['type'])))) { + $domId = strtolower(Inflector::singularize($this->params['controller'])) . '-' . strtolower($title); + if ($this->adminTabs) { + if (strstr($tab['element'], '.')) { + $elementE = explode('.', $tab['element']); + $plugin = $elementE['0']; + $element = $elementE['1']; + } else { + $plugin = null; + } + $output .= '
'; + $output .= $this->View->element($element, array( + 'plugin' => $plugin, + )); + $output .= '
'; + } else { + $output .= '
  • ' . $title . '
  • '; + } + } + } + } + + $this->adminTabs = true; + return $output; + } +/** + * Set current Node + * + * @param array $node + * @return void + */ + public function setNode($node) { + $this->node = $node; + $this->hook('afterSetNode'); + } +/** + * Set value of a field + * + * @param string $field + * @param string $value + * @return void + */ + public function setNodeField($field, $value) { + $model = 'Node'; + if (strstr($field, '.')) { + $fieldE = explode('.', $field); + $model = $fieldE['0']; + $field = $fieldE['1']; + } + + $this->node[$model][$field] = $value; + } +/** + * Get value of a Node field + * + * @param string $field + * @return string + */ + public function node($field = 'id') { + $model = 'Node'; + if (strstr($field, '.')) { + $fieldE = explode('.', $field); + $model = $fieldE['0']; + $field = $fieldE['1']; + } + + if (isset($this->node[$model][$field])) { + return $this->node[$model][$field]; + } else { + return false; + } + } +/** + * Node info + * + * @param array $options + * @return string + */ + public function nodeInfo($options = array()) { + $_options = array( + 'element' => 'node_info', + ); + $options = array_merge($_options, $options); + + $output = $this->hook('beforeNodeInfo'); + $output .= $this->View->element($options['element']); + $output .= $this->hook('afterNodeInfo'); + return $output; + } +/** + * Node excerpt (summary) + * + * @param array $options + * @return string + */ + public function nodeExcerpt($options = array()) { + $_options = array( + 'element' => 'node_excerpt', + ); + $options = array_merge($_options, $options); + + $output = $this->hook('beforeNodeExcerpt'); + $output .= $this->View->element($options['element']); + $output .= $this->hook('afterNodeExcerpt'); + return $output; + } +/** + * Node body + * + * @param array $options + * @return string + */ + public function nodeBody($options = array()) { + $_options = array( + 'element' => 'node_body', + ); + $options = array_merge($_options, $options); + + $output = $this->hook('beforeNodeBody'); + $output .= $this->View->element($options['element']); + $output .= $this->hook('afterNodeBody'); + return $output; + } +/** + * Node more info + * + * @param array $options + * @return string + */ + public function nodeMoreInfo($options = array()) { + $_options = array( + 'element' => 'node_more_info', + ); + $options = array_merge($_options, $options); + + $output = $this->hook('beforeNodeMoreInfo'); + $output .= $this->View->element($options['element']); + $output .= $this->hook('afterNodeMoreInfo'); + return $output; + } +/** + * Hook + * + * Used for calling hook methods from other HookHelpers + * + * @param string $methodName + * @return string + */ + public function hook($methodName) { + $output = ''; + foreach ($this->View->helpers AS $helper) { + if (!is_string($helper) || in_array($helper, $this->coreHelpers)) { + continue; + } + if (strstr($helper, '.')) { + $helperE = explode('.', $helper); + $helper = $helperE['1']; + } + if (isset($this->View->{$helper}) && method_exists($this->View->{$helper}, $methodName)) { + $output .= $this->View->{$helper}->$methodName(); + } + } + return $output; + } + +} +?> \ No newline at end of file diff --git a/app/views/helpers/meta.php b/app/views/helpers/meta.php new file mode 100644 index 0000000..c3cd92c --- /dev/null +++ b/app/views/helpers/meta.php @@ -0,0 +1,61 @@ + + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + * @link http://www.croogo.org + */ +class MetaHelper extends AppHelper { +/** + * Other helpers used by this helper + * + * @var array + * @access public + */ + var $helpers = array('Html', 'Form'); +/** + * Meta with key/value fields + * + * @param string $key (optional) key + * @param string $value (optional) value + * @param integer $id (optional) ID of Meta + * @param array $options (optional) options + * @return string + */ + function field($key = '', $value = null, $id = null, $options = array()) { + $_options = array( + 'key' => array( + 'label' => __('Key', true), + 'value' => $key, + ), + 'value' => array( + 'label' => __('Value', true), + 'value' => $value, + ), + ); + $options = array_merge($_options, $options); + $uuid = String::uuid(); + + $fields = ''; + if ($id != null) { + $fields .= $this->Form->input('Meta.'.$uuid.'.id', array('type' => 'hidden', 'value' => $id)); + } + $fields .= $this->Form->input('Meta.'.$uuid.'.key', $options['key']); + $fields .= $this->Form->input('Meta.'.$uuid.'.value', $options['value']); + $fields = $this->Html->tag('div', $fields, array('class' => 'fields')); + + $actions = $this->Html->link(__('Remove', true), '#', array('class' => 'remove-meta', 'rel' => $id), null, null, false); + $actions = $this->Html->tag('div', $actions, array('class' => 'actions')); + + $output = $this->Html->tag('div', $actions . $fields, array('class' => 'meta')); + return $output; + } + +} +?> \ No newline at end of file diff --git a/app/views/helpers/recaptcha.php b/app/views/helpers/recaptcha.php new file mode 100644 index 0000000..a3f7ad9 --- /dev/null +++ b/app/views/helpers/recaptcha.php @@ -0,0 +1,123 @@ +__form(Configure::read("Recaptcha.pubKey"),$error,$use_ssl); + if($output_method == "echo") + echo $data; + else + return $data; + } + + public function hide_mail($email = '',$output_method = 'return'){ + $data = $this->recaptcha_mailhide_html(Configure::read('Recaptcha.pubKey'), Configure::read('Recaptcha.privateKey'), $email); + if($output_method == "echo") + echo $data; + else + return $data; + } + + /** + * Gets the challenge HTML (javascript and non-javascript version). + * This is called from the browser, and the resulting reCAPTCHA HTML widget + * is embedded within the HTML form it was called from. + * @param string $pubkey A public key for reCAPTCHA + * @param string $error The error given by reCAPTCHA (optional, default is null) + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) + + * @return string - The HTML to be embedded in the user's form. + */ + private function __form($pubkey, $error = null, $use_ssl = false){ + if ($pubkey == null || $pubkey == '') { + die ("To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey"); + } + + if ($use_ssl) { + $server = Configure::read('Recaptcha.apiSecureServer'); + } else { + $server = Configure::read('Recaptcha.apiServer'); + } + + $errorpart = ""; + if ($error) { + $errorpart = "&error=" . $error; + } + return ' + + '; + } + + /* Mailhide related code */ + protected function _recaptcha_aes_encrypt($val,$ky) { + if (! function_exists ("mcrypt_encrypt")) { + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode=MCRYPT_MODE_CBC; + $enc=MCRYPT_RIJNDAEL_128; + $val=$this->_recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); + } + + protected function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode ($x), '+/', '-_'); + } + + /* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ + public function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at http://mailhide.recaptcha.net/apikey"); + } + + + $ky = pack('H*', $privkey); + $cryptmail = $this->_recaptcha_aes_encrypt ($email, $ky); + + return "http://mailhide.recaptcha.net/d?k=" . $pubkey . "&c=" . $this->_recaptcha_mailhide_urlbase64 ($cryptmail); + } + + /** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ + protected function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email ); + + if (strlen ($arr[0]) <= 4) { + $arr[0] = substr ($arr[0], 0, 1); + } else if (strlen ($arr[0]) <= 6) { + $arr[0] = substr ($arr[0], 0, 3); + } else { + $arr[0] = substr ($arr[0], 0, 4); + } + return $arr; + } + + /** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://mailhide.recaptcha.net/apikey + */ + public function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = $this->_recaptcha_mailhide_email_parts ($email); + $url = $this->recaptcha_mailhide_url ($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); + + } + + +} +?> \ No newline at end of file diff --git a/app/views/languages/.svn/entries b/app/views/languages/.svn/entries new file mode 100644 index 0000000..22bed12 --- /dev/null +++ b/app/views/languages/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/languages +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c473754f53f004b4603403583840a29f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +836 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +cdc6e081d169bca797e7a7dd35dc2680 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2093 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +30b894797b20dedb4007ea761f68ad8b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +791 + +admin_select.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0bc1e65da5ac81407fe04f7b38b233a7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +749 + diff --git a/app/views/languages/.svn/text-base/admin_add.ctp.svn-base b/app/views/languages/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..73a746d --- /dev/null +++ b/app/views/languages/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,23 @@ +
    +

    + create('Language'); ?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('title'); + echo $form->input('native'); + echo $form->input('alias'); + echo $form->input('status'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit'); ?> +
    \ No newline at end of file diff --git a/app/views/languages/.svn/text-base/admin_edit.ctp.svn-base b/app/views/languages/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..de56991 --- /dev/null +++ b/app/views/languages/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,24 @@ +
    +

    + create('Language'); ?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('title'); + echo $form->input('native'); + echo $form->input('alias'); + echo $form->input('status'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit'); ?> +
    \ No newline at end of file diff --git a/app/views/languages/.svn/text-base/admin_index.ctp.svn-base b/app/views/languages/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..1cc7218 --- /dev/null +++ b/app/views/languages/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,51 @@ +
    +

    + +
    +
      +
    • link(__('New Language', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('native'), + $paginator->sort('alias'), + $paginator->sort('status'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($languages AS $language) { + $actions = $html->link(__('Move up', true), array('action' => 'moveup', $language['Language']['id'])); + $actions .= ' ' . $html->link(__('Move down', true), array('action' => 'movedown', $language['Language']['id'])); + $actions .= ' ' . $html->link(__('Edit', true), array('action' => 'edit', $language['Language']['id'])); + $actions .= ' ' . $layout->adminRowActions($language['Language']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $language['Language']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $language['Language']['id'], + $language['Language']['title'], + $language['Language']['native'], + $language['Language']['alias'], + $layout->status($language['Language']['status']), + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/languages/.svn/text-base/admin_select.ctp.svn-base b/app/views/languages/.svn/text-base/admin_select.ctp.svn-base new file mode 100644 index 0000000..2cdd267 --- /dev/null +++ b/app/views/languages/.svn/text-base/admin_select.ctp.svn-base @@ -0,0 +1,24 @@ +
    +

    + +
    +
      +
    • link(__('New Language', true), array('action'=>'add')); ?>
    • +
    +
    + + link($title, array( + 'plugin' => 'translate', + 'controller' => 'translate', + 'action' => 'edit', + $id, + $modelAlias, + 'locale' => $language['Language']['alias'], + )); + echo '

    ' . $link . '

    '; + } + ?> +
    \ No newline at end of file diff --git a/app/views/languages/admin_add.ctp b/app/views/languages/admin_add.ctp new file mode 100644 index 0000000..581600b --- /dev/null +++ b/app/views/languages/admin_add.ctp @@ -0,0 +1,33 @@ +
    +

    + Form->create('Language'); ?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('native'); + echo $this->Form->input('alias'); + echo $this->Form->input('status'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/languages/admin_edit.ctp b/app/views/languages/admin_edit.ctp new file mode 100644 index 0000000..7eb2754 --- /dev/null +++ b/app/views/languages/admin_edit.ctp @@ -0,0 +1,34 @@ +
    +

    + Form->create('Language'); ?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('title'); + echo $this->Form->input('native'); + echo $this->Form->input('alias'); + echo $this->Form->input('status'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/languages/admin_index.ctp b/app/views/languages/admin_index.ctp new file mode 100644 index 0000000..e03a146 --- /dev/null +++ b/app/views/languages/admin_index.ctp @@ -0,0 +1,51 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Language', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('native'), + $paginator->sort('alias'), + $paginator->sort('status'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($languages AS $language) { + $actions = $this->Html->link(__('Move up', true), array('action' => 'moveup', $language['Language']['id'])); + $actions .= ' ' . $this->Html->link(__('Move down', true), array('action' => 'movedown', $language['Language']['id'])); + $actions .= ' ' . $this->Html->link(__('Edit', true), array('action' => 'edit', $language['Language']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($language['Language']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $language['Language']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $language['Language']['id'], + $language['Language']['title'], + $language['Language']['native'], + $language['Language']['alias'], + $this->Layout->status($language['Language']['status']), + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/languages/admin_select.ctp b/app/views/languages/admin_select.ctp new file mode 100644 index 0000000..c51897b --- /dev/null +++ b/app/views/languages/admin_select.ctp @@ -0,0 +1,24 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Language', true), array('action'=>'add')); ?>
    • +
    +
    + + Html->link($title, array( + 'plugin' => 'translate', + 'controller' => 'translate', + 'action' => 'edit', + $id, + $modelAlias, + 'locale' => $language['Language']['alias'], + )); + echo '

    ' . $link . '

    '; + } + ?> +
    \ No newline at end of file diff --git a/app/views/layouts/.svn/entries b/app/views/layouts/.svn/entries new file mode 100644 index 0000000..7f0e749 --- /dev/null +++ b/app/views/layouts/.svn/entries @@ -0,0 +1,216 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_full.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0ee7ff2b9cccf905f1c88517c072a80c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2041 + +xml +dir + +admin_login.ctp +file + + + + +2010-09-04T08:55:28.000000Z +498ac2e1c33a3438589c739986901635 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1028 + +email +dir + +maintenance.ctp +file + + + + +2010-09-04T08:55:28.000000Z +00c50e7320693761e7a22a9b1f0981c4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +534 + +rss +dir + +default.ctp +file + + + + +2010-09-04T08:55:28.000000Z +3a8342356b5a15dd0bb86b6944af55b0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2439 + +json +dir + +js +dir + +admin.ctp +file + + + + +2010-09-04T08:55:28.000000Z +d2e084826c5c397f19fd6b66150eef9c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2256 + +webservice +dir + diff --git a/app/views/layouts/.svn/text-base/admin.ctp.svn-base b/app/views/layouts/.svn/text-base/admin.ctp.svn-base new file mode 100644 index 0000000..153e3d1 --- /dev/null +++ b/app/views/layouts/.svn/text-base/admin.ctp.svn-base @@ -0,0 +1,74 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + script(array('jquery/jquery.min')); + echo $layout->js(); + echo $html->css(array( + 'reset', + '960', + '/ui-themes/smoothness/jquery-ui.css', + 'admin', + 'thickbox', + )); + echo $html->script(array( + 'jquery/jquery-ui.min', + 'jquery/jquery.slug', + 'jquery/jquery.uuid', + 'jquery/jquery.cookie', + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'jquery/jquery.tipsy', + 'jquery/jquery.elastic-1.6.1.js', + 'jquery/thickbox-compressed', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + +
    + + + + +
    +
    +
    + sessionFlash(); + echo $content_for_layout; + ?> +
    +
    +
     
    +
    + +
    +
    + + element('admin/footer'); ?> + + + \ No newline at end of file diff --git a/app/views/layouts/.svn/text-base/admin_full.ctp.svn-base b/app/views/layouts/.svn/text-base/admin_full.ctp.svn-base new file mode 100644 index 0000000..20f9a28 --- /dev/null +++ b/app/views/layouts/.svn/text-base/admin_full.ctp.svn-base @@ -0,0 +1,67 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + script(array('jquery/jquery.min')); + echo $layout->js(); + echo $html->css(array( + 'reset', + '960', + '/ui-themes/smoothness/jquery-ui.css', + 'admin', + 'thickbox', + )); + echo $html->script(array( + 'jquery/jquery-ui.min', + 'jquery/jquery.uuid', + 'jquery/jquery.cookie', + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'jquery/jquery.tipsy', + 'jquery/jquery.elastic-1.6.1.js', + 'jquery/thickbox-compressed', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + +
    + + +
    +
    +
    + sessionFlash(); + echo $content_for_layout; + ?> +
    +
    +
     
    +
    + +
    +
    + + element('admin/footer'); ?> + + + \ No newline at end of file diff --git a/app/views/layouts/.svn/text-base/admin_login.ctp.svn-base b/app/views/layouts/.svn/text-base/admin_login.ctp.svn-base new file mode 100644 index 0000000..4d1b7eb --- /dev/null +++ b/app/views/layouts/.svn/text-base/admin_login.ctp.svn-base @@ -0,0 +1,40 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + css(array( + 'reset', + '960', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + + + + + + \ No newline at end of file diff --git a/app/views/layouts/.svn/text-base/default.ctp.svn-base b/app/views/layouts/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..cd96583 --- /dev/null +++ b/app/views/layouts/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,78 @@ + + * @link http://www.croogo.org + */ +?> + + + + + <?php echo $title_for_layout; ?> » <?php echo Configure::read('Site.title'); ?> + meta(); + echo $layout->feed(); + echo $html->script(array('jquery/jquery.min')); + echo $layout->js(); + echo $html->css(array( + 'reset', + '960', + 'theme', + )); + echo $html->script(array( + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'theme', + )); + echo $scripts_for_layout; + ?> + + +
    + + + + +
    +
    + sessionFlash(); + echo $content_for_layout; + ?> +
    + + + +
    +
    + + +
    + + + \ No newline at end of file diff --git a/app/views/layouts/.svn/text-base/maintenance.ctp.svn-base b/app/views/layouts/.svn/text-base/maintenance.ctp.svn-base new file mode 100644 index 0000000..aef3c36 --- /dev/null +++ b/app/views/layouts/.svn/text-base/maintenance.ctp.svn-base @@ -0,0 +1,16 @@ + + + +charset(); ?> +<?php echo $title_for_layout; ?> + + + +

    + + + \ No newline at end of file diff --git a/app/views/layouts/admin.ctp b/app/views/layouts/admin.ctp new file mode 100644 index 0000000..c1ed1be --- /dev/null +++ b/app/views/layouts/admin.ctp @@ -0,0 +1,62 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + Html->css(array( + 'reset', + '960', + '/ui-themes/smoothness/jquery-ui.css', + 'admin', + 'thickbox', + )); + echo $this->Layout->js(); + echo $this->Html->script(array( + 'jquery/jquery.min', + 'jquery/jquery-ui.min', + 'jquery/jquery.slug', + 'jquery/jquery.uuid', + 'jquery/jquery.cookie', + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'jquery/jquery.tipsy', + 'jquery/jquery.elastic-1.6.1.js', + 'jquery/thickbox-compressed', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + +
    + element('admin/header'); ?> + + + +
    +
    +
    + Layout->sessionFlash(); + echo $content_for_layout; + ?> +
    +
    +
     
    +
    + +
    +
    + + element('admin/footer'); ?> + + + \ No newline at end of file diff --git a/app/views/layouts/admin_full.ctp b/app/views/layouts/admin_full.ctp new file mode 100644 index 0000000..5962ff1 --- /dev/null +++ b/app/views/layouts/admin_full.ctp @@ -0,0 +1,55 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + Html->css(array( + 'reset', + '960', + '/ui-themes/smoothness/jquery-ui.css', + 'admin', + 'thickbox', + )); + echo $this->Layout->js(); + echo $this->Html->script(array( + 'jquery/jquery.min', + 'jquery/jquery-ui.min', + 'jquery/jquery.uuid', + 'jquery/jquery.cookie', + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'jquery/jquery.tipsy', + 'jquery/jquery.elastic-1.6.1.js', + 'jquery/thickbox-compressed', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + +
    + element('admin/header'); ?> + +
    +
    +
    + Layout->sessionFlash(); + echo $content_for_layout; + ?> +
    +
    +
     
    +
    + +
    +
    + + element('admin/footer'); ?> + + + \ No newline at end of file diff --git a/app/views/layouts/admin_login.ctp b/app/views/layouts/admin_login.ctp new file mode 100644 index 0000000..c82b812 --- /dev/null +++ b/app/views/layouts/admin_login.ctp @@ -0,0 +1,40 @@ + + + + + <?php echo $title_for_layout; ?> - <?php __('Croogo'); ?> + Html->css(array( + 'reset', + '960', + 'admin', + )); + echo $scripts_for_layout; + ?> + + + + + + + + + \ No newline at end of file diff --git a/app/views/layouts/default.ctp b/app/views/layouts/default.ctp new file mode 100644 index 0000000..d30a904 --- /dev/null +++ b/app/views/layouts/default.ctp @@ -0,0 +1,78 @@ + + * @link http://www.croogo.org + */ +?> + + + + + <?php echo $title_for_layout; ?> » <?php echo Configure::read('Site.title'); ?> + Layout->meta(); + echo $this->Layout->feed(); + echo $this->Html->css(array( + 'reset', + '960', + 'theme', + )); + echo $this->Layout->js(); + echo $this->Html->script(array( + 'jquery/jquery.min', + 'jquery/jquery.hoverIntent.minified', + 'jquery/superfish', + 'jquery/supersubs', + 'theme', + )); + echo $scripts_for_layout; + ?> + + +
    + + + + +
    +
    + Layout->sessionFlash(); + echo $content_for_layout; + ?> +
    + + + +
    +
    + + +
    + + + \ No newline at end of file diff --git a/app/views/layouts/email/.svn/entries b/app/views/layouts/email/.svn/entries new file mode 100644 index 0000000..8c92152 --- /dev/null +++ b/app/views/layouts/email/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/email +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +html +dir + +text +dir + diff --git a/app/views/layouts/email/html/.svn/entries b/app/views/layouts/email/html/.svn/entries new file mode 100644 index 0000000..a0e003c --- /dev/null +++ b/app/views/layouts/email/html/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/email/html +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-09-04T08:55:28.000000Z +5a99b881d43704dceb623032bd1716fc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +143 + diff --git a/app/views/layouts/email/html/.svn/text-base/default.ctp.svn-base b/app/views/layouts/email/html/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..320438d --- /dev/null +++ b/app/views/layouts/email/html/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/views/layouts/email/html/default.ctp b/app/views/layouts/email/html/default.ctp new file mode 100644 index 0000000..320438d --- /dev/null +++ b/app/views/layouts/email/html/default.ctp @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/views/layouts/email/text/.svn/entries b/app/views/layouts/email/text/.svn/entries new file mode 100644 index 0000000..c011464 --- /dev/null +++ b/app/views/layouts/email/text/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/email/text +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-09-04T08:55:28.000000Z +5069eab30e865089cbb234ecd74810c2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +34 + diff --git a/app/views/layouts/email/text/.svn/text-base/default.ctp.svn-base b/app/views/layouts/email/text/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..3f29013 --- /dev/null +++ b/app/views/layouts/email/text/.svn/text-base/default.ctp.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/views/layouts/email/text/default.ctp b/app/views/layouts/email/text/default.ctp new file mode 100644 index 0000000..3f29013 --- /dev/null +++ b/app/views/layouts/email/text/default.ctp @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/views/layouts/js/.svn/entries b/app/views/layouts/js/.svn/entries new file mode 100644 index 0000000..716ff1d --- /dev/null +++ b/app/views/layouts/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/views/layouts/js/.svn/text-base/empty.svn-base b/app/views/layouts/js/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/js/empty b/app/views/layouts/js/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/json/.svn/entries b/app/views/layouts/json/.svn/entries new file mode 100644 index 0000000..6ceb588 --- /dev/null +++ b/app/views/layouts/json/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/json +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +ajax.ctp +file + + + + +2010-09-04T08:55:28.000000Z +984b1714c7180eabd3c34345fe88e37b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +233 + +default.ctp +file + + + + +2010-09-04T08:55:28.000000Z +984b1714c7180eabd3c34345fe88e37b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +233 + +admin.ctp +file + + + + +2010-09-04T08:55:28.000000Z +984b1714c7180eabd3c34345fe88e37b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +233 + diff --git a/app/views/layouts/json/.svn/text-base/admin.ctp.svn-base b/app/views/layouts/json/.svn/text-base/admin.ctp.svn-base new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/.svn/text-base/admin.ctp.svn-base @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/json/.svn/text-base/ajax.ctp.svn-base b/app/views/layouts/json/.svn/text-base/ajax.ctp.svn-base new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/.svn/text-base/ajax.ctp.svn-base @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/json/.svn/text-base/default.ctp.svn-base b/app/views/layouts/json/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/json/admin.ctp b/app/views/layouts/json/admin.ctp new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/admin.ctp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/json/ajax.ctp b/app/views/layouts/json/ajax.ctp new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/ajax.ctp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/json/default.ctp b/app/views/layouts/json/default.ctp new file mode 100644 index 0000000..d3ad5d6 --- /dev/null +++ b/app/views/layouts/json/default.ctp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/layouts/maintenance.ctp b/app/views/layouts/maintenance.ctp new file mode 100644 index 0000000..e10bb24 --- /dev/null +++ b/app/views/layouts/maintenance.ctp @@ -0,0 +1,16 @@ + + + +Html->charset(); ?> +<?php echo $title_for_layout; ?> + + + +

    + + + \ No newline at end of file diff --git a/app/views/layouts/rss/.svn/entries b/app/views/layouts/rss/.svn/entries new file mode 100644 index 0000000..298d605 --- /dev/null +++ b/app/views/layouts/rss/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/rss +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0a55695dbf719bc5663c243b3fd689c1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +443 + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/views/layouts/rss/.svn/text-base/default.ctp.svn-base b/app/views/layouts/rss/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..33543b9 --- /dev/null +++ b/app/views/layouts/rss/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,14 @@ +header(); + if (!isset($channel)) { + $channel = array(); + } + if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout . ' - ' . Configure::read('Site.title'); + } +?> +xml-stylesheet type="text/xsl" href="webroot('css/feed.xsl') ?>" ?> +channel(array(), $channel, $items); + echo $rss->document(array(), $channelEl); +?> \ No newline at end of file diff --git a/app/views/layouts/rss/.svn/text-base/empty.svn-base b/app/views/layouts/rss/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/rss/default.ctp b/app/views/layouts/rss/default.ctp new file mode 100644 index 0000000..33543b9 --- /dev/null +++ b/app/views/layouts/rss/default.ctp @@ -0,0 +1,14 @@ +header(); + if (!isset($channel)) { + $channel = array(); + } + if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout . ' - ' . Configure::read('Site.title'); + } +?> +xml-stylesheet type="text/xsl" href="webroot('css/feed.xsl') ?>" ?> +channel(array(), $channel, $items); + echo $rss->document(array(), $channelEl); +?> \ No newline at end of file diff --git a/app/views/layouts/rss/empty b/app/views/layouts/rss/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/webservice/.svn/entries b/app/views/layouts/webservice/.svn/entries new file mode 100644 index 0000000..40187f8 --- /dev/null +++ b/app/views/layouts/webservice/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/webservice +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +webservice.ctp +file + + + + +2010-05-14T03:56:40.000000Z +c9908c51167bd747607a89c1d55e6a42 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +38 + diff --git a/app/views/layouts/webservice/.svn/text-base/webservice.ctp.svn-base b/app/views/layouts/webservice/.svn/text-base/webservice.ctp.svn-base new file mode 100644 index 0000000..a24e1ae --- /dev/null +++ b/app/views/layouts/webservice/.svn/text-base/webservice.ctp.svn-base @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/app/views/layouts/webservice/webservice.ctp b/app/views/layouts/webservice/webservice.ctp new file mode 100644 index 0000000..a24e1ae --- /dev/null +++ b/app/views/layouts/webservice/webservice.ctp @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/app/views/layouts/xml/.svn/entries b/app/views/layouts/xml/.svn/entries new file mode 100644 index 0000000..d32860c --- /dev/null +++ b/app/views/layouts/xml/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/layouts/xml +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/views/layouts/xml/.svn/text-base/empty.svn-base b/app/views/layouts/xml/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/xml/empty b/app/views/layouts/xml/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/views/links/.svn/entries b/app/views/links/.svn/entries new file mode 100644 index 0000000..0884dc4 --- /dev/null +++ b/app/views/links/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/links +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +394fa49a67e89823f249afcb80b1e12e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2324 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +9d3ffbb3867886ca1b5f0f720b7a337a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2485 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +a9394dbf86c6fb93c8495f4dd63c1a30 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2303 + diff --git a/app/views/links/.svn/text-base/admin_add.ctp.svn-base b/app/views/links/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..08cca69 --- /dev/null +++ b/app/views/links/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,53 @@ + \ No newline at end of file diff --git a/app/views/links/.svn/text-base/admin_edit.ctp.svn-base b/app/views/links/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..6d20bac --- /dev/null +++ b/app/views/links/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,54 @@ + \ No newline at end of file diff --git a/app/views/links/.svn/text-base/admin_index.ctp.svn-base b/app/views/links/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..bf58fa3 --- /dev/null +++ b/app/views/links/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,75 @@ + \ No newline at end of file diff --git a/app/views/links/admin_add.ctp b/app/views/links/admin_add.ctp new file mode 100644 index 0000000..5efb218 --- /dev/null +++ b/app/views/links/admin_add.ctp @@ -0,0 +1,64 @@ + \ No newline at end of file diff --git a/app/views/links/admin_edit.ctp b/app/views/links/admin_edit.ctp new file mode 100644 index 0000000..7f5e098 --- /dev/null +++ b/app/views/links/admin_edit.ctp @@ -0,0 +1,64 @@ + \ No newline at end of file diff --git a/app/views/links/admin_index.ctp b/app/views/links/admin_index.ctp new file mode 100644 index 0000000..dcfc10c --- /dev/null +++ b/app/views/links/admin_index.ctp @@ -0,0 +1,75 @@ + \ No newline at end of file diff --git a/app/views/menus/.svn/entries b/app/views/menus/.svn/entries new file mode 100644 index 0000000..22cb1ac --- /dev/null +++ b/app/views/menus/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/menus +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +83e7f13e3021ccc24d5ead2a9e6f2ddc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1114 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +3196806e7aacd36182c27219c25e4572 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1969 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +88633bbb4bbaf7639c0318785d48fb0c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1065 + diff --git a/app/views/menus/.svn/text-base/admin_add.ctp.svn-base b/app/views/menus/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..64c74d4 --- /dev/null +++ b/app/views/menus/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/app/views/menus/.svn/text-base/admin_edit.ctp.svn-base b/app/views/menus/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..d4794b9 --- /dev/null +++ b/app/views/menus/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/app/views/menus/.svn/text-base/admin_index.ctp.svn-base b/app/views/menus/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..c69003a --- /dev/null +++ b/app/views/menus/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,49 @@ + + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/menus/admin_add.ctp b/app/views/menus/admin_add.ctp new file mode 100644 index 0000000..d396dc8 --- /dev/null +++ b/app/views/menus/admin_add.ctp @@ -0,0 +1,40 @@ + \ No newline at end of file diff --git a/app/views/menus/admin_edit.ctp b/app/views/menus/admin_edit.ctp new file mode 100644 index 0000000..8f96d45 --- /dev/null +++ b/app/views/menus/admin_edit.ctp @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/app/views/menus/admin_index.ctp b/app/views/menus/admin_index.ctp new file mode 100644 index 0000000..3c67b88 --- /dev/null +++ b/app/views/menus/admin_index.ctp @@ -0,0 +1,49 @@ + + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/messages/.svn/entries b/app/views/messages/.svn/entries new file mode 100644 index 0000000..8260d79 --- /dev/null +++ b/app/views/messages/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/messages +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +65bc38831b3dbcb13eca599e43c8e7f6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +504 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +5b521682fdb62308ed7447e8d5d7c9f9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2867 + diff --git a/app/views/messages/.svn/text-base/admin_edit.ctp.svn-base b/app/views/messages/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..9df9836 --- /dev/null +++ b/app/views/messages/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,17 @@ +
    +

    + + create('Message');?> +
    + input('id'); + echo $form->input('name'); + echo $form->input('email'); + echo $form->input('title'); + echo $form->input('body'); + echo $form->input('phone'); + echo $form->input('address'); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/messages/.svn/text-base/admin_index.ctp.svn-base b/app/views/messages/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..80b4347 --- /dev/null +++ b/app/views/messages/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,77 @@ +
    +

    + +
    +
      +
    • link(__('Unread', true), array('action'=>'index', 'filter' => 'status:0;')); ?>
    • +
    • link(__('Read', true), array('action'=>'index', 'filter' => 'status:1;')); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + ?> + + create('Message', array('url' => array('controller' => 'messages', 'action' => 'process'))); ?> + + tableHeaders(array( + '', + $paginator->sort('id'), + $paginator->sort('contact_id'), + $paginator->sort('name'), + $paginator->sort('email'), + $paginator->sort('title'), + '', + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($messages AS $message) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $message['Message']['id'])); + $actions .= ' ' . $layout->adminRowActions($message['Message']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $message['Message']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $form->checkbox('Message.'.$message['Message']['id'].'.id'), + $message['Message']['id'], + $message['Contact']['title'], + $message['Message']['name'], + $message['Message']['email'], + $message['Message']['title'], + $html->image('/img/icons/comment.png'), + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + input('Message.action', array( + 'label' => false, + 'options' => array( + 'read' => __('Mark as read', true), + 'unread' => __('Mark as unread', true), + 'delete' => __('Delete', true), + ), + 'empty' => true, + )); + echo $form->end(__('Submit', true)); + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/messages/admin_edit.ctp b/app/views/messages/admin_edit.ctp new file mode 100644 index 0000000..82f058b --- /dev/null +++ b/app/views/messages/admin_edit.ctp @@ -0,0 +1,27 @@ +
    +

    + + Form->create('Message');?> +
    + Form->input('id'); + echo $this->Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('title'); + echo $this->Form->input('body'); + echo $this->Form->input('phone'); + echo $this->Form->input('address'); + ?> +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/messages/admin_index.ctp b/app/views/messages/admin_index.ctp new file mode 100644 index 0000000..5b2a697 --- /dev/null +++ b/app/views/messages/admin_index.ctp @@ -0,0 +1,77 @@ +
    +

    + +
    +
      +
    • Html->link(__('Unread', true), array('action'=>'index', 'filter' => 'status:0;')); ?>
    • +
    • Html->link(__('Read', true), array('action'=>'index', 'filter' => 'status:1;')); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + ?> + + Form->create('Message', array('url' => array('controller' => 'messages', 'action' => 'process'))); ?> + + Html->tableHeaders(array( + '', + $paginator->sort('id'), + $paginator->sort('contact_id'), + $paginator->sort('name'), + $paginator->sort('email'), + $paginator->sort('title'), + '', + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($messages AS $message) { + $actions = $this->Html->link(__('Edit', true), array('action' => 'edit', $message['Message']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($message['Message']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $message['Message']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $this->Form->checkbox('Message.'.$message['Message']['id'].'.id'), + $message['Message']['id'], + $message['Contact']['title'], + $message['Message']['name'], + $message['Message']['email'], + $message['Message']['title'], + $this->Html->image('/img/icons/comment.png'), + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + Form->input('Message.action', array( + 'label' => false, + 'options' => array( + 'read' => __('Mark as read', true), + 'unread' => __('Mark as unread', true), + 'delete' => __('Delete', true), + ), + 'empty' => true, + )); + echo $this->Form->end(__('Submit', true)); + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/nodes/.svn/entries b/app/views/nodes/.svn/entries new file mode 100644 index 0000000..baa7f2d --- /dev/null +++ b/app/views/nodes/.svn/entries @@ -0,0 +1,476 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/nodes +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +08dd6c45d5712026ac3ee307d17df128 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4662 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +957a8b529a31011ee467eb168a82d401 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4697 + +search.ctp +file + + + + +2010-09-04T08:55:28.000000Z +1961698ec9173f484b02e47c930a71c5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +871 + +admin_translate.ctp +file + + + + +2010-09-04T08:55:28.000000Z +ccaebf7a0644dfd82710fc91b02178d1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +986 + +admin_add_meta.ctp +file + + + + +2010-09-04T08:55:28.000000Z +856d350bf544ace9598389b71f90afab +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +73 + +term.ctp +file + + + + +2010-09-04T08:55:28.000000Z +28052654f81afaba0ac2085d34ceb812 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +864 + +index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c801865dbe46a8d881495150f4f17b0a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +817 + +view.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c8c289eb9124b2f1846c0ab04da0ce59 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +713 + +admin_create.ctp +file + + + + +2010-09-04T08:55:28.000000Z +dc7ab474372150428893567fc3bf7578 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +406 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +12c0ab5410e9898ea512a1f656176def +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3368 + +rss +dir + +json +dir + +admin_links.ctp +file + + + + +2010-09-04T08:55:28.000000Z +476a067274e9df9ee29f6f67702bb44e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1478 + +promoted.ctp +file + + + + +2010-09-04T08:55:28.000000Z +599e0f74cfb5f0d4cd306c134987154a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +825 + +admin_translations.ctp +file + + + + +2010-09-04T08:55:28.000000Z +e79ef273b8043fdd11a219cad4b1b8e9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1735 + diff --git a/app/views/nodes/.svn/text-base/admin_add.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..09ef824 --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,107 @@ +script(array('nodes'), false); ?> +
    +

    + create('Node', array('url' => array('action' => 'add', $typeAlias)));?> +
    +
    +
      +
    • + 0) { ?>
    • +
    • +
    • +
    • +
    • + adminTabs(); ?> +
    + +
    + input('parent_id', array('type' => 'select', 'options' => $nodes, 'empty' => true)); + echo $form->input('title'); + echo $form->input('slug', array('class' => 'slug')); + echo $form->input('excerpt'); + echo $form->input('body', array('class' => 'content')); + ?> +
    + + 0) { ?> +
    + $taxonomyTree) { + echo $form->input('TaxonomyData.'.$vocabularyId, array( + 'label' => $vocabularies[$vocabularyId]['title'], + 'type' => 'select', + 'multiple' => true, + 'options' => $taxonomyTree, + )); + } + ?> +
    + + + +
    + input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => array( + '0' => __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ), + 'value' => $type['Type']['comment_status'], + )); + ?> +
    + + +
    +
    + 0) { + foreach ($fields AS $fieldKey => $fieldValue) { + echo $layout->metaField($fieldKey, $fieldValue); + } + } else { + echo $layout->metaField(); + } + ?> +
     
    +
    + +
    + +
    + input('Role.Role'); + ?> +
    + +
    + input('status', array( + 'label' => __('Published', true), + 'checked' => 'checked', + )); + echo $form->input('promote', array( + 'label' => __('Promoted to front page', true), + 'checked' => 'checked', + )); + echo $form->input('user_id'); + echo $form->input('created'); + ?> +
    + adminTabs(); ?> +
     
    +
    +
    + input('token_key', array( + 'type' => 'hidden', + 'value' => $this->params['_Token']['key'], + )); + echo $form->end('Submit'); + ?> +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_add_meta.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_add_meta.ctp.svn-base new file mode 100644 index 0000000..f916716 --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_add_meta.ctp.svn-base @@ -0,0 +1,4 @@ +metaField(); +?> \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_create.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_create.ctp.svn-base new file mode 100644 index 0000000..08813a9 --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_create.ctp.svn-base @@ -0,0 +1,12 @@ +
    +

    + +
    + +
    +

    link($type['Type']['title'], array('action' => 'add', $type['Type']['alias'])); ?>

    +

    +
    + +
    +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_edit.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..1ee53db --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,103 @@ +script(array('nodes'), false); ?> +
    +

    + + create('Node', array('url' => array('action' => 'edit')));?> +
    +
    +
      +
    • + 0) { ?>
    • +
    • +
    • +
    • +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('parent_id', array('type' => 'select', 'options' => $nodes, 'empty' => true)); + echo $form->input('title'); + echo $form->input('slug'); + echo $form->input('excerpt'); + echo $form->input('body', array('class' => 'content')); + ?> +
    + + 0) { ?> +
    + data); + foreach ($taxonomy AS $vocabularyId => $taxonomyTree) { + echo $form->input('TaxonomyData.'.$vocabularyId, array( + 'label' => $vocabularies[$vocabularyId]['title'], + 'type' => 'select', + 'multiple' => true, + 'options' => $taxonomyTree, + 'value' => $taxonomyIds, + )); + } + ?> +
    + + + +
    + input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => array( + '0' => __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ), + )); + ?> +
    + + +
    +
    + data['Meta'], '{n}.key', '{n}.value'); + $fieldsKeyToId = Set::combine($this->data['Meta'], '{n}.key', '{n}.id'); + if (count($fields) > 0) { + foreach ($fields AS $fieldKey => $fieldValue) { + echo $layout->metaField($fieldKey, $fieldValue, $fieldsKeyToId[$fieldKey]); + } + } + ?> +
     
    +
    + +
    + +
    + input('Role.Role'); + ?> +
    + +
    + input('status', array('label' => __('Published', true))); + echo $form->input('promote', array('label' => __('Promoted to front page', true))); + echo $form->input('user_id'); + echo $form->input('created'); + ?> +
    + adminTabs(); ?> +
     
    +
    +
    + input('token_key', array( + 'type' => 'hidden', + 'value' => $this->params['_Token']['key'], + )); + echo $form->end('Submit'); + ?> +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_index.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..515526b --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,93 @@ +script(array('nodes'), false); +?> +
    +

    + +
    +
      +
    • link(__('Create content', true), array('action'=>'create')); ?>
    • +
    • link(__('Filter', true), '#', array('class' => 'filter')); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + echo $this->element('admin/nodes_filter'); + ?> + + create('Node', array('url' => array('controller' => 'nodes', 'action' => 'process'))); ?> + + tableHeaders(array( + '', + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('type'), + $paginator->sort('user_id'), + $paginator->sort('status'), + $paginator->sort('promote'), + //$paginator->sort('created'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($nodes AS $node) { + $actions = $html->link(__('Edit', true), array('action' => 'edit', $node['Node']['id'])); + $actions .= ' ' . $layout->adminRowActions($node['Node']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $node['Node']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $form->checkbox('Node.'.$node['Node']['id'].'.id'), + $node['Node']['id'], + $html->link($node['Node']['title'], array( + 'admin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'type' => $node['Node']['type'], + 'slug' => $node['Node']['slug'], + )), + $node['Node']['type'], + $node['User']['username'], + $layout->status($node['Node']['status']), + $layout->status($node['Node']['promote']), + //$node['Node']['created'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    + +
    + input('Node.action', array( + 'label' => false, + 'options' => array( + 'publish' => __('Publish', true), + 'unpublish' => __('Unpublish', true), + 'promote' => __('Promote', true), + 'unpromote' => __('Unpromote', true), + //'delete' => __('Delete', true), + ), + 'empty' => true, + )); + echo $form->end(__('Submit', true)); + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/nodes/.svn/text-base/admin_links.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_links.ctp.svn-base new file mode 100644 index 0000000..71f6f1c --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_links.ctp.svn-base @@ -0,0 +1,51 @@ +css('admin'); + echo $html->script('jquery/jquery.min'); +?> + + +
    +
    + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + __('Sort by:'); + echo ' ' . $paginator->sort('id'); + echo ', ' . $paginator->sort('title'); + echo ', ' . $paginator->sort('created'); + ?> +
    + +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_translate.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_translate.ctp.svn-base new file mode 100644 index 0000000..40f2875 --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_translate.ctp.svn-base @@ -0,0 +1,33 @@ +script(array('nodes'), false); + if (Configure::read('Writing.wysiwyg')) { + $html->scriptBlock($tinymce->fileBrowserCallBack(), array('inline' => false)); + $html->scriptBlock($tinymce->init('NodeBody'), array('inline' => false)); + } +?> +
    +

    + + create('Node', array('url' => array( + 'action' => 'translate', + 'locale' => $this->params['named']['locale'], + ))); + ?> +
    +
    +
      +
    • +
    + +
    + input('Node.'.$field); + } + ?> +
    +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/admin_translations.ctp.svn-base b/app/views/nodes/.svn/text-base/admin_translations.ctp.svn-base new file mode 100644 index 0000000..19c05b3 --- /dev/null +++ b/app/views/nodes/.svn/text-base/admin_translations.ctp.svn-base @@ -0,0 +1,55 @@ +
    +

    + +
    +
      +
    • + link(__('Translate in a new language', true), array( + 'controller' => 'languages', + 'action'=>'select', + 'nodes', + 'translate', + $node['Node']['id'], + )); + ?> +
    • +
    +
    + + 0) { ?> + + tableHeaders(array( + '', + //__('Id', true), + __('Title', true), + __('Locale', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($translations AS $translation) { + $actions = $html->link(__('Edit', true), array('action' => 'translate', $id, 'locale' => $translation[$runtimeModelAlias]['locale'])); + $actions .= ' ' . $html->link(__('Delete', true), array('action' => 'delete_translation', $translation[$runtimeModelAlias]['locale'], $id), null, __('Are you sure?', true)); + + $rows[] = array( + '', + //$translation[$RuntimeModelAlias]['id'], + $translation[$runtimeModelAlias]['content'], + $translation[$runtimeModelAlias]['locale'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    + ' . __('No translations available.', true) . '

    '; + } + ?> +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/index.ctp.svn-base b/app/views/nodes/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..acda4c9 --- /dev/null +++ b/app/views/nodes/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,29 @@ +
    + params['named'] AS $nn => $nv) { + $paginator->options['url'][$nn] = $nv; + } + } + ?> + + setNode($node); + ?> +
    +

    link($layout->node('title'), $layout->node('url')); ?>

    + nodeInfo(); + echo $layout->nodeBody(); + echo $layout->nodeMoreInfo(); + ?> +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/promoted.ctp.svn-base b/app/views/nodes/.svn/text-base/promoted.ctp.svn-base new file mode 100644 index 0000000..0f82717 --- /dev/null +++ b/app/views/nodes/.svn/text-base/promoted.ctp.svn-base @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/search.ctp.svn-base b/app/views/nodes/.svn/text-base/search.ctp.svn-base new file mode 100644 index 0000000..db76f56 --- /dev/null +++ b/app/views/nodes/.svn/text-base/search.ctp.svn-base @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/term.ctp.svn-base b/app/views/nodes/.svn/text-base/term.ctp.svn-base new file mode 100644 index 0000000..b977936 --- /dev/null +++ b/app/views/nodes/.svn/text-base/term.ctp.svn-base @@ -0,0 +1,31 @@ +
    +

    + + params['named'] AS $nn => $nv) { + $paginator->options['url'][$nn] = $nv; + } + } + ?> + + setNode($node); + ?> +
    +

    link($layout->node('title'), $layout->node('url')); ?>

    + nodeInfo(); + echo $layout->nodeBody(); + echo $layout->nodeMoreInfo(); + ?> +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/.svn/text-base/view.ctp.svn-base b/app/views/nodes/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..c9890cb --- /dev/null +++ b/app/views/nodes/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,23 @@ +setNode($node); ?> +
    +

    node('title'); ?>

    + nodeInfo(); + echo $layout->nodeBody(); + echo $layout->nodeMoreInfo(); + ?> +
    + +
    +node('type')]; + + if ($type['Type']['comment_status'] > 0 && $layout->node('comment_status') > 0) { + echo $this->element('comments'); + } + + if ($type['Type']['comment_status'] == 2 && $layout->node('comment_status') == 2) { + echo $this->element('comments_form'); + } +?> +
    \ No newline at end of file diff --git a/app/views/nodes/admin_add.ctp b/app/views/nodes/admin_add.ctp new file mode 100644 index 0000000..aa5c360 --- /dev/null +++ b/app/views/nodes/admin_add.ctp @@ -0,0 +1,117 @@ +Html->script(array('nodes'), false); ?> +
    +

    + Form->create('Node', array('url' => array('action' => 'add', $typeAlias)));?> +
    +
    +
      +
    • + 0) { ?>
    • +
    • +
    • +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('parent_id', array('type' => 'select', 'options' => $nodes, 'empty' => true)); + echo $this->Form->input('title'); + echo $this->Form->input('slug', array('class' => 'slug')); + echo $this->Form->input('excerpt'); + echo $this->Form->input('body', array('class' => 'content')); + ?> +
    + + 0) { ?> +
    + $taxonomyTree) { + echo $this->Form->input('TaxonomyData.'.$vocabularyId, array( + 'label' => $vocabularies[$vocabularyId]['title'], + 'type' => 'select', + 'multiple' => true, + 'options' => $taxonomyTree, + )); + } + ?> +
    + + + +
    + Form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => array( + '0' => __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ), + 'value' => $type['Type']['comment_status'], + )); + ?> +
    + + +
    +
    + 0) { + foreach ($fields AS $fieldKey => $fieldValue) { + echo $this->Layout->metaField($fieldKey, $fieldValue); + } + } else { + echo $this->Layout->metaField(); + } + ?> +
     
    +
    + +
    + +
    + Form->input('Role.Role'); + ?> +
    + +
    + Form->input('status', array( + 'label' => __('Published', true), + 'checked' => 'checked', + )); + echo $this->Form->input('promote', array( + 'label' => __('Promoted to front page', true), + 'checked' => 'checked', + )); + echo $this->Form->input('user_id'); + echo $this->Form->input('created'); + ?> +
    + Layout->adminTabs(); ?> +
     
    +
    +
    + Form->input('token_key', array( + 'type' => 'hidden', + 'value' => $this->params['_Token']['key'], + )); + ?> +
    + Form->submit(__('Apply', true), array('name' => 'apply')); + echo $this->Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/nodes/admin_add_meta.ctp b/app/views/nodes/admin_add_meta.ctp new file mode 100644 index 0000000..bf5f064 --- /dev/null +++ b/app/views/nodes/admin_add_meta.ctp @@ -0,0 +1,4 @@ +Layout->metaField(); +?> \ No newline at end of file diff --git a/app/views/nodes/admin_create.ctp b/app/views/nodes/admin_create.ctp new file mode 100644 index 0000000..ebb84de --- /dev/null +++ b/app/views/nodes/admin_create.ctp @@ -0,0 +1,12 @@ +
    +

    + +
    + +
    +

    Html->link($type['Type']['title'], array('action' => 'add', $type['Type']['alias'])); ?>

    +

    +
    + +
    +
    \ No newline at end of file diff --git a/app/views/nodes/admin_edit.ctp b/app/views/nodes/admin_edit.ctp new file mode 100644 index 0000000..78cbc92 --- /dev/null +++ b/app/views/nodes/admin_edit.ctp @@ -0,0 +1,114 @@ +Html->script(array('nodes'), false); ?> +
    +

    + + Form->create('Node', array('url' => array('action' => 'edit')));?> +
    +
    +
      +
    • + 0) { ?>
    • +
    • +
    • +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('parent_id', array('type' => 'select', 'options' => $nodes, 'empty' => true)); + echo $this->Form->input('title'); + echo $this->Form->input('slug'); + echo $this->Form->input('excerpt'); + echo $this->Form->input('body', array('class' => 'content')); + ?> +
    + + 0) { ?> +
    + data); + foreach ($taxonomy AS $vocabularyId => $taxonomyTree) { + echo $this->Form->input('TaxonomyData.'.$vocabularyId, array( + 'label' => $vocabularies[$vocabularyId]['title'], + 'type' => 'select', + 'multiple' => true, + 'options' => $taxonomyTree, + 'value' => $taxonomyIds, + )); + } + ?> +
    + + + +
    + Form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => array( + '0' => __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ), + )); + ?> +
    + + +
    +
    + data['Meta'], '{n}.key', '{n}.value'); + $fieldsKeyToId = Set::combine($this->data['Meta'], '{n}.key', '{n}.id'); + if (count($fields) > 0) { + foreach ($fields AS $fieldKey => $fieldValue) { + echo $this->Layout->metaField($fieldKey, $fieldValue, $fieldsKeyToId[$fieldKey]); + } + } + ?> +
     
    +
    + +
    + +
    + Form->input('Role.Role'); + ?> +
    + +
    + Form->input('status', array('label' => __('Published', true))); + echo $this->Form->input('promote', array('label' => __('Promoted to front page', true))); + echo $this->Form->input('user_id'); + echo $this->Form->input('created'); + ?> +
    + Layout->adminTabs(); ?> +
     
    +
    +
    + Form->input('token_key', array( + 'type' => 'hidden', + 'value' => $this->params['_Token']['key'], + )); + ?> + +
    + Form->submit(__('Apply', true), array('name' => 'apply')); + echo $this->Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/nodes/admin_index.ctp b/app/views/nodes/admin_index.ctp new file mode 100644 index 0000000..b4ddfdd --- /dev/null +++ b/app/views/nodes/admin_index.ctp @@ -0,0 +1,92 @@ +Html->script(array('nodes'), false); +?> +
    +

    + +
    +
      +
    • Html->link(__('Create content', true), array('action'=>'create')); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + echo $this->element('admin/nodes_filter'); + ?> + + Form->create('Node', array('url' => array('controller' => 'nodes', 'action' => 'process'))); ?> + + Html->tableHeaders(array( + '', + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('type'), + $paginator->sort('user_id'), + $paginator->sort('status'), + $paginator->sort('promote'), + //$paginator->sort('created'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($nodes AS $node) { + $actions = $this->Html->link(__('Edit', true), array('action' => 'edit', $node['Node']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($node['Node']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $node['Node']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $this->Form->checkbox('Node.'.$node['Node']['id'].'.id'), + $node['Node']['id'], + $this->Html->link($node['Node']['title'], array( + 'admin' => false, + 'controller' => 'nodes', + 'action' => 'view', + 'type' => $node['Node']['type'], + 'slug' => $node['Node']['slug'], + )), + $node['Node']['type'], + $node['User']['username'], + $this->Layout->status($node['Node']['status']), + $this->Layout->status($node['Node']['promote']), + //$node['Node']['created'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    + +
    + Form->input('Node.action', array( + 'label' => false, + 'options' => array( + 'publish' => __('Publish', true), + 'unpublish' => __('Unpublish', true), + 'promote' => __('Promote', true), + 'unpromote' => __('Unpromote', true), + //'delete' => __('Delete', true), + ), + 'empty' => true, + )); + echo $this->Form->end(__('Submit', true)); + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/nodes/admin_links.ctp b/app/views/nodes/admin_links.ctp new file mode 100644 index 0000000..0fc6643 --- /dev/null +++ b/app/views/nodes/admin_links.ctp @@ -0,0 +1,51 @@ +Html->css('admin'); + echo $this->Html->script('jquery/jquery.min'); +?> + + +
    +
    + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + __('Sort by:'); + echo ' ' . $paginator->sort('id'); + echo ', ' . $paginator->sort('title'); + echo ', ' . $paginator->sort('created'); + ?> +
    + +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/admin_translate.ctp b/app/views/nodes/admin_translate.ctp new file mode 100644 index 0000000..abb1090 --- /dev/null +++ b/app/views/nodes/admin_translate.ctp @@ -0,0 +1,33 @@ +Html->script(array('nodes'), false); + if (Configure::read('Writing.wysiwyg')) { + $this->Html->scriptBlock($tinymce->fileBrowserCallBack(), array('inline' => false)); + $this->Html->scriptBlock($tinymce->init('NodeBody'), array('inline' => false)); + } +?> +
    +

    + + Form->create('Node', array('url' => array( + 'action' => 'translate', + 'locale' => $this->params['named']['locale'], + ))); + ?> +
    +
    +
      +
    • +
    + +
    + Form->input('Node.'.$field); + } + ?> +
    +
    +
    + Form->end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/nodes/admin_translations.ctp b/app/views/nodes/admin_translations.ctp new file mode 100644 index 0000000..1728b62 --- /dev/null +++ b/app/views/nodes/admin_translations.ctp @@ -0,0 +1,55 @@ +
    +

    + +
    +
      +
    • + Html->link(__('Translate in a new language', true), array( + 'controller' => 'languages', + 'action'=>'select', + 'nodes', + 'translate', + $node['Node']['id'], + )); + ?> +
    • +
    +
    + + 0) { ?> + + Html->tableHeaders(array( + '', + //__('Id', true), + __('Title', true), + __('Locale', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($translations AS $translation) { + $actions = $this->Html->link(__('Edit', true), array('action' => 'translate', $id, 'locale' => $translation[$runtimeModelAlias]['locale'])); + $actions .= ' ' . $this->Html->link(__('Delete', true), array('action' => 'delete_translation', $translation[$runtimeModelAlias]['locale'], $id), null, __('Are you sure?', true)); + + $rows[] = array( + '', + //$translation[$RuntimeModelAlias]['id'], + $translation[$runtimeModelAlias]['content'], + $translation[$runtimeModelAlias]['locale'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    + ' . __('No translations available.', true) . '

    '; + } + ?> +
    \ No newline at end of file diff --git a/app/views/nodes/index.ctp b/app/views/nodes/index.ctp new file mode 100644 index 0000000..38a8c25 --- /dev/null +++ b/app/views/nodes/index.ctp @@ -0,0 +1,29 @@ +
    + params['named'] AS $nn => $nv) { + $paginator->options['url'][$nn] = $nv; + } + } + ?> + + Layout->setNode($node); + ?> +
    +

    Html->link($this->Layout->node('title'), $this->Layout->node('url')); ?>

    + Layout->nodeInfo(); + echo $this->Layout->nodeBody(); + echo $this->Layout->nodeMoreInfo(); + ?> +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/json/.svn/entries b/app/views/nodes/json/.svn/entries new file mode 100644 index 0000000..dbbf9d4 --- /dev/null +++ b/app/views/nodes/json/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/nodes/json +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_delete_meta.ctp +file + + + + +2010-09-04T08:55:28.000000Z +4168d5ab81de72c0da2b53274c70a1d7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +79 + diff --git a/app/views/nodes/json/.svn/text-base/admin_delete_meta.ctp.svn-base b/app/views/nodes/json/.svn/text-base/admin_delete_meta.ctp.svn-base new file mode 100644 index 0000000..626a825 --- /dev/null +++ b/app/views/nodes/json/.svn/text-base/admin_delete_meta.ctp.svn-base @@ -0,0 +1,4 @@ + $success); + echo $js->object($data); +?> \ No newline at end of file diff --git a/app/views/nodes/json/admin_delete_meta.ctp b/app/views/nodes/json/admin_delete_meta.ctp new file mode 100644 index 0000000..41be197 --- /dev/null +++ b/app/views/nodes/json/admin_delete_meta.ctp @@ -0,0 +1,4 @@ + $success); + echo $this->Js->object($data); +?> \ No newline at end of file diff --git a/app/views/nodes/promoted.ctp b/app/views/nodes/promoted.ctp new file mode 100644 index 0000000..9a49401 --- /dev/null +++ b/app/views/nodes/promoted.ctp @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/app/views/nodes/rss/.svn/entries b/app/views/nodes/rss/.svn/entries new file mode 100644 index 0000000..bf6f887 --- /dev/null +++ b/app/views/nodes/rss/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/nodes/rss +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +254bc66740b52c59f1aeb1923e367fec +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +423 + +term.ctp +file + + + + +2010-09-04T08:55:28.000000Z +254bc66740b52c59f1aeb1923e367fec +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +423 + +promoted.ctp +file + + + + +2010-09-04T08:55:28.000000Z +254bc66740b52c59f1aeb1923e367fec +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +423 + diff --git a/app/views/nodes/rss/.svn/text-base/index.ctp.svn-base b/app/views/nodes/rss/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/rss/.svn/text-base/promoted.ctp.svn-base b/app/views/nodes/rss/.svn/text-base/promoted.ctp.svn-base new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/.svn/text-base/promoted.ctp.svn-base @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/rss/.svn/text-base/term.ctp.svn-base b/app/views/nodes/rss/.svn/text-base/term.ctp.svn-base new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/.svn/text-base/term.ctp.svn-base @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/rss/index.ctp b/app/views/nodes/rss/index.ctp new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/index.ctp @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/rss/promoted.ctp b/app/views/nodes/rss/promoted.ctp new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/promoted.ctp @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/rss/term.ctp b/app/views/nodes/rss/term.ctp new file mode 100644 index 0000000..45adbb5 --- /dev/null +++ b/app/views/nodes/rss/term.ctp @@ -0,0 +1,13 @@ + $item['Node']['title'], + 'link' => Router::url($item['Node']['url'], true), + 'guid' => Router::url($item['Node']['url'], true), + 'description' => $item['Node']['body'], + 'pubDate' => $item['Node']['created'], + ); + } + + $this->set('items', $rss->items($nodes, 'rss_transform')); +?> \ No newline at end of file diff --git a/app/views/nodes/search.ctp b/app/views/nodes/search.ctp new file mode 100644 index 0000000..2b16fd8 --- /dev/null +++ b/app/views/nodes/search.ctp @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/app/views/nodes/term.ctp b/app/views/nodes/term.ctp new file mode 100644 index 0000000..182ab83 --- /dev/null +++ b/app/views/nodes/term.ctp @@ -0,0 +1,31 @@ +
    +

    + + params['named'] AS $nn => $nv) { + $paginator->options['url'][$nn] = $nv; + } + } + ?> + + Layout->setNode($node); + ?> +
    +

    Html->link($this->Layout->node('title'), $this->Layout->node('url')); ?>

    + Layout->nodeInfo(); + echo $this->Layout->nodeBody(); + echo $this->Layout->nodeMoreInfo(); + ?> +
    + + +
    numbers(); ?>
    +
    \ No newline at end of file diff --git a/app/views/nodes/view.ctp b/app/views/nodes/view.ctp new file mode 100644 index 0000000..9417112 --- /dev/null +++ b/app/views/nodes/view.ctp @@ -0,0 +1,23 @@ +Layout->setNode($node); ?> +
    +

    Layout->node('title'); ?>

    + Layout->nodeInfo(); + echo $this->Layout->nodeBody(); + echo $this->Layout->nodeMoreInfo(); + ?> +
    + +
    +Layout->node('type')]; + + if ($type['Type']['comment_status'] > 0 && $this->Layout->node('comment_status') > 0) { + echo $this->element('comments'); + } + + if ($type['Type']['comment_status'] == 2 && $this->Layout->node('comment_status') == 2) { + echo $this->element('comments_form'); + } +?> +
    \ No newline at end of file diff --git a/app/views/opcaos/.svn/entries b/app/views/opcaos/.svn/entries new file mode 100644 index 0000000..ea2f5e6 --- /dev/null +++ b/app/views/opcaos/.svn/entries @@ -0,0 +1,300 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/opcaos +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +view.ctp +file + + + + +2010-05-08T01:44:08.000000Z +a3a04f8f8079e2a18a47265d1edbef33 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1430 + +admin_edit.ctp +file + + + + +2010-05-08T01:44:08.000000Z +1755ebe46baa333e1311dd98b242bbed +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +666 + +admin_index.ctp +file + + + + +2010-05-08T01:44:08.000000Z +b18466bf384e1817fe35f71e0bfb1bf8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1843 + +admin_add.ctp +file + + + + +2010-05-08T01:44:08.000000Z +4543706970d7b06eba0c6c649ccd448d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +488 + +admin_view.ctp +file + + + + +2010-05-08T01:44:08.000000Z +ab01c51f09b42db1eba24f62ac190a12 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1408 + +edit.ctp +file + + + + +2010-05-08T01:44:08.000000Z +1755ebe46baa333e1311dd98b242bbed +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +666 + +index.ctp +file + + + + +2010-05-08T01:44:08.000000Z +424da12427c1cc930ea37b4ad0c57133 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1851 + +add.ctp +file + + + + +2010-05-08T01:44:08.000000Z +22b43abf6e0a22d8a1dd31f19ffc9b4e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +459 + diff --git a/app/views/opcaos/.svn/text-base/add.ctp.svn-base b/app/views/opcaos/.svn/text-base/add.ctp.svn-base new file mode 100644 index 0000000..6fcedf9 --- /dev/null +++ b/app/views/opcaos/.svn/text-base/add.ctp.svn-base @@ -0,0 +1,17 @@ +
    +create('Opcao');?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/admin_add.ctp.svn-base b/app/views/opcaos/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..c2a2f58 --- /dev/null +++ b/app/views/opcaos/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,18 @@ +
    +create('Opcao' );?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    +data ); ?> \ No newline at end of file diff --git a/app/views/opcaos/.svn/text-base/admin_edit.ctp.svn-base b/app/views/opcaos/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcaos/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/admin_index.ctp.svn-base b/app/views/opcaos/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..c139a5c --- /dev/null +++ b/app/views/opcaos/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opco']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opco']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opco']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opco']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/admin_view.ctp.svn-base b/app/views/opcaos/.svn/text-base/admin_view.ctp.svn-base new file mode 100644 index 0000000..f78dff8 --- /dev/null +++ b/app/views/opcaos/.svn/text-base/admin_view.ctp.svn-base @@ -0,0 +1,33 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/edit.ctp.svn-base b/app/views/opcaos/.svn/text-base/edit.ctp.svn-base new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcaos/.svn/text-base/edit.ctp.svn-base @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/index.ctp.svn-base b/app/views/opcaos/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..14de99b --- /dev/null +++ b/app/views/opcaos/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opcao']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/.svn/text-base/view.ctp.svn-base b/app/views/opcaos/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..692a0bd --- /dev/null +++ b/app/views/opcaos/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,34 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    + \ No newline at end of file diff --git a/app/views/opcaos/add.ctp b/app/views/opcaos/add.ctp new file mode 100644 index 0000000..6fcedf9 --- /dev/null +++ b/app/views/opcaos/add.ctp @@ -0,0 +1,17 @@ +
    +create('Opcao');?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/admin_add.ctp b/app/views/opcaos/admin_add.ctp new file mode 100644 index 0000000..c2a2f58 --- /dev/null +++ b/app/views/opcaos/admin_add.ctp @@ -0,0 +1,18 @@ +
    +create('Opcao' );?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    +data ); ?> \ No newline at end of file diff --git a/app/views/opcaos/admin_edit.ctp b/app/views/opcaos/admin_edit.ctp new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcaos/admin_edit.ctp @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/admin_index.ctp b/app/views/opcaos/admin_index.ctp new file mode 100644 index 0000000..c139a5c --- /dev/null +++ b/app/views/opcaos/admin_index.ctp @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opco']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opco']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opco']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opco']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/admin_view.ctp b/app/views/opcaos/admin_view.ctp new file mode 100644 index 0000000..f78dff8 --- /dev/null +++ b/app/views/opcaos/admin_view.ctp @@ -0,0 +1,33 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/edit.ctp b/app/views/opcaos/edit.ctp new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcaos/edit.ctp @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcaos/index.ctp b/app/views/opcaos/index.ctp new file mode 100644 index 0000000..14de99b --- /dev/null +++ b/app/views/opcaos/index.ctp @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opcao']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcaos/view.ctp b/app/views/opcaos/view.ctp new file mode 100644 index 0000000..692a0bd --- /dev/null +++ b/app/views/opcaos/view.ctp @@ -0,0 +1,34 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    + \ No newline at end of file diff --git a/app/views/opcoes/.svn/entries b/app/views/opcoes/.svn/entries new file mode 100644 index 0000000..7f22c0a --- /dev/null +++ b/app/views/opcoes/.svn/entries @@ -0,0 +1,300 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/opcoes +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +view.ctp +file + + + + +2010-04-28T16:16:40.000000Z +a3a04f8f8079e2a18a47265d1edbef33 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1430 + +admin_edit.ctp +file + + + + +2010-11-16T20:10:21.828125Z +eb3b05fbaf5a405fe4cae74d07f3003f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +869 + +admin_index.ctp +file + + + + +2010-05-01T06:56:18.000000Z +b18466bf384e1817fe35f71e0bfb1bf8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1843 + +admin_add.ctp +file + + + + +2010-11-16T20:13:29.859375Z +4901dc646aaa2b7c5b41eec4e624f7b6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +644 + +admin_view.ctp +file + + + + +2010-04-28T16:16:40.000000Z +ab01c51f09b42db1eba24f62ac190a12 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1408 + +edit.ctp +file + + + + +2010-04-28T16:16:40.000000Z +1755ebe46baa333e1311dd98b242bbed +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +666 + +index.ctp +file + + + + +2010-04-28T16:16:40.000000Z +424da12427c1cc930ea37b4ad0c57133 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1851 + +add.ctp +file + + + + +2010-05-01T07:07:42.000000Z +22b43abf6e0a22d8a1dd31f19ffc9b4e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +459 + diff --git a/app/views/opcoes/.svn/text-base/add.ctp.svn-base b/app/views/opcoes/.svn/text-base/add.ctp.svn-base new file mode 100644 index 0000000..6fcedf9 --- /dev/null +++ b/app/views/opcoes/.svn/text-base/add.ctp.svn-base @@ -0,0 +1,17 @@ +
    +create('Opcao');?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcoes/.svn/text-base/admin_add.ctp.svn-base b/app/views/opcoes/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..a3fbb8d --- /dev/null +++ b/app/views/opcoes/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,20 @@ +
    + +
    +
      +
    • link(__('List Produtos', true), array( 'controller' => 'produtos', 'action' => 'view', $form->value( 'Opcao.produtos_id' ) ) );?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    + + +create('Opcao' );?> +
    + input('produtos_id', array( 'type' => 'hidden' ) ); + echo $form->input('chave', array( 'readonly' => 'readonly', 'disabled' => 'disabled' )); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    diff --git a/app/views/opcoes/.svn/text-base/admin_edit.ctp.svn-base b/app/views/opcoes/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..88bedc4 --- /dev/null +++ b/app/views/opcoes/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,23 @@ +

    + + +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    + + +
    +create('Opcao', array( 'url' => array( 'controller' => 'opcoes', 'action' => 'edit', $form->value( 'Opcao.id' ) ) ) );?> +
    + input('id'); + echo $form->input('produtos_id', array( 'type' => 'hidden' ) ); + echo $form->input('chave', array( 'readonly' => 'readonly', 'disabled' => 'disabled' )); + echo $form->input('valor'); + ?> +
    +end('Salvar alterações');?> +
    diff --git a/app/views/opcoes/.svn/text-base/admin_index.ctp.svn-base b/app/views/opcoes/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..c139a5c --- /dev/null +++ b/app/views/opcoes/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opco']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opco']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opco']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opco']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcoes/.svn/text-base/admin_view.ctp.svn-base b/app/views/opcoes/.svn/text-base/admin_view.ctp.svn-base new file mode 100644 index 0000000..f78dff8 --- /dev/null +++ b/app/views/opcoes/.svn/text-base/admin_view.ctp.svn-base @@ -0,0 +1,33 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcoes/.svn/text-base/edit.ctp.svn-base b/app/views/opcoes/.svn/text-base/edit.ctp.svn-base new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcoes/.svn/text-base/edit.ctp.svn-base @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcoes/.svn/text-base/index.ctp.svn-base b/app/views/opcoes/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..14de99b --- /dev/null +++ b/app/views/opcoes/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opcao']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcoes/.svn/text-base/view.ctp.svn-base b/app/views/opcoes/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..692a0bd --- /dev/null +++ b/app/views/opcoes/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,34 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    + \ No newline at end of file diff --git a/app/views/opcoes/add.ctp b/app/views/opcoes/add.ctp new file mode 100644 index 0000000..6fcedf9 --- /dev/null +++ b/app/views/opcoes/add.ctp @@ -0,0 +1,17 @@ +
    +create('Opcao');?> +
    + + input('produtos_id', array( 'type' => 'text' ) ); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcoes/admin_add.ctp b/app/views/opcoes/admin_add.ctp new file mode 100644 index 0000000..a3fbb8d --- /dev/null +++ b/app/views/opcoes/admin_add.ctp @@ -0,0 +1,20 @@ +
    + +
    +
      +
    • link(__('List Produtos', true), array( 'controller' => 'produtos', 'action' => 'view', $form->value( 'Opcao.produtos_id' ) ) );?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    + + +create('Opcao' );?> +
    + input('produtos_id', array( 'type' => 'hidden' ) ); + echo $form->input('chave', array( 'readonly' => 'readonly', 'disabled' => 'disabled' )); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    diff --git a/app/views/opcoes/admin_edit.ctp b/app/views/opcoes/admin_edit.ctp new file mode 100644 index 0000000..88bedc4 --- /dev/null +++ b/app/views/opcoes/admin_edit.ctp @@ -0,0 +1,23 @@ +

    + + +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    + + +
    +create('Opcao', array( 'url' => array( 'controller' => 'opcoes', 'action' => 'edit', $form->value( 'Opcao.id' ) ) ) );?> +
    + input('id'); + echo $form->input('produtos_id', array( 'type' => 'hidden' ) ); + echo $form->input('chave', array( 'readonly' => 'readonly', 'disabled' => 'disabled' )); + echo $form->input('valor'); + ?> +
    +end('Salvar alterações');?> +
    diff --git a/app/views/opcoes/admin_index.ctp b/app/views/opcoes/admin_index.ctp new file mode 100644 index 0000000..450d350 --- /dev/null +++ b/app/views/opcoes/admin_index.ctp @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opcao']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/opcoes/admin_view.ctp b/app/views/opcoes/admin_view.ctp new file mode 100644 index 0000000..f78dff8 --- /dev/null +++ b/app/views/opcoes/admin_view.ctp @@ -0,0 +1,33 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcoes/edit.ctp b/app/views/opcoes/edit.ctp new file mode 100644 index 0000000..67de29f --- /dev/null +++ b/app/views/opcoes/edit.ctp @@ -0,0 +1,19 @@ +
    +create('Opcao');?> +
    + + input('id'); + echo $form->input('produtos_id'); + echo $form->input('chave'); + echo $form->input('valor'); + ?> +
    +end('Submit');?> +
    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Opcao.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Opcao.id'))); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index'));?>
    • +
    +
    diff --git a/app/views/opcoes/index.ctp b/app/views/opcoes/index.ctp new file mode 100644 index 0000000..14de99b --- /dev/null +++ b/app/views/opcoes/index.ctp @@ -0,0 +1,56 @@ +
    +

    +

    +counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) +)); +?>

    + + + + + + + + + + > + + + + + + + +
    sort('id');?>sort('produtos_id');?>sort('chave');?>sort('valor');?>
    + + + + + + + + + link(__('View', true), array('action' => 'view', $opcao['Opcao']['id'])); ?> + link(__('Edit', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?> + link(__('Delete', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?> +
    +
    +
    + prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> + | numbers();?> + next(__('next', true).' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
      +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    diff --git a/app/views/opcoes/view.ctp b/app/views/opcoes/view.ctp new file mode 100644 index 0000000..692a0bd --- /dev/null +++ b/app/views/opcoes/view.ctp @@ -0,0 +1,34 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Opcao', true), array('action' => 'edit', $opcao['Opcao']['id'])); ?>
    • +
    • link(__('Delete Opcao', true), array('action' => 'delete', $opcao['Opcao']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $opcao['Opcao']['id'])); ?>
    • +
    • link(__('List Opcoes', true), array('action' => 'index')); ?>
    • +
    • link(__('New Opcao', true), array('action' => 'add')); ?>
    • +
    +
    + \ No newline at end of file diff --git a/app/views/produtos/.svn/entries b/app/views/produtos/.svn/entries new file mode 100644 index 0000000..827d268 --- /dev/null +++ b/app/views/produtos/.svn/entries @@ -0,0 +1,643 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/produtos +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +botoes.ctp +file + + + + +2010-10-12T02:49:07.500000Z +b163721a210bfc355e248d41001534f4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2243 + +admin_edit.ctp +file +8 + + + +2010-11-25T21:58:33.203125Z +78961b232117682e33e68aafa0f09466 +2010-11-25T21:59:51.712898Z +8 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8044 + +botoes(2).ctp +file + + + + +2010-11-16T14:19:02.781250Z +b163721a210bfc355e248d41001534f4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2243 + +admin_add.ctp +file + + + + +2010-11-16T20:45:31.984375Z +3a92ccc70cc609d6325a9545e21ddcd3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8013 + +admin_edit(2).ctp +file + + + + +2010-11-16T14:19:02.765625Z +bb5abd31de7d1e8f168c7dbb12fff828 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4742 + +admin_add(2).ctp +file + + + + +2010-11-16T20:14:07.234375Z +e3a26c8332aa6a49afdb3c9e8c6f9d72 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4494 + +admin_botoes.ctp +file + + + + +2010-10-12T03:14:35.640625Z +d058b3af68910773c08d412b2db5b70a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4307 + +frete.ctp +file + + + + +2010-11-17T17:10:49.029963Z +5aa1b88c5108d31d9f3d0f32997f049e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7849 + +admin_botoes(2).ctp +file + + + + +2010-11-16T14:19:02.765625Z +d058b3af68910773c08d412b2db5b70a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4307 + +index.ctp +file + + + + +2010-11-16T14:20:58.234375Z +12ede359d178ffa329ab8f311b0f8fee +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2725 + +frete(2).ctp +file + + + + +2010-11-16T14:19:02.796875Z +b5bac38d6e877ab69a6483a7b9579b19 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6138 + +admin_delete.ctp +file + + + + +2010-04-28T13:22:34.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + +view.ctp +file + + + + +2010-11-16T14:20:58.234375Z +0c8bf6a40770fa2c3548aa9bd3e8a863 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3698 + +xml +dir + +admin_delete(2).ctp +file + + + + +2010-11-16T14:19:02.765625Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + +admin_index.ctp +file + + + + +2010-11-16T22:18:09.812500Z +4e7bc2934870550591ce84d6097705df +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3606 + +admin_view.ctp +file + + + + +2010-11-16T22:16:20.031250Z +eed0a8e38773bb85034febdbca6b72d1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +10359 + +edit.ctp +file + + + + +2010-11-16T14:20:58.250000Z +b988b726c737d70a642a8f679f84fe22 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1267 + +add.ctp +file + + + + +2010-11-16T14:20:58.234375Z +50af8683d0d577f4a6f2a5a8c39af206 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1004 + diff --git a/app/views/produtos/.svn/text-base/add.ctp.svn-base b/app/views/produtos/.svn/text-base/add.ctp.svn-base new file mode 100644 index 0000000..3a44c13 --- /dev/null +++ b/app/views/produtos/.svn/text-base/add.ctp.svn-base @@ -0,0 +1,23 @@ +
    +Form->create('Produto');?> +
    + + Form->input('users_id'); + echo $this->Form->input('nome'); + echo $this->Form->input('flag'); + ?> +
    +Form->end(__('Submit', true));?> +
    +
    +

    +
      + +
    • Html->link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_add(2).ctp.svn-base b/app/views/produtos/.svn/text-base/admin_add(2).ctp.svn-base new file mode 100644 index 0000000..be03294 --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_add(2).ctp.svn-base @@ -0,0 +1,181 @@ +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    +create('Produto');?> + + +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + + + input('nome'); ?> + + + input('cep', array( 'label' => 'Cep' ) ); ?> + + + + campo( $form->value( 'Produto.id' ), 'peso' ); ?> + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '(Selecione o peso aproximado do produto)' ) ); ?> + + + + input('preco', array( 'label' => 'Preço' ) ); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + input('altura', array( 'label' => 'Altura' ) ); ?> +
    + + +
    + +
    + +
    + +
    + input('largura', array( 'label' => 'Largura' ) ); ?> +
    + +
    + input('comprimento', array( 'label' => 'Comprimento' ) ); ?> +
    + +
    + + +
    + +
    + + +
    + + + + + + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); + echo $form->input('nome'); + + + //echo $form->input('produtos_id'); + echo $form->input('cep', array( 'label' => 'Cep' ) ); + + echo $form->input('peso', array( 'label' => 'Peso' ) ); + + echo $form->input('preco', array( 'label' => 'Preço' ) ); + + echo $form->input('largura', array( 'label' => 'Largura' ) ); + + echo $form->input('altura', array( 'label' => 'Altura' ) ); + + echo $form->input('comprimento', array( 'label' => 'Comprimento' ) ); + */ + ?> +
    +end('Cadastrar produto');?> +
    + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_add.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..12fe9cc --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,236 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> + + +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    +Form->create('Produto');?> + + +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + Form->input('users_id' ); ?> + + + Form->input('nome', array( 'label' => 'Nome do produto', 'after' => __( '

    (Informe o nome do produto)

    ', true) )); ?> + + + Form->input('cep', array( 'value' => $cep, 'after' => __( '

    (Informe o CEP de onde o produto será enviado)

    ', true) )); ?> + + + + Form->input('peso', array( 'value' => $peso, 'type' => 'select', 'options' => $arrOptions, 'class' => 'campo', 'after' => __( '

    (Selecione o peso aproximado do produto)

    ', true) )); ?> + + + + Form->input('preco', array( 'value' => $preco, 'after' => __( '

    (Digite o preço de venda do produto)

    ', true) )); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas da embalagem de envio devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + Form->input('altura', array( 'value' => $altura )); ?> +
    + + +
    + +
    + +
    + +
    + Form->input('largura', array( 'value' => $largura )); ?> +
    + +
    + Form->input('comprimento', array( 'value' => $comprimento )); ?> +
    + +
    + + +
    + +
    + + + +
    + + + +
    + + + + +

    +
    +

    As opções abaixo permitem que você habilite ou desabilite formas de envio, exiba informações adicionais e selecione fotos do produto.

    +
    + Form->input('envio_local', array( 'value' => $envio_local, 'options' => array( 1 => 'Sim, pode retirar no local', 0 => 'Não, não é possível retirar no local' ), 'label' => 'Pode retirar no local?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção retirar no local não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_pac', array( 'value' => $envio_pac, 'options' => array( 1 => 'Sim, envio PAC', 0 => 'Não, não envio PAC' ), 'label' => 'Envia por PAC?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção PAC não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedex', array( 'value' => $envio_sedex, 'options' => array( 1 => 'Sim, envio SEDEX', 0 => 'Não, não envio SEDEX' ), 'label' => 'Envia por SEDEX convencional?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX convencional não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedexacobrar', array( 'value' => $envio_sedexacobrar, 'options' => array( 1 => 'Sim, envio SEDEX a cobrar', 0 => 'Não, não envio SEDEX a cobrar' ), 'label' => 'Envia por SEDEX a cobrar?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX a cobrar não será exibida no momento do cálculo de frete.)

    ', true) )); + + echo $this->Form->input('envio_maximo', array( 'value' => $envio_maximo, 'after' => __('

    (Neste campo você poderá informar quantas unidades deste produto podem ser enviado numa encomenda.)

    ', true) )); + ?> + + +Form->end(__('Adicionar produto', true));?> +
    + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_botoes(2).ctp.svn-base b/app/views/produtos/.svn/text-base/admin_botoes(2).ctp.svn-base new file mode 100644 index 0000000..ca7e30d --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_botoes(2).ctp.svn-base @@ -0,0 +1,96 @@ +

    Cores e estilos de botões

    + +

    Você pode escolher entre os diversos estilos de botões, clique no link Código HTML para pegar o código para cálculo de frete + que poderá ser utilizado no seu site ou blog e sites de leilões como Mercado livre (e diversos outros).

    + +

    Você pode testar os botões de cálculo clicando neles, o funcionamento será exatamente como se o botão estivesse em seu site ou anúncio de leilão.

    + +
    + +
    +

    Precisa de ajuda para adicionar o botão de cálculo de frete em seu anúncio no Mercado Livre? Veja nossa sessão de ajuda, link( 'como adicionar botão de cálculo no mercado livre', array( 'admin' => false, 'controller' => 'nodes', 'action' => 'view', 'type' => 'blog', 'slug' => 'como-inserir-botao-calculo-de-frete-no-mercado-livre' ) ); ?>.

    +
    + + +
    +

    Contas premium tem acesso ao API que permite utilizar o sistema de cálculo de frete transparente, onde em nenhum momento seus + clientes verão que o serviço de cálculo é fornecido por nossa empresa.

    +
    + + +
    + + + +
    +
      +
    • link( 'Todas as cores', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:preto' ) ); ?>
    • +
    +
    + + +
    + /calcular/frete//" target="_blank">image( $strBtnImagem ) ); ?> + + */ + ?> +
    + link( $html->image( $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + + + + + +
    Código HTML
    + link( $html->image( $server . $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + ">Código JavaScript
    */ ?> + + + + +
    + "; + echo "

    Botões indisponíveis neste momento.

    "; + echo "

    Tente novamente dentro de alguns instantes

    "; + } + //pr( $botoes ); + + ?> + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_botoes.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_botoes.ctp.svn-base new file mode 100644 index 0000000..ca7e30d --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_botoes.ctp.svn-base @@ -0,0 +1,96 @@ +

    Cores e estilos de botões

    + +

    Você pode escolher entre os diversos estilos de botões, clique no link Código HTML para pegar o código para cálculo de frete + que poderá ser utilizado no seu site ou blog e sites de leilões como Mercado livre (e diversos outros).

    + +

    Você pode testar os botões de cálculo clicando neles, o funcionamento será exatamente como se o botão estivesse em seu site ou anúncio de leilão.

    + +
    + +
    +

    Precisa de ajuda para adicionar o botão de cálculo de frete em seu anúncio no Mercado Livre? Veja nossa sessão de ajuda, link( 'como adicionar botão de cálculo no mercado livre', array( 'admin' => false, 'controller' => 'nodes', 'action' => 'view', 'type' => 'blog', 'slug' => 'como-inserir-botao-calculo-de-frete-no-mercado-livre' ) ); ?>.

    +
    + + +
    +

    Contas premium tem acesso ao API que permite utilizar o sistema de cálculo de frete transparente, onde em nenhum momento seus + clientes verão que o serviço de cálculo é fornecido por nossa empresa.

    +
    + + +
    + + + +
    +
      +
    • link( 'Todas as cores', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:preto' ) ); ?>
    • +
    +
    + + +
    + /calcular/frete//" target="_blank">image( $strBtnImagem ) ); ?> + + */ + ?> +
    + link( $html->image( $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + + + + + +
    Código HTML
    + link( $html->image( $server . $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + ">Código JavaScript
    */ ?> + + + + +
    + "; + echo "

    Botões indisponíveis neste momento.

    "; + echo "

    Tente novamente dentro de alguns instantes

    "; + } + //pr( $botoes ); + + ?> + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_delete(2).ctp.svn-base b/app/views/produtos/.svn/text-base/admin_delete(2).ctp.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/produtos/.svn/text-base/admin_delete.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_delete.ctp.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/produtos/.svn/text-base/admin_edit(2).ctp.svn-base b/app/views/produtos/.svn/text-base/admin_edit(2).ctp.svn-base new file mode 100644 index 0000000..0f2a799 --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_edit(2).ctp.svn-base @@ -0,0 +1,170 @@ +
    + + +

    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Produto.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Produto.id'))); ?>
    • +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    +
    + + + + +create('Produto');?> + + input('id'); ?> + +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + input('users_id' ); ?> + + + input('nome'); ?> + + + input('cep', array( 'label' => 'Cep', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'cep' ) ) ); ?> + input('cep', array( 'label' => 'Cep' ) ); ?> + + + + + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + + input('preco', array( 'label' => 'Preço', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'preco' ) ) ); ?> + input('preco', array( 'label' => 'Preço' ) ); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + input('altura', array( 'label' => 'Altura' ) ); ?> + input('altura', array( 'label' => 'Altura', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'altura' ) ) ); ?> +
    + + +
    + +
    + +
    + +
    + input('largura', array( 'label' => 'Largura', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'largura' ) ) ); ?> + input('largura', array( 'label' => 'Largura' ) ); ?> +
    + +
    + input('comprimento', array( 'label' => 'Comprimento', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'comprimento' ) ) ); ?> + input('comprimento', array( 'label' => 'Comprimento' ) ); ?> +
    + +
    + + +
    + +
    + + +
    + + + + + + + +
    +end('Salvar alterações');?> +
    + + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); + +debug( $produtos ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_edit.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..3a27b44 --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,236 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> + + +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    +Form->create('Produto');?> + + input('id'); ?> +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + Form->input('users_id' ); ?> + + + Form->input('nome', array( 'label' => 'Nome do produto', 'after' => __( '

    (Informe o nome do produto)

    ', true) )); ?> + + + Form->input('cep', array( 'value' => $cep, 'after' => __( '

    (Informe o CEP de onde o produto será enviado)

    ', true) )); ?> + + + + Form->input('peso', array( 'value' => $peso, 'type' => 'select', 'options' => $arrOptions, 'class' => 'campo', 'after' => __( '

    (Selecione o peso aproximado do produto)

    ', true) )); ?> + + + + Form->input('preco', array( 'value' => $preco, 'after' => __( '

    (Digite o preço de venda do produto)

    ', true) )); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas da embalagem de envio devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + Form->input('altura', array( 'value' => $altura )); ?> +
    + + +
    + +
    + +
    + +
    + Form->input('largura', array( 'value' => $largura )); ?> +
    + +
    + Form->input('comprimento', array( 'value' => $comprimento )); ?> +
    + +
    + + +
    + +
    + + + +
    + + + +
    + + + + +

    +
    +

    As opções abaixo permitem que você habilite ou desabilite formas de envio, exiba informações adicionais e selecione fotos do produto.

    +
    + Form->input('envio_local', array( 'value' => $envio_local, 'options' => array( 1 => 'Sim, pode retirar no local', 0 => 'Não, não é possível retirar no local' ), 'label' => 'Pode retirar no local?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção retirar no local não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_pac', array( 'value' => $envio_pac, 'options' => array( 1 => 'Sim, envio PAC', 0 => 'Não, não envio PAC' ), 'label' => 'Envia por PAC?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção PAC não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedex', array( 'value' => $envio_sedex, 'options' => array( 1 => 'Sim, envio SEDEX', 0 => 'Não, não envio SEDEX' ), 'label' => 'Envia por SEDEX convencional?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX convencional não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedexacobrar', array( 'value' => $envio_sedexacobrar, 'options' => array( 1 => 'Sim, envio SEDEX a cobrar', 0 => 'Não, não envio SEDEX a cobrar' ), 'label' => 'Envia por SEDEX a cobrar?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX a cobrar não será exibida no momento do cálculo de frete.)

    ', true) )); + + echo $this->Form->input('envio_maximo', array( 'value' => $envio_maximo, 'after' => __('

    (Neste campo você poderá informar quantas unidades deste produto podem ser enviado numa encomenda.)

    ', true) )); + ?> + + +Form->end(__('Adicionar produto', true));?> +
    + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_index.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..07e33f3 --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,103 @@ +
    + + + + +
    + + + + params['named']['flag'] ) && $this->params['named']['flag'] == 2 ): + ?> +
    +

    Recomendamos que você teste o cálculo de frete para verificar se está funcionando corretamente. É possível que você cadastre informações incorretas e isto + gere problemas aos futuros compradores no momento que eles forem calcular o frete de seu produto.

    +
    + + + + +
    + + + + + +

    +
    +
      +
    • link(__('New Produto', true), array( 'controller' => 'produtos', 'action' => 'add')); ?>
    • +
    • link(__('Produtos ativos', true), array( 'controller' => 'produtos', 'action' => 'index', 'flag:1' ) ); ?>
    • +
    • link(__('Produtos excluídos', true), array( 'controller' => 'produtos', 'action' => 'index', 'flag:0' ) ); ?>
    • +
    +
    + + + + + + + + + + + + + + > + + + + + + + + +
    sort('id');?>sort('users_id');?>sort('nome');?>sort('created');?>sort('flag');?>
    + + + link($produto['User']['username'], array('controller' => 'users', 'action' => 'reset_password', $produto['User']['id'])); ?> + + + + + + status( $produto['Produto']['flag'] ); ?> + + link(__('Calcular frete', true), array( 'controller' => 'produtos', 'admin' => false, 'action' => 'frete', $produto['Produto']['id'], Inflector::slug( low( $produto['Produto']['nome'] ) ) ), array( 'target' => '_blank' ) ); ?> + link(__('Botões de cálculo', true), array( 'controller' => 'produtos', 'action' => 'botoes', $produto['Produto']['id'], Inflector::slug( low( $produto['Produto']['nome'] ) ) ) ); ?> + link(__('View', true), array( 'controller' => 'produtos', 'action' => 'view', $produto['Produto']['id'])); ?> + link(__('Edit', true), array( 'controller' => 'produtos', 'action' => 'edit', $produto['Produto']['id'])); ?> + link(__('Delete', true), array( 'controller' => 'produtos', 'action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?> +
    + + + + + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    + + +
    + + + + + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/admin_view.ctp.svn-base b/app/views/produtos/.svn/text-base/admin_view.ctp.svn-base new file mode 100644 index 0000000..6c97916 --- /dev/null +++ b/app/views/produtos/.svn/text-base/admin_view.ctp.svn-base @@ -0,0 +1,257 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $produto['Opcao'] ) ) + { + + foreach ( $produto['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && empty( $opcao['valor'] ) ): $produto_imagem_null = __( "Não foram adicionadas imagens do produto", true ); endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> +
    +

    + + + + +
    +
      +
    • link(__('Edit Produto', true), array('action' => 'edit', $produto['Produto']['id'])); ?>
    • +
    • link(__('Delete Produto', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?>
    • +
    • link(__('List Produtos', true), array('action' => 'index')); ?>
    • +
    • link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + + + + +
    + > + > + +   + + > + > + link($produto['User']['username'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    + + +

    + + + +
    +
      +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + + + +
    + + + > + > + link( $cep, array( 'controller' => 'opcoes', 'action' => 'edit', $cep, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $peso, array( 'controller' => 'opcoes', 'action' => 'edit', $peso, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $preco, array( 'controller' => 'opcoes', 'action' => 'edit', $preco, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $largura, array( 'controller' => 'opcoes', 'action' => 'edit', $largura, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $altura, array( 'controller' => 'opcoes', 'action' => 'edit', $altura, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $comprimento, array( 'controller' => 'opcoes', 'action' => 'edit', $comprimento, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_local ))? "Não, não é possível retirar no local": "Sim, pode retirar no local", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_local, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_pac ))? "Não, não envio PAC": "Sim, envio PAC", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_pac, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_sedex ))? "Não, não envio SEDEX": "Sim, envio SEDEX", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_sedex, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_sedexacobrar ))? "Não, não envio SEDEX a cobrar": "Sim, envio SEDEX a cobrar", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_sedexacobrar, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_maximo ))? "Quantidade não informada": $envio_maximo ." unidades", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_maximo, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $this->Html->image( '/produto'. DS . $imagem['valor'], array( 'width' => 100, 'height' => 100, 'style' => 'border:2px solid #000;margin:5px;float:left;') ) , array( 'controller' => 'opcoes', 'action' => 'edit', $envio_maximo, $produto['Produto']['id'] ), array( 'escape' => false) ); + endif; + + endforeach; + + if( isset( $produto_imagem_null ) ): echo $produto_imagem_null; endif; + ?> +   + + +
    +
      +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + +
    + +
    + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/botoes(2).ctp.svn-base b/app/views/produtos/.svn/text-base/botoes(2).ctp.svn-base new file mode 100644 index 0000000..ec8d2ed --- /dev/null +++ b/app/views/produtos/.svn/text-base/botoes(2).ctp.svn-base @@ -0,0 +1,43 @@ +

    Cores e estilos de botões

    +
    +
      +
    • link( 'Todas', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/preto' ) ); ?>
    • +
    +
    + + +
    + +
    + link( $html->image( $strBtnImagem ), array( 'controller' => 'calcular', 'action' => 'calculo-frete', $intProdutoId ), false, false, false ) ."
    "; ?> +
    Código HTML
    + ">Código JavaScript
    */ ?> + + + + "> */ ?> +
    + + \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/botoes.ctp.svn-base b/app/views/produtos/.svn/text-base/botoes.ctp.svn-base new file mode 100644 index 0000000..ec8d2ed --- /dev/null +++ b/app/views/produtos/.svn/text-base/botoes.ctp.svn-base @@ -0,0 +1,43 @@ +

    Cores e estilos de botões

    +
    +
      +
    • link( 'Todas', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/preto' ) ); ?>
    • +
    +
    + + +
    + +
    + link( $html->image( $strBtnImagem ), array( 'controller' => 'calcular', 'action' => 'calculo-frete', $intProdutoId ), false, false, false ) ."
    "; ?> +
    Código HTML
    + ">Código JavaScript
    */ ?> + + + + "> */ ?> +
    + + \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/edit.ctp.svn-base b/app/views/produtos/.svn/text-base/edit.ctp.svn-base new file mode 100644 index 0000000..75a1523 --- /dev/null +++ b/app/views/produtos/.svn/text-base/edit.ctp.svn-base @@ -0,0 +1,25 @@ +
    +Form->create('Produto');?> +
    + + Form->input('id'); + echo $this->Form->input('users_id'); + echo $this->Form->input('nome'); + echo $this->Form->input('flag'); + ?> +
    +Form->end(__('Submit', true));?> +
    +
    +

    +
      + +
    • Html->link(__('Delete', true), array('action' => 'delete', $this->Form->value('Produto.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $this->Form->value('Produto.id'))); ?>
    • +
    • Html->link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/frete(2).ctp.svn-base b/app/views/produtos/.svn/text-base/frete(2).ctp.svn-base new file mode 100644 index 0000000..ab5e237 --- /dev/null +++ b/app/views/produtos/.svn/text-base/frete(2).ctp.svn-base @@ -0,0 +1,191 @@ +
    + + +Este produto está indisponível no momento"; + +}else{ +?> + + + + +
    + + + + + ". $pac['Erro'] ." ". $pac['MsgErro'] .""; + } + + //'controller' => 'calcular', + ?> + + +

    value('Produto.nome' ); ?>

    + + create('Produto', array( 'url' => array( 'controller' => 'produtos', 'action' => 'frete', $form->value('Produto.id' ) ), 'id' => 'formCalculoFrete' ) );?> +
    + + + + input( 'id', array( 'type' => 'hidden' ) ); ?> + input( 'nome', array( 'type' => 'hidden' ) ); ?> + input('quantidade', array( 'label' => 'Quantidade de produtos', 'size' => 5, 'class' => 'campo', 'after' => '(Quantidade de produtos que deseja adquirir)' ) ); ?> + + currency( $custom->campo( $form->value( 'Produto.id' ), 'preco' ) , 'R$ ', array( 'zero' => '0,00', 'places' => 2, 'thousands' => '.', 'decimals' => ',','negative' => '()') ); ?> + input('preco', array( 'type' => 'hidden', 'label' => 'Preço', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'preco' ), 'class' => 'campo', 'after' => '(Valor de uma unidade. Exemplo: 1.540,00)' ) ); ?> + + + + + +

    * Se o valor do produto estiver diferente do valor anunciado, informe o valor do anúncio.

    +

    * Se o produto estiver na modalidade de leilão informe o valor que deseja dar de lance.

    + + + input( 'cepdestino', array( 'label' => 'Seu CEP (destino)', 'size' => 5, 'class' => 'campo', 'after' => '(Informe o CEP de sua cidade ou localidade onde será realizada a entrega)' ) ); ?> + + + + campo( $form->value( 'Produto.id' ), 'peso' ); ?> + + +
    data['Produto']['peso'] ) ) ){ echo "class='invisivel'"; } ?>> + Adicionar informações de peso e origem + + +
    + +
    + + + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + + input( 'cep', array( 'label' => 'CEP origem', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'cep' ), 'class' => 'campo', 'after' => '(Informe o CEP de origem)' ) ); ?> + input( 'largura', array( 'label' => 'Largura', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'largura' ), 'class' => 'campo', 'after' => '(Informe a largura)' ) ); ?> + input( 'altura', array( 'label' => 'altura', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'altura' ), 'class' => 'campo', 'after' => '(Informe a altura)' ) ); ?> + input( 'comprimento', array( 'label' => 'comprimento', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'comprimento' ), 'class' => 'campo', 'after' => '(Informe o comprimento)' ) ); ?> + +
    +
    + + + + +
    + +
    + + + + data['Produto']['cepdestino'] ) ) && ( empty( $sedex['Erro'] ) ) ) + { + ?> + + + + + + + + element( 'calculo', array( 'resultado' => $sedex, 'servico' => 'SEDEX', 'seguro' => false ) ); + } + + + if( isset( $sedexacobrar ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedexacobrar, 'servico' => 'SEDEX a cobrar', 'seguro' => false ) ); + } + + + if( isset( $pac ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $pac, 'servico' => 'PAC', 'seguro' => false ) ); + } + ?> +
    ServiçoFreteFrete + produto
    + + + + + + + +
    + + submit( 'btnCalcularFrete.jpg', array( 'class' => 'alignleft' ) ); ?> + element( 'botao_retorno', array( 'retornar_url' => $retornar_url ) ); } ?> + + + + + end();?> + + + +
    + + + + + + +
    +campo2( $form->value( 'Produto.id' ), 'cep' ) .' - '. $form->value( 'Produto.id' ) ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/frete.ctp.svn-base b/app/views/produtos/.svn/text-base/frete.ctp.svn-base new file mode 100644 index 0000000..894d291 --- /dev/null +++ b/app/views/produtos/.svn/text-base/frete.ctp.svn-base @@ -0,0 +1,253 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && empty( $opcao['valor'] ) ): $produto_imagem_null = __( "Não foram adicionadas imagens do produto", true ); endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + }else{ + + $preco = $this->data['Produto']['preco']; + } + +?> +
    + + +Este produto está indisponível no momento"; + +}else{ +?> + + + + +
    + + + + + ". $pac['Erro'] ." ". $pac['MsgErro'] .""; + } + + //'controller' => 'calcular', + ?> + + +

    value('Produto.nome' ); ?>

    + + create('Produto', array( 'url' => array( 'controller' => 'produtos', 'action' => 'frete', $form->value('Produto.id' ) ), 'id' => 'formCalculoFrete' ) );?> +
    + + + + input( 'id', array( 'type' => 'hidden' ) ); ?> + input( 'nome', array( 'type' => 'hidden' ) ); ?> + input('quantidade', array( 'label' => 'Quantidade de produtos', 'size' => 5, 'class' => 'campo', 'after' => '(Quantidade de produtos que deseja adquirir)' ) ); ?> + + currency( $preco , 'R$ ', array( 'zero' => '0,00', 'places' => 2, 'thousands' => '.', 'decimals' => ',','negative' => '()') ); ?> + input('preco', array( 'type' => 'hidden', 'label' => 'Preço', 'size' => 5, 'value' => $preco, 'class' => 'campo', 'after' => '(Valor de uma unidade. Exemplo: 1.540,00)' ) ); ?> + + + + + +

    * Se o valor do produto estiver diferente do valor anunciado, informe o valor do anúncio.

    +

    * Se o produto estiver na modalidade de leilão informe o valor que deseja dar de lance.

    + + + input( 'cepdestino', array( 'label' => 'Seu CEP (destino)', 'size' => 5, 'class' => 'campo', 'after' => '(Informe o CEP de sua cidade ou localidade onde será realizada a entrega)' ) ); ?> + + + + + +
    data['Produto']['peso'] ) ) ){ echo "class='invisivel'"; } ?>> + Adicionar informações de peso e origem + + +
    + +
    + + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $peso == 0.300 )? '0,300': $peso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + input( 'cep', array( 'label' => 'CEP origem', 'size' => 5, 'value' => $cep, 'class' => 'campo', 'after' => '(Informe o CEP de origem)' ) ); ?> + input( 'largura', array( 'label' => 'Largura', 'size' => 5, 'value' => $largura, 'class' => 'campo', 'after' => '(Informe a largura)' ) ); ?> + input( 'altura', array( 'label' => 'altura', 'size' => 5, 'value' => $altura, 'class' => 'campo', 'after' => '(Informe a altura)' ) ); ?> + input( 'comprimento', array( 'label' => 'comprimento', 'size' => 5, 'value' => $comprimento, 'class' => 'campo', 'after' => '(Informe o comprimento)' ) ); ?> + +
    +
    + + + + +
    + +
    + + + + data['Produto']['cepdestino'] ) ) && ( empty( $sedex['Erro'] ) ) ) + { + ?> + + + + + + + + element( 'calculo', array( 'resultado' => $sedex, 'servico' => 'SEDEX', 'seguro' => false ) ); + } + + + if( isset( $sedexacobrar ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedexacobrar, 'servico' => 'SEDEX a cobrar', 'seguro' => false ) ); + } + + + if( isset( $pac ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $pac, 'servico' => 'PAC', 'seguro' => false ) ); + } + ?> +
    ServiçoFreteFrete + produto
    + + + + + + + +
    + + submit( 'btnCalcularFrete.jpg', array( 'class' => 'alignleft' ) ); ?> + element( 'botao_retorno', array( 'retornar_url' => $retornar_url ) ); } ?> + + + + + end();?> + + + +
    + + + + + + +
    +data ); +?> \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/index.ctp.svn-base b/app/views/produtos/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..dda6c38 --- /dev/null +++ b/app/views/produtos/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,59 @@ +
    +

    + + + + + + + + + + + > + + + + + + + + +
    Paginator->sort('id');?>Paginator->sort('users_id');?>Paginator->sort('nome');?>Paginator->sort('created');?>Paginator->sort('flag');?>
      + Html->link($produto['User']['name'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +     + Html->link(__('View', true), array('action' => 'view', $produto['Produto']['id'])); ?> + Html->link(__('Edit', true), array('action' => 'edit', $produto['Produto']['id'])); ?> + Html->link(__('Delete', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?> +
    +

    + Paginator->counter(array( + 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) + )); + ?>

    + +
    + Paginator->prev('<< ' . __('previous', true), array(), null, array('class'=>'disabled'));?> + | Paginator->numbers();?> + | + Paginator->next(__('next', true) . ' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
    +

    +
      +
    • Html->link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/.svn/text-base/view.ctp.svn-base b/app/views/produtos/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..5d43049 --- /dev/null +++ b/app/views/produtos/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,83 @@ +
    +

    +
    + > + > + +   + + > + > + Html->link($produto['User']['name'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +

    +
      +
    • Html->link(__('Edit Produto', true), array('action' => 'edit', $produto['Produto']['id'])); ?>
    • +
    • Html->link(__('Delete Produto', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?>
    • +
    • Html->link(__('List Produtos', true), array('action' => 'index')); ?>
    • +
    • Html->link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    + diff --git a/app/views/produtos/add.ctp b/app/views/produtos/add.ctp new file mode 100644 index 0000000..3a44c13 --- /dev/null +++ b/app/views/produtos/add.ctp @@ -0,0 +1,23 @@ +
    +Form->create('Produto');?> +
    + + Form->input('users_id'); + echo $this->Form->input('nome'); + echo $this->Form->input('flag'); + ?> +
    +Form->end(__('Submit', true));?> +
    +
    +

    +
      + +
    • Html->link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/admin_add(2).ctp b/app/views/produtos/admin_add(2).ctp new file mode 100644 index 0000000..be03294 --- /dev/null +++ b/app/views/produtos/admin_add(2).ctp @@ -0,0 +1,181 @@ +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    +create('Produto');?> + + +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + + + input('nome'); ?> + + + input('cep', array( 'label' => 'Cep' ) ); ?> + + + + campo( $form->value( 'Produto.id' ), 'peso' ); ?> + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '(Selecione o peso aproximado do produto)' ) ); ?> + + + + input('preco', array( 'label' => 'Preço' ) ); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + input('altura', array( 'label' => 'Altura' ) ); ?> +
    + + +
    + +
    + +
    + +
    + input('largura', array( 'label' => 'Largura' ) ); ?> +
    + +
    + input('comprimento', array( 'label' => 'Comprimento' ) ); ?> +
    + +
    + + +
    + +
    + + +
    + + + + + + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); + echo $form->input('nome'); + + + //echo $form->input('produtos_id'); + echo $form->input('cep', array( 'label' => 'Cep' ) ); + + echo $form->input('peso', array( 'label' => 'Peso' ) ); + + echo $form->input('preco', array( 'label' => 'Preço' ) ); + + echo $form->input('largura', array( 'label' => 'Largura' ) ); + + echo $form->input('altura', array( 'label' => 'Altura' ) ); + + echo $form->input('comprimento', array( 'label' => 'Comprimento' ) ); + */ + ?> +
    +end('Cadastrar produto');?> +
    + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_add.ctp b/app/views/produtos/admin_add.ctp new file mode 100644 index 0000000..e9a787a --- /dev/null +++ b/app/views/produtos/admin_add.ctp @@ -0,0 +1,299 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_esedex' && !empty( $opcao['valor'] ) ): $envio_esedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + + /** + * URL de retorno do produto + * É opcional e o cliente adiciona se quiser + */ + if( $opcao['chave'] == 'url_retorno' && !empty( $opcao['valor'] ) ): $url_retorno = $opcao['valor']; endif; + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> + + +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    +Form->create('Produto');?> + + + + + + +
    + +
      +
    • Html->link( "Produto", '#produto' ); ?>
    • +
    • Html->link( "Frete", '#frete' ); ?>
    • +
    • Html->link( "Opções", '#opcoes' ); ?>
    • +
    + + +
    +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + Form->input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): array( 'type' => 'select' ) ); ?> + + + Form->input('nome', array( 'label' => 'Nome do produto', 'after' => __( '

    (Informe o nome do produto)

    ', true) )); ?> + + + Form->input('cep', array( 'value' => $cep, 'after' => __( '

    (Informe o CEP de onde o produto será enviado)

    ', true) )); ?> + + + + Form->input('peso', array( 'value' => $peso, 'type' => 'select', 'options' => $arrOptions, 'class' => 'campo', 'after' => __( '

    (Selecione o peso aproximado do produto)

    ', true) )); ?> + + + + Form->input('preco', array( 'value' => $preco, 'after' => __( '

    (Digite o preço de venda do produto)

    ', true) )); ?> + + +
    + + +
    + + + +
    + + + +
    + Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas da embalagem de envio devem ser informadas em centímetros. +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + Form->input('altura', array( 'value' => $altura )); ?> +
    + + +
    + +
    + +
    + +
    + Form->input('largura', array( 'value' => $largura )); ?> +
    + +
    + Form->input('comprimento', array( 'value' => $comprimento )); ?> +
    + +
    + + +
    + +
    + + + +
    + + + +
    + + +
    + +
    + +

    +
    + As opções abaixo permitem que você habilite ou desabilite formas de envio, exiba informações adicionais e selecione fotos do produto. +
    + Form->input('envio_local', array( 'selected' => $envio_local, 'options' => array( 1 => 'Sim, pode retirar no local', 0 => 'Não, não é possível retirar no local' ), 'label' => 'Pode retirar no local?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção retirar no local não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_pac', array( 'selected' => $envio_pac, 'options' => array( 1 => 'Sim, envio PAC', 0 => 'Não, não envio PAC' ), 'label' => 'Envia por PAC?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção PAC não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedex', array( 'selected' => $envio_sedex, 'options' => array( 1 => 'Sim, envio SEDEX', 0 => 'Não, não envio SEDEX' ), 'label' => 'Envia por SEDEX convencional?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX convencional não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedexacobrar', array( 'selected' => $envio_sedexacobrar, 'options' => array( 1 => 'Sim, envio SEDEX a cobrar', 0 => 'Não, não envio SEDEX a cobrar' ), 'label' => 'Envia por SEDEX a cobrar?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX a cobrar não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_maximo', array( 'value' => $envio_maximo, 'after' => __('

    (Neste campo você poderá informar quantas unidades deste produto podem ser enviado numa encomenda.)

    ', true) )); + + + /** + * Apenas o usuário FOKS possui acesso + * então todos os outros ficam com água + * na boca, podem ver mas não podem + * escolher + */ + if( ( $userData['id'] == 3913 ) || ( $userData['id'] == 1 ) ) + { + echo $this->Form->input('envio_esedex', array( 'selected' => $envio_esedex, 'options' => array( 1 => 'Sim, envio E-SEDEX', 0 => 'Não, não envio E-SEDEX' ), 'label' => 'Envia por E-SEDEX?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção E-SEDEX não será exibida no momento do cálculo de frete.)

    ', true) )); + }else{ + + // não é possível escolher a opção + echo $this->Form->input('envio_esedex', array( 'selected' => $envio_esedex, 'options' => array( 0 => 'Sim, envio E-SEDEX (não disponível para sua conta)', 0 => 'Não, não envio E-SEDEX' ), 'label' => 'Envia por E-SEDEX?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção E-SEDEX não será exibida no momento do cálculo de frete.)

    ', true) )); + echo "

    A versão premium fornece a opção para calculo de E-SEDEX. Solicite

    "; + } + ?> + + +
    + + + +
    + +

    +
    + No campo 'Endereço do anúncio' você deve informar o endereço do seu anúncio no Mercado Livre, este campo irá permitir que o cliente após realizar o cálculo do frete + possa retornar diretamente para seu anuncio no Mercado Livre. O Prenchimento não é obrigatório. +
    + + + Form->input( 'url_retorno', array( 'after' => __( "

    Informe o endereço do seu anúncio no Mercado Livre.

    ", true ))); ?> + +
    + + +
    + +Form->end(__('Adicionar produto', true));?> +
    + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_botoes(2).ctp b/app/views/produtos/admin_botoes(2).ctp new file mode 100644 index 0000000..ca7e30d --- /dev/null +++ b/app/views/produtos/admin_botoes(2).ctp @@ -0,0 +1,96 @@ +

    Cores e estilos de botões

    + +

    Você pode escolher entre os diversos estilos de botões, clique no link Código HTML para pegar o código para cálculo de frete + que poderá ser utilizado no seu site ou blog e sites de leilões como Mercado livre (e diversos outros).

    + +

    Você pode testar os botões de cálculo clicando neles, o funcionamento será exatamente como se o botão estivesse em seu site ou anúncio de leilão.

    + +
    + +
    +

    Precisa de ajuda para adicionar o botão de cálculo de frete em seu anúncio no Mercado Livre? Veja nossa sessão de ajuda, link( 'como adicionar botão de cálculo no mercado livre', array( 'admin' => false, 'controller' => 'nodes', 'action' => 'view', 'type' => 'blog', 'slug' => 'como-inserir-botao-calculo-de-frete-no-mercado-livre' ) ); ?>.

    +
    + + +
    +

    Contas premium tem acesso ao API que permite utilizar o sistema de cálculo de frete transparente, onde em nenhum momento seus + clientes verão que o serviço de cálculo é fornecido por nossa empresa.

    +
    + + +
    + + + +
    +
      +
    • link( 'Todas as cores', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:preto' ) ); ?>
    • +
    +
    + + +
    + /calcular/frete//" target="_blank">image( $strBtnImagem ) ); ?> + + */ + ?> +
    + link( $html->image( $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + + + + + +
    Código HTML
    + link( $html->image( $server . $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + ">Código JavaScript
    */ ?> + + + + +
    + "; + echo "

    Botões indisponíveis neste momento.

    "; + echo "

    Tente novamente dentro de alguns instantes

    "; + } + //pr( $botoes ); + + ?> + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_botoes.ctp b/app/views/produtos/admin_botoes.ctp new file mode 100644 index 0000000..ca7e30d --- /dev/null +++ b/app/views/produtos/admin_botoes.ctp @@ -0,0 +1,96 @@ +

    Cores e estilos de botões

    + +

    Você pode escolher entre os diversos estilos de botões, clique no link Código HTML para pegar o código para cálculo de frete + que poderá ser utilizado no seu site ou blog e sites de leilões como Mercado livre (e diversos outros).

    + +

    Você pode testar os botões de cálculo clicando neles, o funcionamento será exatamente como se o botão estivesse em seu site ou anúncio de leilão.

    + +
    + +
    +

    Precisa de ajuda para adicionar o botão de cálculo de frete em seu anúncio no Mercado Livre? Veja nossa sessão de ajuda, link( 'como adicionar botão de cálculo no mercado livre', array( 'admin' => false, 'controller' => 'nodes', 'action' => 'view', 'type' => 'blog', 'slug' => 'como-inserir-botao-calculo-de-frete-no-mercado-livre' ) ); ?>.

    +
    + + +
    +

    Contas premium tem acesso ao API que permite utilizar o sistema de cálculo de frete transparente, onde em nenhum momento seus + clientes verão que o serviço de cálculo é fornecido por nossa empresa.

    +
    + + +
    + + + +
    +
      +
    • link( 'Todas as cores', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId, $strLink ,'cor:preto' ) ); ?>
    • +
    +
    + + +
    + /calcular/frete//" target="_blank">image( $strBtnImagem ) ); ?> + + */ + ?> +
    + link( $html->image( $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + + + + + +
    Código HTML
    + link( $html->image( $server . $strBtnImagem, array( 'alt' => 'CÁLCULO DE FRETE AUTOMÁTICO' ) ), array( 'admin' => false, 'controller' => 'produtos', 'action' => 'frete', $intProdutoId, $strLink ), array( 'target' => '_blank', 'title' => 'Calcule o frete aqui', 'escape' => false ) ); ?> + ">Código JavaScript
    */ ?> + + + + +
    + "; + echo "

    Botões indisponíveis neste momento.

    "; + echo "

    Tente novamente dentro de alguns instantes

    "; + } + //pr( $botoes ); + + ?> + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_delete(2).ctp b/app/views/produtos/admin_delete(2).ctp new file mode 100644 index 0000000..e69de29 diff --git a/app/views/produtos/admin_delete.ctp b/app/views/produtos/admin_delete.ctp new file mode 100644 index 0000000..e69de29 diff --git a/app/views/produtos/admin_edit(2).ctp b/app/views/produtos/admin_edit(2).ctp new file mode 100644 index 0000000..0f2a799 --- /dev/null +++ b/app/views/produtos/admin_edit(2).ctp @@ -0,0 +1,170 @@ +
    + + +

    +
    +
      +
    • link(__('Delete', true), array('action' => 'delete', $form->value('Produto.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Produto.id'))); ?>
    • +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    +
    + + + + +create('Produto');?> + + input('id'); ?> + +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + input('users_id' ); ?> + + + input('nome'); ?> + + + input('cep', array( 'label' => 'Cep', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'cep' ) ) ); ?> + input('cep', array( 'label' => 'Cep' ) ); ?> + + + + + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + + input('preco', array( 'label' => 'Preço', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'preco' ) ) ); ?> + input('preco', array( 'label' => 'Preço' ) ); ?> + + +
    + + +
    + + + +
    + + + +
    +

    Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas devem ser informadas em centímetros.

    +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + input('altura', array( 'label' => 'Altura' ) ); ?> + input('altura', array( 'label' => 'Altura', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'altura' ) ) ); ?> +
    + + +
    + +
    + +
    + +
    + input('largura', array( 'label' => 'Largura', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'largura' ) ) ); ?> + input('largura', array( 'label' => 'Largura' ) ); ?> +
    + +
    + input('comprimento', array( 'label' => 'Comprimento', 'value' => $custom->campo( $form->value( 'Produto.id' ), 'comprimento' ) ) ); ?> + input('comprimento', array( 'label' => 'Comprimento' ) ); ?> +
    + +
    + + +
    + +
    + + +
    + + + + + + + +
    +end('Salvar alterações');?> +
    + + + +css( '/theme/rastreamento/css/admin_style' ); +$javascript->link( '/theme/rastreamento/js/funcoes', false ); + +debug( $produtos ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_edit.ctp b/app/views/produtos/admin_edit.ctp new file mode 100644 index 0000000..a2d575d --- /dev/null +++ b/app/views/produtos/admin_edit.ctp @@ -0,0 +1,304 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_esedex' && !empty( $opcao['valor'] ) ): $envio_esedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + + /** + * URL de retorno do produto + * É opcional e o cliente adiciona se quiser + */ + if( $opcao['chave'] == 'url_retorno' && !empty( $opcao['valor'] ) ): $url_retorno = $opcao['valor']; endif; + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> + + +

    + +

    Você pode cadastrar produtos, para isso informe o nome do produto, o CEP de origem, o peso, o preço, a largura, a altura e o comprimento.

    + +
    + + +
    +
      +
    • link(__('List Produtos', true), array('action' => 'index'));?>
    • + +
    +
    + + +
    + + + +Form->create('Produto');?> + + +
    + +
      +
    • Html->link( "Produto", '#produto' ); ?>
    • +
    • Html->link( "Frete", '#frete' ); ?>
    • +
    • Html->link( "Opções", '#opcoes' ); ?>
    • +
    + + +
    + input('id'); ?> +
    + + + +
    + + + +
    + + + input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): null ); ?> + Form->input('users_id', ( isset( $badeco ) )? array( 'type' => 'hidden' ): array( 'type' => 'select' ) ); ?> + + + Form->input('nome', array( 'label' => 'Nome do produto', 'after' => __( '

    (Informe o nome do produto)

    ', true) )); ?> + + + Form->input('cep', array( 'value' => $cep, 'after' => __( '

    (Informe o CEP de onde o produto será enviado)

    ', true) )); ?> + + + + Form->input('peso', array( 'value' => $peso, 'type' => 'select', 'options' => $arrOptions, 'class' => 'campo', 'after' => __( '

    (Selecione o peso aproximado do produto)

    ', true) )); ?> + + + + Form->input('preco', array( 'value' => $preco, 'after' => __( '

    (Digite o preço de venda do produto)

    ', true) )); ?> + + +
    + + +
    + + + +
    + + + +
    + Para que o cálculo de frete retorne o valor exato cobrado pelos correios é importante informar as medidas exatas do objeto (produto), as medidas da embalagem de envio devem ser informadas em centímetros. +
    + + + + + +
    + + +
    + +
    + + +
    + + + +
    + Form->input('altura', array( 'value' => $altura )); ?> +
    + + +
    + +
    + +
    + +
    + Form->input('largura', array( 'value' => $largura )); ?> +
    + +
    + Form->input('comprimento', array( 'value' => $comprimento )); ?> +
    + +
    + + +
    + +
    + + + +
    + + + +
    + +
    + + + +
    + + +

    +
    + As opções abaixo permitem que você habilite ou desabilite formas de envio, exiba informações adicionais e selecione fotos do produto. +
    + Form->input('envio_local', array( 'selected' => $envio_local, 'options' => array( 1 => 'Sim, pode retirar no local', 0 => 'Não, não é possível retirar no local' ), 'label' => 'Pode retirar no local?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção retirar no local não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_pac', array( 'selected' => $envio_pac, 'options' => array( 1 => 'Sim, envio PAC', 0 => 'Não, não envio PAC' ), 'label' => 'Envia por PAC?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção PAC não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedex', array( 'selected' => $envio_sedex, 'options' => array( 1 => 'Sim, envio SEDEX', 0 => 'Não, não envio SEDEX' ), 'label' => 'Envia por SEDEX convencional?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX convencional não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_sedexacobrar', array( 'selected' => $envio_sedexacobrar, 'options' => array( 1 => 'Sim, envio SEDEX a cobrar', 0 => 'Não, não envio SEDEX a cobrar' ), 'label' => 'Envia por SEDEX a cobrar?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção SEDEX a cobrar não será exibida no momento do cálculo de frete.)

    ', true) )); + echo $this->Form->input('envio_maximo', array( 'value' => $envio_maximo, 'after' => __('

    (Neste campo você poderá informar quantas unidades deste produto podem ser enviados numa encomenda.)

    ', true) )); + + + + /** + * Apenas o usuário FOKS possui acesso + * então todos os outros ficam com água + * na boca, podem ver mas não podem + * escolher + */ + if( ( $userData['id'] == 3913 ) || ( $userData['id'] == 1 ) ) + { + echo $this->Form->input('envio_esedex', array( 'selected' => $envio_esedex, 'options' => array( 1 => 'Sim, envio E-SEDEX', 0 => 'Não, não envio E-SEDEX' ), 'label' => 'Envia por E-SEDEX?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção E-SEDEX não será exibida no momento do cálculo de frete.)

    ', true) )); + }else{ + + // não é possível escolher a opção + echo $this->Form->input('envio_esedex', array( 'selected' => $envio_esedex, 'options' => array( 0 => 'Sim, envio E-SEDEX (não disponível para sua conta)', 0 => 'Não, não envio E-SEDEX' ), 'label' => 'Envia por E-SEDEX?', 'class' => 'campo', 'after' => __('

    (Escolhendo não, a opção E-SEDEX não será exibida no momento do cálculo de frete.)

    ', true) )); + echo "
    A versão premium fornece a opção para calculo de E-SEDEX. Solicite
    "; + } + + ?> + +
    + + +
    + +

    +
    + No campo 'Endereço do anúncio' você deve informar o endereço do seu anúncio no Mercado Livre, este campo irá permitir que o cliente após realizar o cálculo do frete + possa retornar diretamente para seu anuncio no Mercado Livre. O Prenchimento não é obrigatório. +
    + + + Form->input( 'url_retorno', array( 'after' => __( "

    Informe o endereço do seu anúncio no Mercado Livre.

    ", true ))); ?> + +
    + + +
    + +Form->end(__('Salvar alterações', true));?> +
    + + + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); + +//debug( $this->data ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_index.ctp b/app/views/produtos/admin_index.ctp new file mode 100644 index 0000000..07e33f3 --- /dev/null +++ b/app/views/produtos/admin_index.ctp @@ -0,0 +1,103 @@ +
    + + + + +
    + + + + params['named']['flag'] ) && $this->params['named']['flag'] == 2 ): + ?> +
    +

    Recomendamos que você teste o cálculo de frete para verificar se está funcionando corretamente. É possível que você cadastre informações incorretas e isto + gere problemas aos futuros compradores no momento que eles forem calcular o frete de seu produto.

    +
    + + + + +
    + + + + + +

    +
    +
      +
    • link(__('New Produto', true), array( 'controller' => 'produtos', 'action' => 'add')); ?>
    • +
    • link(__('Produtos ativos', true), array( 'controller' => 'produtos', 'action' => 'index', 'flag:1' ) ); ?>
    • +
    • link(__('Produtos excluídos', true), array( 'controller' => 'produtos', 'action' => 'index', 'flag:0' ) ); ?>
    • +
    +
    + + + + + + + + + + + + + + > + + + + + + + + +
    sort('id');?>sort('users_id');?>sort('nome');?>sort('created');?>sort('flag');?>
    + + + link($produto['User']['username'], array('controller' => 'users', 'action' => 'reset_password', $produto['User']['id'])); ?> + + + + + + status( $produto['Produto']['flag'] ); ?> + + link(__('Calcular frete', true), array( 'controller' => 'produtos', 'admin' => false, 'action' => 'frete', $produto['Produto']['id'], Inflector::slug( low( $produto['Produto']['nome'] ) ) ), array( 'target' => '_blank' ) ); ?> + link(__('Botões de cálculo', true), array( 'controller' => 'produtos', 'action' => 'botoes', $produto['Produto']['id'], Inflector::slug( low( $produto['Produto']['nome'] ) ) ) ); ?> + link(__('View', true), array( 'controller' => 'produtos', 'action' => 'view', $produto['Produto']['id'])); ?> + link(__('Edit', true), array( 'controller' => 'produtos', 'action' => 'edit', $produto['Produto']['id'])); ?> + link(__('Delete', true), array( 'controller' => 'produtos', 'action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?> +
    + + + + + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    + + +
    + + + + + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/admin_view.ctp b/app/views/produtos/admin_view.ctp new file mode 100644 index 0000000..6c97916 --- /dev/null +++ b/app/views/produtos/admin_view.ctp @@ -0,0 +1,257 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $produto['Opcao'] ) ) + { + + foreach ( $produto['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && empty( $opcao['valor'] ) ): $produto_imagem_null = __( "Não foram adicionadas imagens do produto", true ); endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + } + +?> +
    +

    + + + + +
    +
      +
    • link(__('Edit Produto', true), array('action' => 'edit', $produto['Produto']['id'])); ?>
    • +
    • link(__('Delete Produto', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?>
    • +
    • link(__('List Produtos', true), array('action' => 'index')); ?>
    • +
    • link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + + + + +
    + > + > + +   + + > + > + link($produto['User']['username'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    + + +

    + + + +
    +
      +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + + + +
    + + + > + > + link( $cep, array( 'controller' => 'opcoes', 'action' => 'edit', $cep, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $peso, array( 'controller' => 'opcoes', 'action' => 'edit', $peso, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $preco, array( 'controller' => 'opcoes', 'action' => 'edit', $preco, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $largura, array( 'controller' => 'opcoes', 'action' => 'edit', $largura, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $altura, array( 'controller' => 'opcoes', 'action' => 'edit', $altura, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $comprimento, array( 'controller' => 'opcoes', 'action' => 'edit', $comprimento, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_local ))? "Não, não é possível retirar no local": "Sim, pode retirar no local", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_local, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_pac ))? "Não, não envio PAC": "Sim, envio PAC", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_pac, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_sedex ))? "Não, não envio SEDEX": "Sim, envio SEDEX", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_sedex, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_sedexacobrar ))? "Não, não envio SEDEX a cobrar": "Sim, envio SEDEX a cobrar", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_sedexacobrar, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( ( empty( $envio_maximo ))? "Quantidade não informada": $envio_maximo ." unidades", array( 'controller' => 'opcoes', 'action' => 'edit', $envio_maximo, $produto['Produto']['id'] ) ); ?> +   + + > + > + link( $this->Html->image( '/produto'. DS . $imagem['valor'], array( 'width' => 100, 'height' => 100, 'style' => 'border:2px solid #000;margin:5px;float:left;') ) , array( 'controller' => 'opcoes', 'action' => 'edit', $envio_maximo, $produto['Produto']['id'] ), array( 'escape' => false) ); + endif; + + endforeach; + + if( isset( $produto_imagem_null ) ): echo $produto_imagem_null; endif; + ?> +   + + +
    +
      +
    • link(__('New Opcao', true), array( 'controller' => 'opcoes', 'action' => 'add', $produto['Produto']['id'] ) ); ?>
    • +
    +
    + +
    + +
    + +css( '/theme/rastreamento/css/admin_style' ); +$this->Html->link( '/theme/rastreamento/js/funcoes', false ); +?> \ No newline at end of file diff --git a/app/views/produtos/botoes(2).ctp b/app/views/produtos/botoes(2).ctp new file mode 100644 index 0000000..ec8d2ed --- /dev/null +++ b/app/views/produtos/botoes(2).ctp @@ -0,0 +1,43 @@ +

    Cores e estilos de botões

    +
    +
      +
    • link( 'Todas', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/preto' ) ); ?>
    • +
    +
    + + +
    + +
    + link( $html->image( $strBtnImagem ), array( 'controller' => 'calcular', 'action' => 'calculo-frete', $intProdutoId ), false, false, false ) ."
    "; ?> +
    Código HTML
    + ">Código JavaScript
    */ ?> + + + + "> */ ?> +
    + + \ No newline at end of file diff --git a/app/views/produtos/botoes.ctp b/app/views/produtos/botoes.ctp new file mode 100644 index 0000000..ec8d2ed --- /dev/null +++ b/app/views/produtos/botoes.ctp @@ -0,0 +1,43 @@ +

    Cores e estilos de botões

    +
    +
      +
    • link( 'Todas', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/todas' ) ); ?>
    • +
    • link( 'Vermelho', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/vermelho' ) ); ?>
    • +
    • link( 'Verde', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/verde' ) ); ?>
    • +
    • link( 'Azul', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/azul' ) ); ?>
    • +
    • link( 'Laranja', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/laranja' ) ); ?>
    • +
    • link( 'Terra', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/terra' ) ); ?>
    • +
    • link( 'Preto', array( 'controller' => 'produtos', 'action' => 'botoes', $intProdutoId .'/preto' ) ); ?>
    • +
    +
    + + +
    + +
    + link( $html->image( $strBtnImagem ), array( 'controller' => 'calcular', 'action' => 'calculo-frete', $intProdutoId ), false, false, false ) ."
    "; ?> +
    Código HTML
    + ">Código JavaScript
    */ ?> + + + + "> */ ?> +
    + + \ No newline at end of file diff --git a/app/views/produtos/edit.ctp b/app/views/produtos/edit.ctp new file mode 100644 index 0000000..75a1523 --- /dev/null +++ b/app/views/produtos/edit.ctp @@ -0,0 +1,25 @@ +
    +Form->create('Produto');?> +
    + + Form->input('id'); + echo $this->Form->input('users_id'); + echo $this->Form->input('nome'); + echo $this->Form->input('flag'); + ?> +
    +Form->end(__('Submit', true));?> +
    +
    +

    +
      + +
    • Html->link(__('Delete', true), array('action' => 'delete', $this->Form->value('Produto.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $this->Form->value('Produto.id'))); ?>
    • +
    • Html->link(__('List Produtos', true), array('action' => 'index'));?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/frete(2).ctp b/app/views/produtos/frete(2).ctp new file mode 100644 index 0000000..ab5e237 --- /dev/null +++ b/app/views/produtos/frete(2).ctp @@ -0,0 +1,191 @@ +
    + + +Este produto está indisponível no momento"; + +}else{ +?> + + + + +
    + + + + + ". $pac['Erro'] ." ". $pac['MsgErro'] .""; + } + + //'controller' => 'calcular', + ?> + + +

    value('Produto.nome' ); ?>

    + + create('Produto', array( 'url' => array( 'controller' => 'produtos', 'action' => 'frete', $form->value('Produto.id' ) ), 'id' => 'formCalculoFrete' ) );?> +
    + + + + input( 'id', array( 'type' => 'hidden' ) ); ?> + input( 'nome', array( 'type' => 'hidden' ) ); ?> + input('quantidade', array( 'label' => 'Quantidade de produtos', 'size' => 5, 'class' => 'campo', 'after' => '(Quantidade de produtos que deseja adquirir)' ) ); ?> + + currency( $custom->campo( $form->value( 'Produto.id' ), 'preco' ) , 'R$ ', array( 'zero' => '0,00', 'places' => 2, 'thousands' => '.', 'decimals' => ',','negative' => '()') ); ?> + input('preco', array( 'type' => 'hidden', 'label' => 'Preço', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'preco' ), 'class' => 'campo', 'after' => '(Valor de uma unidade. Exemplo: 1.540,00)' ) ); ?> + + + + + +

    * Se o valor do produto estiver diferente do valor anunciado, informe o valor do anúncio.

    +

    * Se o produto estiver na modalidade de leilão informe o valor que deseja dar de lance.

    + + + input( 'cepdestino', array( 'label' => 'Seu CEP (destino)', 'size' => 5, 'class' => 'campo', 'after' => '(Informe o CEP de sua cidade ou localidade onde será realizada a entrega)' ) ); ?> + + + + campo( $form->value( 'Produto.id' ), 'peso' ); ?> + + +
    data['Produto']['peso'] ) ) ){ echo "class='invisivel'"; } ?>> + Adicionar informações de peso e origem + + +
    + +
    + + + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + ?> + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $strPeso == 0.300 )? '0,300': $strPeso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + + input( 'cep', array( 'label' => 'CEP origem', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'cep' ), 'class' => 'campo', 'after' => '(Informe o CEP de origem)' ) ); ?> + input( 'largura', array( 'label' => 'Largura', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'largura' ), 'class' => 'campo', 'after' => '(Informe a largura)' ) ); ?> + input( 'altura', array( 'label' => 'altura', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'altura' ), 'class' => 'campo', 'after' => '(Informe a altura)' ) ); ?> + input( 'comprimento', array( 'label' => 'comprimento', 'size' => 5, 'value' => $custom->campo( $form->value( 'Produto.id' ), 'comprimento' ), 'class' => 'campo', 'after' => '(Informe o comprimento)' ) ); ?> + +
    +
    + + + + +
    + +
    + + + + data['Produto']['cepdestino'] ) ) && ( empty( $sedex['Erro'] ) ) ) + { + ?> + + + + + + + + element( 'calculo', array( 'resultado' => $sedex, 'servico' => 'SEDEX', 'seguro' => false ) ); + } + + + if( isset( $sedexacobrar ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedexacobrar, 'servico' => 'SEDEX a cobrar', 'seguro' => false ) ); + } + + + if( isset( $pac ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $pac, 'servico' => 'PAC', 'seguro' => false ) ); + } + ?> +
    ServiçoFreteFrete + produto
    + + + + + + + +
    + + submit( 'btnCalcularFrete.jpg', array( 'class' => 'alignleft' ) ); ?> + element( 'botao_retorno', array( 'retornar_url' => $retornar_url ) ); } ?> + + + + + end();?> + + + +
    + + + + + + +
    +campo2( $form->value( 'Produto.id' ), 'cep' ) .' - '. $form->value( 'Produto.id' ) ); +?> \ No newline at end of file diff --git a/app/views/produtos/frete.ctp b/app/views/produtos/frete.ctp new file mode 100644 index 0000000..99bc10f --- /dev/null +++ b/app/views/produtos/frete.ctp @@ -0,0 +1,314 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_esedex' && !empty( $opcao['valor'] ) ): $envio_esedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + + + // Imagem do produto no calculo de frete + if( empty( $produto_imagem ) ) + { + + if( $opcao['chave'] == 'produto_imagem' && !empty( $opcao['valor'] ) ): $produto_imagem = $opcao['valor']; else: $produto_imagem = $produto_imagem; endif; + } + + + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && !empty( $opcao['valor'] ) ): + $produto_imagem = $opcao['valor']; + endif; + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + }else{ + + $preco = $this->data['Produto']['preco']; + } + +?> + + + +Este produto está indisponível no momento"; + +}else{ +?> + + + + + + + + + › ". $pac['Erro'] ." ". $pac['MsgErro'] .""; + } + + //'controller' => 'calcular', + ?> + + +

    value('Produto.nome' ); ?>

    + + +
    + + data['Produto']['imagem'] ) && !empty( $this->data['Produto']['imagem'] ) ) ): ?> + + data['Produto']['imagem'] ) )? $this->data['Produto']['imagem']:$produto_imagem; + ?> + image( "/produto/". $produto_imagem, array( 'width' => 180, 'height' => 180, 'alt' => $form->value( 'Produto.nome' ), 'title' => $form->value( 'Produto.nome' ) ) ); ?> + + +
    + + + +
    + + create('Produto', array( 'url' => array( 'controller' => 'produtos', 'action' => 'frete', $form->value('Produto.id' ) ), 'id' => 'calculo' ) );?> + input( 'imagem', array( 'value' => $produto_imagem, 'type' => 'hidden' ) ); ?> +
    + +
    +

    currency( $preco , 'R$ ', array( 'zero' => '0,00', 'places' => 2, 'thousands' => '.', 'decimals' => ',','negative' => '()') ); ?>

    + input('preco', array( 'type' => 'hidden', 'value' => $preco ) ); ?> + input('nome', array( 'type' => 'hidden' ) ); ?> + +
    +
    + input('quantidade', array( 'size' => 6, 'id' => "quantidade", 'label' => false ) ); ?> + • Informe a quantidade de produtos que você está comprando +
    + +
    +
    + input( 'cepdestino', array( 'size' => 6, 'id' => "cep", 'label' => false ) ); ?> + • Informe o CEP da localidade onde será efetuada a entrega +
    + + +
    data['Produto']['peso'] ) ) ){ echo "class='invisivel'"; } ?>> + Adicionar informações de peso e origem + + +
    + +
    + + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $peso == 0.300 )? '0,300': $peso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + input( 'cep', array( 'label' => 'CEP origem', 'size' => 5, 'value' => $cep, 'class' => 'campo', 'after' => '(Informe o CEP de origem)' ) ); ?> + input( 'largura', array( 'label' => 'Largura', 'size' => 5, 'value' => $largura, 'class' => 'campo', 'after' => '(Informe a largura)' ) ); ?> + input( 'altura', array( 'label' => 'altura', 'size' => 5, 'value' => $altura, 'class' => 'campo', 'after' => '(Informe a altura)' ) ); ?> + input( 'comprimento', array( 'label' => 'comprimento', 'size' => 5, 'value' => $comprimento, 'class' => 'campo', 'after' => '(Informe o comprimento)' ) ); ?> + +
    +
    + + + + + + +
     
    +
    + input( 'id', array( 'type' => 'hidden' ) ); ?> + submit( 'calcular frete', array( 'id' => "calcular_frete", 'name' => "calcular_frete" ) ); ?> + element( 'botao_retorno', array( 'retornar_url' => $retornar_url ) ); } ?> +
    + +
    + + end();?> + +
    + + data['Produto']['cepdestino'] ) ) && ( empty( $sedex['Erro'] ) ) ) + if( ( isset( $this->data['Produto']['cepdestino'] ) ) ) + { + ?> + + + + + + + + + + + + + element( 'calculo', array( 'resultado' => $esedex, 'servico' => 'ESEDEX', 'seguro' => false ) ); + } + + if( isset( $sedex ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedex, 'servico' => 'SEDEX', 'seguro' => false ) ); + } + + + if( isset( $sedexacobrar ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedexacobrar, 'servico' => 'SEDEX a cobrar', 'seguro' => false ) ); + } + + + if( isset( $pac ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $pac, 'servico' => 'PAC', 'seguro' => false ) ); + } + ?> + + +
    ServiçoFreteFrete + Produto
    + + + + + + + + + + +params ); + +debug( $this->data ); +*/ +?> \ No newline at end of file diff --git a/app/views/produtos/frete2.ctp b/app/views/produtos/frete2.ctp new file mode 100644 index 0000000..894d291 --- /dev/null +++ b/app/views/produtos/frete2.ctp @@ -0,0 +1,253 @@ + 'Até 0,300 gramas', + 1 => 'Até 1 quilo', + 2 => 'Até 2 quilos', + 3 => 'Até 3 quilos', + 4 => 'Até 4 quilos', + 5 => 'Até 5 quilos', + 6 => 'Até 6 quilos', + 7 => 'Até 7 quilos', + 8 => 'Até 8 quilos', + 9 => 'Até 9 quilos', + 10 => 'Até 10 quilos', + 11 => 'Até 11 quilos', + 12 => 'Até 12 quilos', + 13 => 'Até 13 quilos', + 14 => 'Até 14 quilos', + 15 => 'Até 15 quilos', + 16 => 'Até 16 quilos', + 17 => 'Até 17 quilos', + 18 => 'Até 18 quilos', + 19 => 'Até 19 quilos', + 20 => 'Até 20 quilos', + 21 => 'Até 21 quilos', + 22 => 'Até 22 quilos', + 23 => 'Até 23 quilos', + 24 => 'Até 24 quilos', + 25 => 'Até 25 quilos', + 26 => 'Até 26 quilos', + 27 => 'Até 27 quilos', + 28 => 'Até 28 quilos', + 29 => 'Até 29 quilos', + 30 => 'Até 30 quilos', + ); + + + +/** + * Corrige problemas com opções extras do produto + */ + if( isset( $this->data['Opcao'] ) ) + { + + foreach ( $this->data['Opcao'] as $opcao ) + { + + // Refente ao basico do produto + if( $opcao['chave'] == 'preco' && !empty( $opcao['valor'] ) ): $preco = $opcao['valor']; endif; + if( $opcao['chave'] == 'cep' && !empty( $opcao['valor'] ) ): $cep = $opcao['valor']; endif; + if( $opcao['chave'] == 'peso' && !empty( $opcao['valor'] ) ): $peso = $opcao['valor']; endif; + + + + // Referencia ao tamanho + if( $opcao['chave'] == 'altura' && !empty( $opcao['valor'] ) ): $altura = $opcao['valor']; endif; + if( $opcao['chave'] == 'largura' && !empty( $opcao['valor'] ) ): $largura = $opcao['valor']; endif; + if( $opcao['chave'] == 'comprimento' && !empty( $opcao['valor'] ) ): $comprimento = $opcao['valor']; endif; + + + + // Referencia ao tipo de envio + if( $opcao['chave'] == 'envio_local' && !empty( $opcao['valor'] ) ): $envio_local = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedex' && !empty( $opcao['valor'] ) ): $envio_sedex = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_sedexacobrar' && !empty( $opcao['valor'] ) ): $envio_sedexacobrar = $opcao['valor']; endif; + if( $opcao['chave'] == 'envio_pac' && !empty( $opcao['valor'] ) ): $envio_pac = $opcao['valor']; endif; + + + + // Refente a quantidade máxima por pacote (itens no mesmo pacote) + if( $opcao['chave'] == 'envio_maximo' && !empty( $opcao['valor'] ) ): $envio_maximo = $opcao['valor']; else: $envio_maximo = 1; endif; + + + // Imagem do produto no calculo de frete + if( $opcao['chave'] == 'produto_imagem' && empty( $opcao['valor'] ) ): $produto_imagem_null = __( "Não foram adicionadas imagens do produto", true ); endif; + + + //echo $this->Form->input( 'Opcao.'. $opcao['chave'], array( 'value' => $opcao['valor'] ) ); + } + }else{ + + $preco = $this->data['Produto']['preco']; + } + +?> +
    + + +Este produto está indisponível no momento"; + +}else{ +?> + + + + +
    + + + + + ". $pac['Erro'] ." ". $pac['MsgErro'] .""; + } + + //'controller' => 'calcular', + ?> + + +

    value('Produto.nome' ); ?>

    + + create('Produto', array( 'url' => array( 'controller' => 'produtos', 'action' => 'frete', $form->value('Produto.id' ) ), 'id' => 'formCalculoFrete' ) );?> +
    + + + + input( 'id', array( 'type' => 'hidden' ) ); ?> + input( 'nome', array( 'type' => 'hidden' ) ); ?> + input('quantidade', array( 'label' => 'Quantidade de produtos', 'size' => 5, 'class' => 'campo', 'after' => '(Quantidade de produtos que deseja adquirir)' ) ); ?> + + currency( $preco , 'R$ ', array( 'zero' => '0,00', 'places' => 2, 'thousands' => '.', 'decimals' => ',','negative' => '()') ); ?> + input('preco', array( 'type' => 'hidden', 'label' => 'Preço', 'size' => 5, 'value' => $preco, 'class' => 'campo', 'after' => '(Valor de uma unidade. Exemplo: 1.540,00)' ) ); ?> + + + + + +

    * Se o valor do produto estiver diferente do valor anunciado, informe o valor do anúncio.

    +

    * Se o produto estiver na modalidade de leilão informe o valor que deseja dar de lance.

    + + + input( 'cepdestino', array( 'label' => 'Seu CEP (destino)', 'size' => 5, 'class' => 'campo', 'after' => '(Informe o CEP de sua cidade ou localidade onde será realizada a entrega)' ) ); ?> + + + + + +
    data['Produto']['peso'] ) ) ){ echo "class='invisivel'"; } ?>> + Adicionar informações de peso e origem + + +
    + +
    + + input( 'peso', array( 'type' => 'select', 'options' => $arrOptions, 'label' => 'Peso', 'selected' => ( $peso == 0.300 )? '0,300': $peso, 'class' => 'campo', 'after' => '
    (Selecione o peso aproximado do produto)' ) ); ?> + + + input( 'cep', array( 'label' => 'CEP origem', 'size' => 5, 'value' => $cep, 'class' => 'campo', 'after' => '(Informe o CEP de origem)' ) ); ?> + input( 'largura', array( 'label' => 'Largura', 'size' => 5, 'value' => $largura, 'class' => 'campo', 'after' => '(Informe a largura)' ) ); ?> + input( 'altura', array( 'label' => 'altura', 'size' => 5, 'value' => $altura, 'class' => 'campo', 'after' => '(Informe a altura)' ) ); ?> + input( 'comprimento', array( 'label' => 'comprimento', 'size' => 5, 'value' => $comprimento, 'class' => 'campo', 'after' => '(Informe o comprimento)' ) ); ?> + +
    +
    + + + + +
    + +
    + + + + data['Produto']['cepdestino'] ) ) && ( empty( $sedex['Erro'] ) ) ) + { + ?> + + + + + + + + element( 'calculo', array( 'resultado' => $sedex, 'servico' => 'SEDEX', 'seguro' => false ) ); + } + + + if( isset( $sedexacobrar ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $sedexacobrar, 'servico' => 'SEDEX a cobrar', 'seguro' => false ) ); + } + + + if( isset( $pac ) ) + { + echo $this->element( 'calculo', array( 'resultado' => $pac, 'servico' => 'PAC', 'seguro' => false ) ); + } + ?> +
    ServiçoFreteFrete + produto
    + + + + + + + +
    + + submit( 'btnCalcularFrete.jpg', array( 'class' => 'alignleft' ) ); ?> + element( 'botao_retorno', array( 'retornar_url' => $retornar_url ) ); } ?> + + + + + end();?> + + + +
    + + + + + + +
    +data ); +?> \ No newline at end of file diff --git a/app/views/produtos/index.ctp b/app/views/produtos/index.ctp new file mode 100644 index 0000000..dda6c38 --- /dev/null +++ b/app/views/produtos/index.ctp @@ -0,0 +1,59 @@ +
    +

    + + + + + + + + + + + > + + + + + + + + +
    Paginator->sort('id');?>Paginator->sort('users_id');?>Paginator->sort('nome');?>Paginator->sort('created');?>Paginator->sort('flag');?>
      + Html->link($produto['User']['name'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +     + Html->link(__('View', true), array('action' => 'view', $produto['Produto']['id'])); ?> + Html->link(__('Edit', true), array('action' => 'edit', $produto['Produto']['id'])); ?> + Html->link(__('Delete', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?> +
    +

    + Paginator->counter(array( + 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) + )); + ?>

    + +
    + Paginator->prev('<< ' . __('previous', true), array(), null, array('class'=>'disabled'));?> + | Paginator->numbers();?> + | + Paginator->next(__('next', true) . ' >>', array(), null, array('class' => 'disabled'));?> +
    +
    +
    +

    +
      +
    • Html->link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/app/views/produtos/view.ctp b/app/views/produtos/view.ctp new file mode 100644 index 0000000..5d43049 --- /dev/null +++ b/app/views/produtos/view.ctp @@ -0,0 +1,83 @@ +
    +

    +
    + > + > + +   + + > + > + Html->link($produto['User']['name'], array('controller' => 'users', 'action' => 'view', $produto['User']['id'])); ?> +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +

    +
      +
    • Html->link(__('Edit Produto', true), array('action' => 'edit', $produto['Produto']['id'])); ?>
    • +
    • Html->link(__('Delete Produto', true), array('action' => 'delete', $produto['Produto']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $produto['Produto']['id'])); ?>
    • +
    • Html->link(__('List Produtos', true), array('action' => 'index')); ?>
    • +
    • Html->link(__('New Produto', true), array('action' => 'add')); ?>
    • +
    • Html->link(__('List Users', true), array('controller' => 'users', 'action' => 'index')); ?>
    • +
    • Html->link(__('New User', true), array('controller' => 'users', 'action' => 'add')); ?>
    • +
    • Html->link(__('List Opcaos', true), array('controller' => 'opcaos', 'action' => 'index')); ?>
    • +
    • Html->link(__('New Opcao', true), array('controller' => 'opcaos', 'action' => 'add')); ?>
    • +
    +
    + diff --git a/app/views/produtos/xml/.svn/entries b/app/views/produtos/xml/.svn/entries new file mode 100644 index 0000000..901e700 --- /dev/null +++ b/app/views/produtos/xml/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/produtos/xml +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +view.ctp +file + + + + +2010-05-16T06:06:22.000000Z +2b047b553fd4c6dcb9c9fe5514d64454 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +66 + +delete.ctp +file + + + + +2010-05-16T06:05:44.000000Z +e1aa76e8dd9514462b0b18654a5260bb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +66 + +edit.ctp +file + + + + +2010-05-16T06:05:18.000000Z +e1aa76e8dd9514462b0b18654a5260bb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +66 + +index.ctp +file + + + + +2010-05-16T05:26:26.000000Z +24c2b11c2ac26df149741fc989e39e12 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +67 + diff --git a/app/views/produtos/xml/.svn/text-base/delete.ctp.svn-base b/app/views/produtos/xml/.svn/text-base/delete.ctp.svn-base new file mode 100644 index 0000000..9c28545 --- /dev/null +++ b/app/views/produtos/xml/.svn/text-base/delete.ctp.svn-base @@ -0,0 +1,3 @@ + + serialize( $message ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/.svn/text-base/edit.ctp.svn-base b/app/views/produtos/xml/.svn/text-base/edit.ctp.svn-base new file mode 100644 index 0000000..9c28545 --- /dev/null +++ b/app/views/produtos/xml/.svn/text-base/edit.ctp.svn-base @@ -0,0 +1,3 @@ + + serialize( $message ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/.svn/text-base/index.ctp.svn-base b/app/views/produtos/xml/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..8666e62 --- /dev/null +++ b/app/views/produtos/xml/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,3 @@ + + serialize( $produtos ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/.svn/text-base/view.ctp.svn-base b/app/views/produtos/xml/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..3be190a --- /dev/null +++ b/app/views/produtos/xml/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,3 @@ + + serialize( $produto ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/delete.ctp b/app/views/produtos/xml/delete.ctp new file mode 100644 index 0000000..9c28545 --- /dev/null +++ b/app/views/produtos/xml/delete.ctp @@ -0,0 +1,3 @@ + + serialize( $message ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/edit.ctp b/app/views/produtos/xml/edit.ctp new file mode 100644 index 0000000..9c28545 --- /dev/null +++ b/app/views/produtos/xml/edit.ctp @@ -0,0 +1,3 @@ + + serialize( $message ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/index.ctp b/app/views/produtos/xml/index.ctp new file mode 100644 index 0000000..8666e62 --- /dev/null +++ b/app/views/produtos/xml/index.ctp @@ -0,0 +1,3 @@ + + serialize( $produtos ); ?> + \ No newline at end of file diff --git a/app/views/produtos/xml/view.ctp b/app/views/produtos/xml/view.ctp new file mode 100644 index 0000000..3be190a --- /dev/null +++ b/app/views/produtos/xml/view.ctp @@ -0,0 +1,3 @@ + + serialize( $produto ); ?> + \ No newline at end of file diff --git a/app/views/regions/.svn/entries b/app/views/regions/.svn/entries new file mode 100644 index 0000000..7673020 --- /dev/null +++ b/app/views/regions/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/regions +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +1c9e3043524c3be1c1ac5ac2a383e9f5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +690 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +58eeec603d053651b9db77502556fcc5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1688 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +292e6663419ae0eb431ac999eacf9188 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +692 + diff --git a/app/views/regions/.svn/text-base/admin_add.ctp.svn-base b/app/views/regions/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..a5a5265 --- /dev/null +++ b/app/views/regions/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,21 @@ +
    +

    + create('Region');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('title'); + echo $form->input('alias'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/regions/.svn/text-base/admin_edit.ctp.svn-base b/app/views/regions/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..797a139 --- /dev/null +++ b/app/views/regions/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,22 @@ +
    +

    + + create('Region');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('title'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/regions/.svn/text-base/admin_index.ctp.svn-base b/app/views/regions/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..edee8fc --- /dev/null +++ b/app/views/regions/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,46 @@ +
    +

    + +
    +
      +
    • link(__('New Region', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($regions AS $region) { + $actions = $html->link(__('Edit', true), array('controller' => 'regions', 'action' => 'edit', $region['Region']['id'])); + $actions .= ' ' . $layout->adminRowActions($region['Region']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'regions', + 'action' => 'delete', + $region['Region']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $region['Region']['id'], + $region['Region']['title'], + $region['Region']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/regions/admin_add.ctp b/app/views/regions/admin_add.ctp new file mode 100644 index 0000000..2474d46 --- /dev/null +++ b/app/views/regions/admin_add.ctp @@ -0,0 +1,31 @@ +
    +

    + Form->create('Region');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('alias'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/regions/admin_edit.ctp b/app/views/regions/admin_edit.ctp new file mode 100644 index 0000000..89e2832 --- /dev/null +++ b/app/views/regions/admin_edit.ctp @@ -0,0 +1,32 @@ +
    +

    + + Form->create('Region');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('title'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/regions/admin_index.ctp b/app/views/regions/admin_index.ctp new file mode 100644 index 0000000..c14b446 --- /dev/null +++ b/app/views/regions/admin_index.ctp @@ -0,0 +1,46 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Region', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($regions AS $region) { + $actions = $this->Html->link(__('Edit', true), array('controller' => 'regions', 'action' => 'edit', $region['Region']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($region['Region']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'regions', + 'action' => 'delete', + $region['Region']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $region['Region']['id'], + $region['Region']['title'], + $region['Region']['alias'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/roles/.svn/entries b/app/views/roles/.svn/entries new file mode 100644 index 0000000..52cb7f5 --- /dev/null +++ b/app/views/roles/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/roles +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +083a0fbc465c07476958adc67549046c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +728 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +cdffb6567056015ab2e278e0aec4d2f1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1652 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +fc813b57f9797a6ddadb39683ecc73a2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +682 + diff --git a/app/views/roles/.svn/text-base/admin_add.ctp.svn-base b/app/views/roles/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..688b66e --- /dev/null +++ b/app/views/roles/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,21 @@ +
    +

    + create('Role');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('title'); + echo $form->input('alias'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/roles/.svn/text-base/admin_edit.ctp.svn-base b/app/views/roles/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..9bcbdee --- /dev/null +++ b/app/views/roles/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,23 @@ +
    +

    + + create('Role');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('title'); + echo $form->input('alias'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/roles/.svn/text-base/admin_index.ctp.svn-base b/app/views/roles/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..716aea6 --- /dev/null +++ b/app/views/roles/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,46 @@ +
    +

    + +
    +
      +
    • link(__('New Role', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($roles AS $role) { + $actions = $html->link(__('Edit', true), array('controller' => 'roles', 'action' => 'edit', $role['Role']['id'])); + $actions .= ' ' . $layout->adminRowActions($role['Role']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'roles', + 'action' => 'delete', + $role['Role']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $role['Role']['id'], + $role['Role']['title'], + $role['Role']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/roles/admin_add.ctp b/app/views/roles/admin_add.ctp new file mode 100644 index 0000000..bda6a67 --- /dev/null +++ b/app/views/roles/admin_add.ctp @@ -0,0 +1,31 @@ +
    +

    + Form->create('Role');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('alias'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/roles/admin_edit.ctp b/app/views/roles/admin_edit.ctp new file mode 100644 index 0000000..f443706 --- /dev/null +++ b/app/views/roles/admin_edit.ctp @@ -0,0 +1,33 @@ +
    +

    + + Form->create('Role');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('title'); + echo $this->Form->input('alias'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/roles/admin_index.ctp b/app/views/roles/admin_index.ctp new file mode 100644 index 0000000..cd33480 --- /dev/null +++ b/app/views/roles/admin_index.ctp @@ -0,0 +1,46 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Role', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($roles AS $role) { + $actions = $this->Html->link(__('Edit', true), array('controller' => 'roles', 'action' => 'edit', $role['Role']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($role['Role']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'roles', + 'action' => 'delete', + $role['Role']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $role['Role']['id'], + $role['Role']['title'], + $role['Role']['alias'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/scaffolds/.svn/entries b/app/views/scaffolds/.svn/entries new file mode 100644 index 0000000..d73fda7 --- /dev/null +++ b/app/views/scaffolds/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/scaffolds +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-09-04T08:55:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/app/views/scaffolds/.svn/text-base/empty.svn-base b/app/views/scaffolds/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/app/views/scaffolds/empty b/app/views/scaffolds/empty new file mode 100644 index 0000000..e69de29 diff --git a/app/views/settings/.svn/entries b/app/views/settings/.svn/entries new file mode 100644 index 0000000..f6da7ff --- /dev/null +++ b/app/views/settings/.svn/entries @@ -0,0 +1,232 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/settings +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +4dc8162e6916348385f987a872519bcf +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1187 + +admin_dashboard.ctp +file + + + + +2010-09-04T08:55:28.000000Z +8429252cea96d9913d2ac452ffc3e54d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +82 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +975e977f7c2e66ea9919bd14fbe85793 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2473 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +0f001067191825278569f52b5d4cb8f1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1161 + +admin_view.ctp +file + + + + +2010-09-04T08:55:28.000000Z +f00604e958fd8969b2d28d89761dc41e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1960 + +admin_prefix.ctp +file + + + + +2010-09-04T08:55:28.000000Z +1aacafdc536826765b01c1a4cf907af4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2388 + diff --git a/app/views/settings/.svn/text-base/admin_add.ctp.svn-base b/app/views/settings/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..9791316 --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,32 @@ +
    +

    +create('Setting');?> +
    +
    +
      +
    • +
    • +
    + +
    + input('key', array('rel' => __("e.g., 'Site.title'", true))); + echo $form->input('value'); + ?> +
    + +
    + input('title'); + echo $form->input('description'); + echo $form->input('input_type', array('rel' => __("e.g., 'text' or 'textarea'", true))); + echo $form->input('editable', array('checked' => 'checked')); + //echo $form->input('weight'); + echo $form->input('params'); + ?> +
    + +
    +
    +end('Submit');?> +
    diff --git a/app/views/settings/.svn/text-base/admin_dashboard.ctp.svn-base b/app/views/settings/.svn/text-base/admin_dashboard.ctp.svn-base new file mode 100644 index 0000000..42245cc --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_dashboard.ctp.svn-base @@ -0,0 +1,3 @@ +
    +

    +
    \ No newline at end of file diff --git a/app/views/settings/.svn/text-base/admin_edit.ctp.svn-base b/app/views/settings/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..46276ee --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,33 @@ +
    +

    + create('Setting');?> +
    +
    +
      +
    • +
    • +
    + +
    + input('id'); + echo $form->input('key', array('rel' => __("e.g., 'Site.title'", true))); + echo $form->input('value'); + ?> +
    + +
    + input('title'); + echo $form->input('description'); + echo $form->input('input_type', array('rel' => __("e.g., 'text' or 'textarea'", true))); + echo $form->input('editable'); + //echo $form->input('weight'); + echo $form->input('params'); + ?> +
    + +
    +
    + end('Submit');?> +
    diff --git a/app/views/settings/.svn/text-base/admin_index.ctp.svn-base b/app/views/settings/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..209c068 --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,59 @@ +
    +

    + +
    +
      +
    • link(__('New Setting', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('key'), + $paginator->sort('value'), + $paginator->sort('editable'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($settings AS $setting) { + $actions = $html->link(__('Move up', true), array('controller' => 'settings', 'action' => 'moveup', $setting['Setting']['id'])); + $actions .= ' ' . $html->link(__('Move down', true), array('controller' => 'settings', 'action' => 'movedown', $setting['Setting']['id'])); + $actions .= ' ' . $html->link(__('Edit', true), array('controller' => 'settings', 'action' => 'edit', $setting['Setting']['id'])); + $actions .= ' ' . $layout->adminRowActions($setting['Setting']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'settings', + 'action' => 'delete', + $setting['Setting']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $key = $setting['Setting']['key']; + $keyE = explode('.', $key); + $keyPrefix = $keyE['0']; + if (isset($keyE['1'])) { + $keyTitle = '.' . $keyE['1']; + } else { + $keyTitle = ''; + } + + $rows[] = array( + $setting['Setting']['id'], + $html->link($keyPrefix, array('controller' => 'settings', 'action' => 'index', 'p' => $keyPrefix)) . $keyTitle, + $text->truncate($setting['Setting']['value'], 20), + $setting['Setting']['editable'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/settings/.svn/text-base/admin_prefix.ctp.svn-base b/app/views/settings/.svn/text-base/admin_prefix.ctp.svn-base new file mode 100644 index 0000000..d9af62f --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_prefix.ctp.svn-base @@ -0,0 +1,63 @@ +
    +

    + + create('Setting', array( + 'url' => array( + 'controller' => 'settings', + 'action' => 'prefix', + $prefix, + ), + )); + ?> +
    + '; + echo $form->input("Setting.$i.id", array('value' => $setting['Setting']['id'])); + echo $form->input("Setting.$i.key", array('type' => 'hidden', 'value' => $key)); + if ($setting['Setting']['input_type'] == 'checkbox') { + if ($setting['Setting']['value'] == 1) { + echo $form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $setting['Setting']['input_type'], + 'checked' => 'checked', + 'rel' => $setting['Setting']['description'], + )); + } else { + echo $form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $setting['Setting']['input_type'], + 'rel' => $setting['Setting']['description'], + )); + } + } else { + echo $form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $inputType, + 'value' => $setting['Setting']['value'], + 'rel' => $setting['Setting']['description'], + )); + } + echo "
    "; + $i++; + } + ?> + + end("Submit"); ?> + \ No newline at end of file diff --git a/app/views/settings/.svn/text-base/admin_view.ctp.svn-base b/app/views/settings/.svn/text-base/admin_view.ctp.svn-base new file mode 100644 index 0000000..0cc85db --- /dev/null +++ b/app/views/settings/.svn/text-base/admin_view.ctp.svn-base @@ -0,0 +1,48 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • link(__('Edit Setting', true), array('action'=>'edit', $setting['Setting']['id'])); ?>
    • +
    • link(__('Delete Setting', true), array('action'=>'delete', $setting['Setting']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $setting['Setting']['id'])); ?>
    • +
    • link(__('List Settings', true), array('action'=>'index')); ?>
    • +
    • link(__('New Setting', true), array('action'=>'add')); ?>
    • +
    +
    diff --git a/app/views/settings/admin_add.ctp b/app/views/settings/admin_add.ctp new file mode 100644 index 0000000..a7e3481 --- /dev/null +++ b/app/views/settings/admin_add.ctp @@ -0,0 +1,42 @@ +
    +

    + Form->create('Setting');?> +
    +
    +
      +
    • +
    • +
    + +
    + Form->input('key', array('rel' => __("e.g., 'Site.title'", true))); + echo $this->Form->input('value'); + ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('description'); + echo $this->Form->input('input_type', array('rel' => __("e.g., 'text' or 'textarea'", true))); + echo $this->Form->input('editable', array('checked' => 'checked')); + //echo $this->Form->input('weight'); + echo $this->Form->input('params'); + ?> +
    + +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    diff --git a/app/views/settings/admin_dashboard.ctp b/app/views/settings/admin_dashboard.ctp new file mode 100644 index 0000000..42245cc --- /dev/null +++ b/app/views/settings/admin_dashboard.ctp @@ -0,0 +1,3 @@ +
    +

    +
    \ No newline at end of file diff --git a/app/views/settings/admin_edit.ctp b/app/views/settings/admin_edit.ctp new file mode 100644 index 0000000..b51ec91 --- /dev/null +++ b/app/views/settings/admin_edit.ctp @@ -0,0 +1,42 @@ +
    +

    + Form->create('Setting');?> +
    +
    +
      +
    • +
    • +
    + +
    + Form->input('id'); + echo $this->Form->input('key', array('rel' => __("e.g., 'Site.title'", true))); + echo $this->Form->input('value'); + ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('description'); + echo $this->Form->input('input_type', array('rel' => __("e.g., 'text' or 'textarea'", true))); + echo $this->Form->input('editable'); + //echo $this->Form->input('weight'); + echo $this->Form->input('params'); + ?> +
    +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    diff --git a/app/views/settings/admin_index.ctp b/app/views/settings/admin_index.ctp new file mode 100644 index 0000000..bb58a5f --- /dev/null +++ b/app/views/settings/admin_index.ctp @@ -0,0 +1,59 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Setting', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('key'), + $paginator->sort('value'), + $paginator->sort('editable'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($settings AS $setting) { + $actions = $this->Html->link(__('Move up', true), array('controller' => 'settings', 'action' => 'moveup', $setting['Setting']['id'])); + $actions .= ' ' . $this->Html->link(__('Move down', true), array('controller' => 'settings', 'action' => 'movedown', $setting['Setting']['id'])); + $actions .= ' ' . $this->Html->link(__('Edit', true), array('controller' => 'settings', 'action' => 'edit', $setting['Setting']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($setting['Setting']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'settings', + 'action' => 'delete', + $setting['Setting']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $key = $setting['Setting']['key']; + $keyE = explode('.', $key); + $keyPrefix = $keyE['0']; + if (isset($keyE['1'])) { + $keyTitle = '.' . $keyE['1']; + } else { + $keyTitle = ''; + } + + $rows[] = array( + $setting['Setting']['id'], + $this->Html->link($keyPrefix, array('controller' => 'settings', 'action' => 'index', 'p' => $keyPrefix)) . $keyTitle, + $this->Text->truncate($setting['Setting']['value'], 20), + $setting['Setting']['editable'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/settings/admin_prefix.ctp b/app/views/settings/admin_prefix.ctp new file mode 100644 index 0000000..2ba9b98 --- /dev/null +++ b/app/views/settings/admin_prefix.ctp @@ -0,0 +1,68 @@ +
    +

    + + Form->create('Setting', array( + 'url' => array( + 'controller' => 'settings', + 'action' => 'prefix', + $prefix, + ), + )); + ?> +
    + '; + echo $this->Form->input("Setting.$i.id", array('value' => $setting['Setting']['id'])); + echo $this->Form->input("Setting.$i.key", array('type' => 'hidden', 'value' => $key)); + if ($setting['Setting']['input_type'] == 'checkbox') { + if ($setting['Setting']['value'] == 1) { + echo $this->Form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $setting['Setting']['input_type'], + 'checked' => 'checked', + 'rel' => $setting['Setting']['description'], + )); + } else { + echo $this->Form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $setting['Setting']['input_type'], + 'rel' => $setting['Setting']['description'], + )); + } + } else { + echo $this->Form->input("Setting.$i.value", array( + 'label' => $label, + 'type' => $inputType, + 'value' => $setting['Setting']['value'], + 'rel' => $setting['Setting']['description'], + )); + } + echo "
    "; + $i++; + } + ?> + + +
    + Form->end(__('Save', true)); + ?> +
    + \ No newline at end of file diff --git a/app/views/settings/admin_view.ctp b/app/views/settings/admin_view.ctp new file mode 100644 index 0000000..96a6927 --- /dev/null +++ b/app/views/settings/admin_view.ctp @@ -0,0 +1,48 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + +
    +
    +
    +
      +
    • Html->link(__('Edit Setting', true), array('action'=>'edit', $setting['Setting']['id'])); ?>
    • +
    • Html->link(__('Delete Setting', true), array('action'=>'delete', $setting['Setting']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $setting['Setting']['id'])); ?>
    • +
    • Html->link(__('List Settings', true), array('action'=>'index')); ?>
    • +
    • Html->link(__('New Setting', true), array('action'=>'add')); ?>
    • +
    +
    diff --git a/app/views/terms/.svn/entries b/app/views/terms/.svn/entries new file mode 100644 index 0000000..b14f895 --- /dev/null +++ b/app/views/terms/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/terms +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +5479f9fd0c45ff1ae160dff7b3fa139e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1033 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +483e1b4e408d336d8e06503ab74f6262 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2274 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +600fa588065b3059ed33c7e5107593a5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1197 + diff --git a/app/views/terms/.svn/text-base/admin_add.ctp.svn-base b/app/views/terms/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..e70d024 --- /dev/null +++ b/app/views/terms/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,38 @@ +script(array('terms'), false); +?> +
    +

    + + create('Term', array( + 'url' => array( + 'controller' => 'terms', + 'action' => 'add', + $vocabulary['Vocabulary']['id'], + ), + )); + ?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('Taxonomy.parent_id', array( + 'options' => $parentTree, + 'empty' => true, + )); + echo $form->input('title'); + echo $form->input('slug', array('class' => 'slug')); + echo $form->input('description'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/terms/.svn/text-base/admin_edit.ctp.svn-base b/app/views/terms/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..bcedb0b --- /dev/null +++ b/app/views/terms/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,31 @@ +
    +

    + + create('Term', array( + 'url' => '/' . $this->params['url']['url'], + )); + ?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('Taxonomy.parent_id', array( + 'options' => $parentTree, + 'empty' => true, + )); + echo $form->input('title'); + echo $form->input('slug', array('class' => 'slug')); + echo $form->input('description'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/terms/.svn/text-base/admin_index.ctp.svn-base b/app/views/terms/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..2f1d5e6 --- /dev/null +++ b/app/views/terms/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,74 @@ +
    +

    + +
    +
      +
    • link(__('New Term', true), array('action' => 'add', $vocabulary['Vocabulary']['id'])); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + echo $form->create('Term', array( + 'url' => array( + 'controller' => 'terms', + 'action' => 'process', + 'vocabulary' => $vocabulary['Vocabulary']['id'], + ), + )); + ?> + + tableHeaders(array( + '', + __('Id', true), + __('Title', true), + __('Slug', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($termsTree AS $id => $title) { + $actions = $html->link(__('Move up', true), array( + 'action' => 'moveup', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $html->link(__('Move down', true), array( + 'action' => 'movedown', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $html->link(__('Edit', true), array( + 'action' => 'edit', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $layout->adminRowActions($id); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'action' => 'delete', + $id, + $vocabulary['Vocabulary']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + '', + $id, + $title, + $terms[$id]['slug'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    \ No newline at end of file diff --git a/app/views/terms/admin_add.ctp b/app/views/terms/admin_add.ctp new file mode 100644 index 0000000..a54f1b1 --- /dev/null +++ b/app/views/terms/admin_add.ctp @@ -0,0 +1,49 @@ +Html->script(array('terms'), false); +?> +
    +

    + + Form->create('Term', array( + 'url' => array( + 'controller' => 'terms', + 'action' => 'add', + $vocabulary['Vocabulary']['id'], + ), + )); + ?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('Taxonomy.parent_id', array( + 'options' => $parentTree, + 'empty' => true, + )); + echo $this->Form->input('title'); + echo $this->Form->input('slug', array('class' => 'slug')); + echo $this->Form->input('description'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + $vocabularyId, + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/terms/admin_edit.ctp b/app/views/terms/admin_edit.ctp new file mode 100644 index 0000000..e3ef635 --- /dev/null +++ b/app/views/terms/admin_edit.ctp @@ -0,0 +1,42 @@ +
    +

    + + Form->create('Term', array( + 'url' => '/' . $this->params['url']['url'], + )); + ?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('Taxonomy.parent_id', array( + 'options' => $parentTree, + 'empty' => true, + )); + echo $this->Form->input('title'); + echo $this->Form->input('slug', array('class' => 'slug')); + echo $this->Form->input('description'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + $vocabularyId, + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/terms/admin_index.ctp b/app/views/terms/admin_index.ctp new file mode 100644 index 0000000..30ae4fc --- /dev/null +++ b/app/views/terms/admin_index.ctp @@ -0,0 +1,74 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Term', true), array('action' => 'add', $vocabulary['Vocabulary']['id'])); ?>
    • +
    +
    + + params['named'])) { + foreach ($this->params['named'] AS $nn => $nv) { + $paginator->options['url'][] = $nn . ':' . $nv; + } + } + + echo $this->Form->create('Term', array( + 'url' => array( + 'controller' => 'terms', + 'action' => 'process', + 'vocabulary' => $vocabulary['Vocabulary']['id'], + ), + )); + ?> + + Html->tableHeaders(array( + '', + __('Id', true), + __('Title', true), + __('Slug', true), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($termsTree AS $id => $title) { + $actions = $this->Html->link(__('Move up', true), array( + 'action' => 'moveup', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $this->Html->link(__('Move down', true), array( + 'action' => 'movedown', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $this->Html->link(__('Edit', true), array( + 'action' => 'edit', + $id, + $vocabulary['Vocabulary']['id'], + )); + $actions .= ' ' . $this->Layout->adminRowActions($id); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'action' => 'delete', + $id, + $vocabulary['Vocabulary']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + '', + $id, + $title, + $terms[$id]['slug'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    \ No newline at end of file diff --git a/app/views/types/.svn/entries b/app/views/types/.svn/entries new file mode 100644 index 0000000..5f3b7f9 --- /dev/null +++ b/app/views/types/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/types +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +be35f912c37dd7f97d518f848aaf7a93 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3281 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +1400941157b7f0bbe11805d4bb770638 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1764 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +d7d1f2d3351cbc04b4471dcca6c784b2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3260 + diff --git a/app/views/types/.svn/text-base/admin_add.ctp.svn-base b/app/views/types/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..9af854d --- /dev/null +++ b/app/views/types/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,84 @@ +
    +

    + create('Type');?> +
    +
    +
      +
    • +
    • +
    • +
    • +
    • + adminTabs(); ?> +
    + +
    + input('title'); + echo $form->input('alias'); + echo $form->input('description'); + ?> +
    + +
    + input('Vocabulary.Vocabulary'); + ?> +
    + +
    + input('format_show_author', array( + 'label' => __('Show author\'s name', true), + )); + echo $form->input('format_show_date', array( + 'label' => __('Show date', true), + )); + ?> +
    + +
    + __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ); + echo $form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => $options, + 'value' => 2, + )); + echo $form->input('comment_approve', array( + 'label' => 'Auto approve comments', + )); + echo $form->input('comment_spam_protection', array( + 'label' => __('Spam protection (requires Akismet API key)', true), + )); + echo $form->input('comment_captcha', array( + 'label' => __('Use captcha? (requires Recaptcha API key)', true), + )); + ?> + +

    + link(__('You can manage your API keys here.', true), array( + 'controller' => 'settings', + 'action' => 'prefix', + 'Service', + )); + ?> +

    +
    + +
    + input('Type.params'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/types/.svn/text-base/admin_edit.ctp.svn-base b/app/views/types/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..ad2ced6 --- /dev/null +++ b/app/views/types/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,85 @@ +
    +

    + + create('Type');?> +
    +
    +
      +
    • +
    • +
    • +
    • +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('title'); + echo $form->input('alias', array('disabled' => 'disabled')); + echo $form->input('description'); + ?> +
    + +
    + input('Vocabulary.Vocabulary'); + ?> +
    + +
    + input('format_show_author', array( + 'label' => __('Show author\'s name', true), + )); + echo $form->input('format_show_date', array( + 'label' => __('Show date', true), + )); + ?> +
    + +
    + __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ); + echo $form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => $options, + )); + echo $form->input('comment_approve', array( + 'label' => 'Auto approve comments', + )); + echo $form->input('comment_spam_protection', array( + 'label' => 'Spam protection (requires Akismet API key)', + )); + echo $form->input('comment_captcha', array( + 'label' => 'Use captcha? (requires Recaptcha API key)', + )); + ?> + +

    + link(__('You can manage your API keys here.', true), array( + 'controller' => 'settings', + 'action' => 'prefix', + 'Service', + )); + ?> +

    +
    + +
    + input('Type.params'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/types/.svn/text-base/admin_index.ctp.svn-base b/app/views/types/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..62550c8 --- /dev/null +++ b/app/views/types/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,48 @@ +
    +

    + +
    +
      +
    • link(__('New Type', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + $paginator->sort('description'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($types AS $type) { + $actions = $html->link(__('Edit', true), array('controller' => 'types', 'action' => 'edit', $type['Type']['id'])); + $actions .= ' ' . $layout->adminRowActions($type['Type']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'types', + 'action' => 'delete', + $type['Type']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $type['Type']['id'], + $type['Type']['title'], + $type['Type']['alias'], + $text->truncate($type['Type']['description'], 50), + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/types/admin_add.ctp b/app/views/types/admin_add.ctp new file mode 100644 index 0000000..5d50fe4 --- /dev/null +++ b/app/views/types/admin_add.ctp @@ -0,0 +1,94 @@ +
    +

    + Form->create('Type');?> +
    +
    +
      +
    • +
    • +
    • +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('alias'); + echo $this->Form->input('description'); + ?> +
    + +
    + Form->input('Vocabulary.Vocabulary'); + ?> +
    + +
    + Form->input('format_show_author', array( + 'label' => __('Show author\'s name', true), + )); + echo $this->Form->input('format_show_date', array( + 'label' => __('Show date', true), + )); + ?> +
    + +
    + __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ); + echo $this->Form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => $options, + 'value' => 2, + )); + echo $this->Form->input('comment_approve', array( + 'label' => 'Auto approve comments', + )); + echo $this->Form->input('comment_spam_protection', array( + 'label' => __('Spam protection (requires Akismet API key)', true), + )); + echo $this->Form->input('comment_captcha', array( + 'label' => __('Use captcha? (requires Recaptcha API key)', true), + )); + ?> + +

    + Html->link(__('You can manage your API keys here.', true), array( + 'controller' => 'settings', + 'action' => 'prefix', + 'Service', + )); + ?> +

    +
    + +
    + Form->input('Type.params'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/types/admin_edit.ctp b/app/views/types/admin_edit.ctp new file mode 100644 index 0000000..4f782d7 --- /dev/null +++ b/app/views/types/admin_edit.ctp @@ -0,0 +1,95 @@ +
    +

    + + Form->create('Type');?> +
    +
    +
      +
    • +
    • +
    • +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('title'); + echo $this->Form->input('alias', array('disabled' => 'disabled')); + echo $this->Form->input('description'); + ?> +
    + +
    + Form->input('Vocabulary.Vocabulary'); + ?> +
    + +
    + Form->input('format_show_author', array( + 'label' => __('Show author\'s name', true), + )); + echo $this->Form->input('format_show_date', array( + 'label' => __('Show date', true), + )); + ?> +
    + +
    + __('Disabled', true), + '1' => __('Read only', true), + '2' => __('Read/Write', true), + ); + echo $this->Form->input('comment_status', array( + 'type' => 'radio', + 'div' => array('class' => 'radio'), + 'options' => $options, + )); + echo $this->Form->input('comment_approve', array( + 'label' => 'Auto approve comments', + )); + echo $this->Form->input('comment_spam_protection', array( + 'label' => 'Spam protection (requires Akismet API key)', + )); + echo $this->Form->input('comment_captcha', array( + 'label' => 'Use captcha? (requires Recaptcha API key)', + )); + ?> + +

    + Html->link(__('You can manage your API keys here.', true), array( + 'controller' => 'settings', + 'action' => 'prefix', + 'Service', + )); + ?> +

    +
    + +
    + Form->input('Type.params'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/types/admin_index.ctp b/app/views/types/admin_index.ctp new file mode 100644 index 0000000..ad7f8c7 --- /dev/null +++ b/app/views/types/admin_index.ctp @@ -0,0 +1,48 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Type', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + $paginator->sort('description'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($types AS $type) { + $actions = $this->Html->link(__('Edit', true), array('controller' => 'types', 'action' => 'edit', $type['Type']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($type['Type']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'types', + 'action' => 'delete', + $type['Type']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $type['Type']['id'], + $type['Type']['title'], + $type['Type']['alias'], + $this->Text->truncate($type['Type']['description'], 50), + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/urls/.svn/entries b/app/views/urls/.svn/entries new file mode 100644 index 0000000..34285cb --- /dev/null +++ b/app/views/urls/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/urls +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +url.ctp +file + + + + +2010-05-15T15:12:24.000000Z +6aff104c2ef30a3a7331374ef84aba58 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +142 + +teste.ctp +file + + + + +2010-09-15T19:11:06.000000Z +1ae2a974d42be2b6a19a939d7719440a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +59 + +index.ctp +file + + + + +2010-05-15T19:26:24.000000Z +6aff104c2ef30a3a7331374ef84aba58 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +142 + diff --git a/app/views/urls/.svn/text-base/index.ctp.svn-base b/app/views/urls/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..8487cc9 --- /dev/null +++ b/app/views/urls/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,4 @@ +

    URL inválida

    + +

    O endereço que você tentou acessar não existe neste site. Visite a página principal ou +tente usar a busca.

    \ No newline at end of file diff --git a/app/views/urls/.svn/text-base/teste.ctp.svn-base b/app/views/urls/.svn/text-base/teste.ctp.svn-base new file mode 100644 index 0000000..0043c18 --- /dev/null +++ b/app/views/urls/.svn/text-base/teste.ctp.svn-base @@ -0,0 +1,10 @@ + +asd \ No newline at end of file diff --git a/app/views/urls/.svn/text-base/url.ctp.svn-base b/app/views/urls/.svn/text-base/url.ctp.svn-base new file mode 100644 index 0000000..8487cc9 --- /dev/null +++ b/app/views/urls/.svn/text-base/url.ctp.svn-base @@ -0,0 +1,4 @@ +

    URL inválida

    + +

    O endereço que você tentou acessar não existe neste site. Visite a página principal ou +tente usar a busca.

    \ No newline at end of file diff --git a/app/views/urls/index.ctp b/app/views/urls/index.ctp new file mode 100644 index 0000000..8487cc9 --- /dev/null +++ b/app/views/urls/index.ctp @@ -0,0 +1,4 @@ +

    URL inválida

    + +

    O endereço que você tentou acessar não existe neste site. Visite a página principal ou +tente usar a busca.

    \ No newline at end of file diff --git a/app/views/urls/teste.ctp b/app/views/urls/teste.ctp new file mode 100644 index 0000000..0043c18 --- /dev/null +++ b/app/views/urls/teste.ctp @@ -0,0 +1,10 @@ + +asd \ No newline at end of file diff --git a/app/views/urls/url.ctp b/app/views/urls/url.ctp new file mode 100644 index 0000000..8487cc9 --- /dev/null +++ b/app/views/urls/url.ctp @@ -0,0 +1,4 @@ +

    URL inválida

    + +

    O endereço que você tentou acessar não existe neste site. Visite a página principal ou +tente usar a busca.

    \ No newline at end of file diff --git a/app/views/users/.svn/entries b/app/views/users/.svn/entries new file mode 100644 index 0000000..78813ed --- /dev/null +++ b/app/views/users/.svn/entries @@ -0,0 +1,402 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/users +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +view.ctp +file + + + + +2010-09-04T08:55:28.000000Z +b38d5f5e5edfbdd73b964a8bf5501f0b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +77 + +admin_reset_password.ctp +file + + + + +2010-09-04T08:55:28.000000Z +6618879ca8deb1e5096ff85400f52f2e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +664 + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +669726b1bd3266317428b64336fd6857 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1094 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +7a02262f6c8dc2a3aed934c9ffdfe01f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1792 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c28446b3e834e563a423dbc7d8f5abb0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +831 + +admin_login.ctp +file + + + + +2010-09-04T08:55:28.000000Z +b673f73e2319a096fcc2cebb4da91762 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +578 + +forgot.ctp +file + + + + +2010-09-04T08:55:28.000000Z +c8bfb17303a096d4fab87b8685d5d03a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +333 + +reset.ctp +file + + + + +2010-09-04T08:55:28.000000Z +59e9dd25b29a56cea7db1425c8b867ae +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +393 + +index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +a72ca36d144b21969c123ca9dd97bc2e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +188 + +add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +25b25bec0c61ed92fd3a5546ceb0d337 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +449 + +login.ctp +file + + + + +2010-09-04T08:55:28.000000Z +397754f20e4de3f823a5c8adac155ca9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +364 + diff --git a/app/views/users/.svn/text-base/add.ctp.svn-base b/app/views/users/.svn/text-base/add.ctp.svn-base new file mode 100644 index 0000000..ab8b896 --- /dev/null +++ b/app/views/users/.svn/text-base/add.ctp.svn-base @@ -0,0 +1,14 @@ +
    +

    + create('User');?> +
    + input('username'); + echo $form->input('password', array('value' => '')); + echo $form->input('name'); + echo $form->input('email'); + echo $form->input('website'); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/admin_add.ctp.svn-base b/app/views/users/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..3cf2845 --- /dev/null +++ b/app/views/users/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,26 @@ +
    +

    + create('User');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('role_id'); + echo $form->input('username'); + echo $form->input('password'); + echo $form->input('name'); + echo $form->input('email'); + echo $form->input('website'); + echo $form->input('status'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/admin_edit.ctp.svn-base b/app/views/users/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..a60750f --- /dev/null +++ b/app/views/users/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,32 @@ +
    +

    + +
    +
      +
    • link(__('Reset password', true), array('action' => 'reset_password', $this->params['pass']['0'])); ?>
    • +
    +
    + + create('User');?> +
    +
    +
      +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('role_id'); + echo $form->input('username'); + echo $form->input('name'); + echo $form->input('email'); + echo $form->input('website'); + echo $form->input('status'); + ?> +
    + adminTabs(); ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/admin_index.ctp.svn-base b/app/views/users/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..5eadc34 --- /dev/null +++ b/app/views/users/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,50 @@ +
    +

    + +
    +
      +
    • link(__('New User', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + __('Role', true), + $paginator->sort('username'), + $paginator->sort('name'), + $paginator->sort('email'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($users AS $user) { + $actions = $html->link(__('Edit', true), array('controller' => 'users', 'action' => 'edit', $user['User']['id'])); + $actions .= ' ' . $layout->adminRowActions($user['User']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'users', + 'action' => 'delete', + $user['User']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $user['User']['id'], + $user['Role']['title'], + $user['User']['username'], + $user['User']['name'], + $user['User']['email'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/admin_login.ctp.svn-base b/app/views/users/.svn/text-base/admin_login.ctp.svn-base new file mode 100644 index 0000000..7d5c6b3 --- /dev/null +++ b/app/views/users/.svn/text-base/admin_login.ctp.svn-base @@ -0,0 +1,19 @@ +
    + create('User', array('url' => array('controller' => 'users', 'action' => 'login')));?> +
    + input('username'); + echo $form->input('password'); + ?> +
    + link(__('Forgot password?', true), array( + 'admin' => false, + 'controller' => 'users', + 'action' => 'forgot', + ), array( + 'class' => 'forgot', + )); + echo $form->end(__('Log In', true)); + ?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/admin_reset_password.ctp.svn-base b/app/views/users/.svn/text-base/admin_reset_password.ctp.svn-base new file mode 100644 index 0000000..6462090 --- /dev/null +++ b/app/views/users/.svn/text-base/admin_reset_password.ctp.svn-base @@ -0,0 +1,13 @@ +
    +

    : data['User']['username']; ?>

    + create('User', array('url' => array('action' => 'reset_password')));?> +
    + input('id'); + echo $form->input('username', array('type' => 'hidden')); + echo $form->input('current_password', array('label' => __('Current Password', true), 'type' => 'password', 'value' => '')); + echo $form->input('password', array('label' => __('New Password', true), 'value' => '')); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/forgot.ctp.svn-base b/app/views/users/.svn/text-base/forgot.ctp.svn-base new file mode 100644 index 0000000..3f691c8 --- /dev/null +++ b/app/views/users/.svn/text-base/forgot.ctp.svn-base @@ -0,0 +1,10 @@ +
    +

    + create('User', array('url' => array('controller' => 'users', 'action' => 'forgot')));?> +
    + input('username'); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/index.ctp.svn-base b/app/views/users/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..0bc49b0 --- /dev/null +++ b/app/views/users/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,5 @@ +
    +

    + +

    read('Auth.User.username'); ?>

    +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/login.ctp.svn-base b/app/views/users/.svn/text-base/login.ctp.svn-base new file mode 100644 index 0000000..835f883 --- /dev/null +++ b/app/views/users/.svn/text-base/login.ctp.svn-base @@ -0,0 +1,11 @@ +
    +

    + create('User', array('url' => array('controller' => 'users', 'action' => 'login')));?> +
    + input('username'); + echo $form->input('password'); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/reset.ctp.svn-base b/app/views/users/.svn/text-base/reset.ctp.svn-base new file mode 100644 index 0000000..b1df27f --- /dev/null +++ b/app/views/users/.svn/text-base/reset.ctp.svn-base @@ -0,0 +1,10 @@ +
    +

    + create('User', array('url' => array('controller' => 'users', 'action' => 'reset', $username, $key)));?> +
    + input('password', array('label' => __('New password', true))); + ?> +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/.svn/text-base/view.ctp.svn-base b/app/views/users/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..566be99 --- /dev/null +++ b/app/views/users/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,4 @@ +
    +

    + +
    \ No newline at end of file diff --git a/app/views/users/add.ctp b/app/views/users/add.ctp new file mode 100644 index 0000000..cd275a3 --- /dev/null +++ b/app/views/users/add.ctp @@ -0,0 +1,14 @@ +
    +

    + Form->create('User');?> +
    + Form->input('username'); + echo $this->Form->input('password', array('value' => '')); + echo $this->Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('website'); + ?> +
    + Form->end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/admin_add.ctp b/app/views/users/admin_add.ctp new file mode 100644 index 0000000..fb5ef72 --- /dev/null +++ b/app/views/users/admin_add.ctp @@ -0,0 +1,36 @@ +
    +

    + Form->create('User');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('role_id'); + echo $this->Form->input('username'); + echo $this->Form->input('password'); + echo $this->Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('website'); + echo $this->Form->input('status'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/users/admin_edit.ctp b/app/views/users/admin_edit.ctp new file mode 100644 index 0000000..2627e1d --- /dev/null +++ b/app/views/users/admin_edit.ctp @@ -0,0 +1,43 @@ +
    +

    + +
    +
      +
    • Html->link(__('Reset password', true), array('action' => 'reset_password', $this->params['pass']['0'])); ?>
    • +
    +
    + + Form->create('User');?> +
    +
    +
      +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('role_id'); + echo $this->Form->input('username'); + echo $this->Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('website'); + echo $this->Form->input('status'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/users/admin_index.ctp b/app/views/users/admin_index.ctp new file mode 100644 index 0000000..0e854ed --- /dev/null +++ b/app/views/users/admin_index.ctp @@ -0,0 +1,50 @@ +
    +

    + +
    +
      +
    • Html->link(__('New User', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + __('Role', true), + $paginator->sort('username'), + $paginator->sort('name'), + $paginator->sort('email'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($users AS $user) { + $actions = $this->Html->link(__('Edit', true), array('controller' => 'users', 'action' => 'edit', $user['User']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($user['User']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'users', + 'action' => 'delete', + $user['User']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $user['User']['id'], + $user['Role']['title'], + $user['User']['username'], + $user['User']['name'], + $user['User']['email'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    \ No newline at end of file diff --git a/app/views/users/admin_login.ctp b/app/views/users/admin_login.ctp new file mode 100644 index 0000000..f90f0c3 --- /dev/null +++ b/app/views/users/admin_login.ctp @@ -0,0 +1,19 @@ +
    + Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login')));?> +
    + Form->input('username'); + echo $this->Form->input('password'); + ?> +
    + Html->link(__('Forgot password?', true), array( + 'admin' => false, + 'controller' => 'users', + 'action' => 'forgot', + ), array( + 'class' => 'forgot', + )); + echo $this->Form->end(__('Log In', true)); + ?> +
    \ No newline at end of file diff --git a/app/views/users/admin_reset_password.ctp b/app/views/users/admin_reset_password.ctp new file mode 100644 index 0000000..1f5a33b --- /dev/null +++ b/app/views/users/admin_reset_password.ctp @@ -0,0 +1,23 @@ +
    +

    : data['User']['username']; ?>

    + Form->create('User', array('url' => array('action' => 'reset_password')));?> +
    + Form->input('id'); + echo $this->Form->input('username', array('type' => 'hidden')); + echo $this->Form->input('current_password', array('label' => __('Current Password', true), 'type' => 'password', 'value' => '')); + echo $this->Form->input('password', array('label' => __('New Password', true), 'value' => '')); + ?> +
    + +
    + Form->end(__('Reset', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/users/forgot.ctp b/app/views/users/forgot.ctp new file mode 100644 index 0000000..27fd2ba --- /dev/null +++ b/app/views/users/forgot.ctp @@ -0,0 +1,10 @@ +
    +

    + Form->create('User', array('url' => array('controller' => 'users', 'action' => 'forgot')));?> +
    + Form->input('username'); + ?> +
    + Form->end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/index.ctp b/app/views/users/index.ctp new file mode 100644 index 0000000..af7864f --- /dev/null +++ b/app/views/users/index.ctp @@ -0,0 +1,5 @@ +
    +

    + +

    Session->read('Auth.User.username'); ?>

    +
    \ No newline at end of file diff --git a/app/views/users/login.ctp b/app/views/users/login.ctp new file mode 100644 index 0000000..273ee9f --- /dev/null +++ b/app/views/users/login.ctp @@ -0,0 +1,11 @@ +
    +

    + Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login')));?> +
    + Form->input('username'); + echo $this->Form->input('password'); + ?> +
    + Form->end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/reset.ctp b/app/views/users/reset.ctp new file mode 100644 index 0000000..7edf8be --- /dev/null +++ b/app/views/users/reset.ctp @@ -0,0 +1,10 @@ +
    +

    + Form->create('User', array('url' => array('controller' => 'users', 'action' => 'reset', $username, $key)));?> +
    + Form->input('password', array('label' => __('New password', true))); + ?> +
    + Form->end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/users/view.ctp b/app/views/users/view.ctp new file mode 100644 index 0000000..566be99 --- /dev/null +++ b/app/views/users/view.ctp @@ -0,0 +1,4 @@ +
    +

    + +
    \ No newline at end of file diff --git a/app/views/vocabularies/.svn/entries b/app/views/vocabularies/.svn/entries new file mode 100644 index 0000000..7248ac5 --- /dev/null +++ b/app/views/vocabularies/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/views/vocabularies +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin_edit.ctp +file + + + + +2010-09-04T08:55:28.000000Z +ada1da6d16847b8bebf71ad9beaac359 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1275 + +admin_index.ctp +file + + + + +2010-09-04T08:55:28.000000Z +13f40d39ec0cd838e01827cc3a3ebe47 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2240 + +admin_add.ctp +file + + + + +2010-09-04T08:55:28.000000Z +45dd25737803065d0840564e0c0c3a69 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1310 + diff --git a/app/views/vocabularies/.svn/text-base/admin_add.ctp.svn-base b/app/views/vocabularies/.svn/text-base/admin_add.ctp.svn-base new file mode 100644 index 0000000..5c0203e --- /dev/null +++ b/app/views/vocabularies/.svn/text-base/admin_add.ctp.svn-base @@ -0,0 +1,35 @@ +script(array('vocabularies'), false); +?> +
    +

    + create('Vocabulary');?> +
    +
    +
      +
    • +
    • + adminTabs(); ?> +
    + +
    + input('title'); + echo $form->input('alias', array('class' => 'alias')); + echo $form->input('description'); + echo $form->input('Type.Type'); + ?> +
    + +
    + input('required'); + echo $form->input('multiple'); + echo $form->input('tags'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/vocabularies/.svn/text-base/admin_edit.ctp.svn-base b/app/views/vocabularies/.svn/text-base/admin_edit.ctp.svn-base new file mode 100644 index 0000000..a9a3b73 --- /dev/null +++ b/app/views/vocabularies/.svn/text-base/admin_edit.ctp.svn-base @@ -0,0 +1,34 @@ +
    +

    + + create('Vocabulary');?> +
    +
    +
      +
    • +
    • + adminTabs(); ?> +
    + +
    + input('id'); + echo $form->input('title'); + echo $form->input('alias'); + echo $form->input('description'); + echo $form->input('Type.Type'); + ?> +
    + +
    + input('required'); + echo $form->input('multiple'); + echo $form->input('tags'); + ?> +
    + adminTabs(); ?> +
    +
    + end('Submit');?> +
    \ No newline at end of file diff --git a/app/views/vocabularies/.svn/text-base/admin_index.ctp.svn-base b/app/views/vocabularies/.svn/text-base/admin_index.ctp.svn-base new file mode 100644 index 0000000..fbc002d --- /dev/null +++ b/app/views/vocabularies/.svn/text-base/admin_index.ctp.svn-base @@ -0,0 +1,49 @@ +
    +

    + +
    +
      +
    • link(__('New Vocabulary', true), array('action'=>'add')); ?>
    • +
    +
    + + + tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($vocabularies AS $vocabulary) { + $actions = $html->link(__('View terms', true), array('controller' => 'terms', 'action' => 'index', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $html->link(__('Edit', true), array('action' => 'edit', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $html->link(__('Move up', true), array('action' => 'moveup', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $html->link(__('Move down', true), array('action' => 'movedown', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $layout->adminRowActions($vocabulary['Vocabulary']['id']); + $actions .= ' ' . $html->link(__('Delete', true), array( + 'controller' => 'vocabularies', + 'action' => 'delete', + $vocabulary['Vocabulary']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $vocabulary['Vocabulary']['id'], + $html->link($vocabulary['Vocabulary']['title'], array('controller' => 'terms', 'action' => 'index', $vocabulary['Vocabulary']['id'])), + $vocabulary['Vocabulary']['alias'], + $actions, + ); + } + + echo $html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/views/vocabularies/admin_add.ctp b/app/views/vocabularies/admin_add.ctp new file mode 100644 index 0000000..72b1454 --- /dev/null +++ b/app/views/vocabularies/admin_add.ctp @@ -0,0 +1,45 @@ +Html->script(array('vocabularies'), false); +?> +
    +

    + Form->create('Vocabulary');?> +
    +
    +
      +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('title'); + echo $this->Form->input('alias', array('class' => 'alias')); + echo $this->Form->input('description'); + echo $this->Form->input('Type.Type'); + ?> +
    + +
    + Form->input('required'); + echo $this->Form->input('multiple'); + echo $this->Form->input('tags'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/vocabularies/admin_edit.ctp b/app/views/vocabularies/admin_edit.ctp new file mode 100644 index 0000000..5808775 --- /dev/null +++ b/app/views/vocabularies/admin_edit.ctp @@ -0,0 +1,44 @@ +
    +

    + + Form->create('Vocabulary');?> +
    +
    +
      +
    • +
    • + Layout->adminTabs(); ?> +
    + +
    + Form->input('id'); + echo $this->Form->input('title'); + echo $this->Form->input('alias'); + echo $this->Form->input('description'); + echo $this->Form->input('Type.Type'); + ?> +
    + +
    + Form->input('required'); + echo $this->Form->input('multiple'); + echo $this->Form->input('tags'); + ?> +
    + Layout->adminTabs(); ?> +
    +
    + +
    + Form->end(__('Save', true)); + echo $this->Html->link(__('Cancel', true), array( + 'action' => 'index', + ), array( + 'class' => 'cancel', + )); + ?> +
    +
    \ No newline at end of file diff --git a/app/views/vocabularies/admin_index.ctp b/app/views/vocabularies/admin_index.ctp new file mode 100644 index 0000000..1ee42fd --- /dev/null +++ b/app/views/vocabularies/admin_index.ctp @@ -0,0 +1,49 @@ +
    +

    + +
    +
      +
    • Html->link(__('New Vocabulary', true), array('action'=>'add')); ?>
    • +
    +
    + + + Html->tableHeaders(array( + $paginator->sort('id'), + $paginator->sort('title'), + $paginator->sort('alias'), + __('Actions', true), + )); + echo $tableHeaders; + + $rows = array(); + foreach ($vocabularies AS $vocabulary) { + $actions = $this->Html->link(__('View terms', true), array('controller' => 'terms', 'action' => 'index', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $this->Html->link(__('Edit', true), array('action' => 'edit', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $this->Html->link(__('Move up', true), array('action' => 'moveup', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $this->Html->link(__('Move down', true), array('action' => 'movedown', $vocabulary['Vocabulary']['id'])); + $actions .= ' ' . $this->Layout->adminRowActions($vocabulary['Vocabulary']['id']); + $actions .= ' ' . $this->Html->link(__('Delete', true), array( + 'controller' => 'vocabularies', + 'action' => 'delete', + $vocabulary['Vocabulary']['id'], + 'token' => $this->params['_Token']['key'], + ), null, __('Are you sure?', true)); + + $rows[] = array( + $vocabulary['Vocabulary']['id'], + $this->Html->link($vocabulary['Vocabulary']['title'], array('controller' => 'terms', 'action' => 'index', $vocabulary['Vocabulary']['id'])), + $vocabulary['Vocabulary']['alias'], + $actions, + ); + } + + echo $this->Html->tableCells($rows); + echo $tableHeaders; + ?> +
    +
    + +
    numbers(); ?>
    +
    counter(array('format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true))); ?>
    diff --git a/app/webroot/.htaccess b/app/webroot/.htaccess new file mode 100644 index 0000000..f9d8b93 --- /dev/null +++ b/app/webroot/.htaccess @@ -0,0 +1,6 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] + \ No newline at end of file diff --git a/app/webroot/.svn/entries b/app/webroot/.svn/entries new file mode 100644 index 0000000..2854c81 --- /dev/null +++ b/app/webroot/.svn/entries @@ -0,0 +1,284 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +ui-themes +dir + +theme.yml +file + + + + +2010-09-04T08:55:28.000000Z +201556fa9de3851ea54e7bd717ee378e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +218 + +test.php +file + + + + +2010-09-04T08:55:28.000000Z +3bef2c5f255d9994ff6cbf30c9a46e83 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3039 + +uploads +dir + +css +dir + +requerimento-revisao-de-tributo.pdf +file + + + + +2010-11-06T04:30:19.968750Z +fab996a237ad8b856c286778be5c6f6e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +374265 + +.htaccess +file + + + + +2010-09-04T08:55:28.000000Z +b8583bb1e56a044887b62b2f3c935ddd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +185 + +img +dir + +js +dir + +produto +dir + +index.php +file + + + + +2010-09-04T08:55:28.000000Z +91cb9cc79ae5c1d721a2d0bc51cbf8f0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2723 + +css.php +file + + + + +2010-09-04T08:55:28.000000Z +1c1d3d59f36c1e1da1d986c74424cced +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2678 + +favicon.ico +file + + + + +2010-09-04T08:55:28.000000Z +66b3119d379aee26ba668fef49188dd3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +372 + diff --git a/app/webroot/.svn/prop-base/favicon.ico.svn-base b/app/webroot/.svn/prop-base/favicon.ico.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/.svn/prop-base/favicon.ico.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/.svn/text-base/.htaccess.svn-base b/app/webroot/.svn/text-base/.htaccess.svn-base new file mode 100644 index 0000000..f9d8b93 --- /dev/null +++ b/app/webroot/.svn/text-base/.htaccess.svn-base @@ -0,0 +1,6 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] + \ No newline at end of file diff --git a/app/webroot/.svn/text-base/css.php.svn-base b/app/webroot/.svn/text-base/css.php.svn-base new file mode 100644 index 0000000..23fc7b0 --- /dev/null +++ b/app/webroot/.svn/text-base/css.php.svn-base @@ -0,0 +1,95 @@ +compress($data); + $ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100); + $output = " /* file: $name, ratio: $ratio% */ " . $output; + return $output; + } +/** + * Enter description here... + * + * @param unknown_type $path + * @param unknown_type $content + * @return unknown + */ + function write_css_cache($path, $content) { + if (!is_dir(dirname($path))) { + mkdir(dirname($path)); + } + $cache = new File($path); + return $cache->write($content); + } + + if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) { + die('Wrong file name.'); + } + + $filename = 'css/' . $regs[1]; + $filepath = CSS . $regs[1]; + $cachepath = CACHE . 'css' . DS . str_replace(array('/','\\'), '-', $regs[1]); + + if (!file_exists($filepath)) { + die('Wrong file name.'); + } + + if (file_exists($cachepath)) { + $templateModified = filemtime($filepath); + $cacheModified = filemtime($cachepath); + + if ($templateModified > $cacheModified) { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + } else { + $output = file_get_contents($cachepath); + } + } else { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + $templateModified = time(); + } + + header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); + header("Content-Type: text/css"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT"); + header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 + header("Pragma: cache"); // HTTP/1.0 + print $output; +?> \ No newline at end of file diff --git a/app/webroot/.svn/text-base/favicon.ico.svn-base b/app/webroot/.svn/text-base/favicon.ico.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..b36e81f2f35133dede48dc18f78d3e1a3353f7bc GIT binary patch literal 372 zcmV-)0gL{LP)Ce4&o}{bgKX)=r-B_#-Qs`WM)Da5Prgl zsZ%T@FChJjuHh1`0m$SsVlk8KBKw^@522Z3S}fqzqUy4nLhVp$W)@MMy#WF!pk3U7 zB65kQi)kZ#rBYK5tRifZI?>XjFU4<@lsph9Z1>blC@{qW13mof`13?K&cOa zdispatch(); + } + if (Configure::read() > 0) { + echo ""; + } +?> \ No newline at end of file diff --git a/app/webroot/.svn/text-base/requerimento-revisao-de-tributo.pdf.svn-base b/app/webroot/.svn/text-base/requerimento-revisao-de-tributo.pdf.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..bf823e9a2777cad1d23da42db694ee1d7957d743 GIT binary patch literal 374265 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%0Dyw-)Dxe8S>s*c|Z8H6w_1VVxja_?I}Mi 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

    pY(NvHWvNN*qe!BVk4VYuaMri~dj5 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%0DBl8zuOO`qaL%&$Fg8K6;amQgcJG_ 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

    !^v3P7>64!zmdI!QwJ-$g2 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 Sg~npVmTug*({PvA(*FS$1b9mT literal 0 HcmV?d00001 diff --git a/app/webroot/.svn/text-base/test.php.svn-base b/app/webroot/.svn/text-base/test.php.svn-base new file mode 100644 index 0000000..2e0aacb --- /dev/null +++ b/app/webroot/.svn/text-base/test.php.svn-base @@ -0,0 +1,96 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +set_time_limit(0); +ini_set('display_errors', 1); +/** + * Use the DS to separate the directories in other defines + */ + if (!defined('DS')) { + define('DS', DIRECTORY_SEPARATOR); + } +/** + * These defines should only be edited if you have cake installed in + * a directory layout other than the way it is distributed. + * When using custom settings be sure to use the DS and do not add a trailing DS. + */ + +/** + * The full path to the directory which holds "app", WITHOUT a trailing DS. + * + */ + if (!defined('ROOT')) { + define('ROOT', dirname(dirname(dirname(__FILE__)))); + } +/** + * The actual directory name for the "app". + * + */ + if (!defined('APP_DIR')) { + define('APP_DIR', basename(dirname(dirname(__FILE__)))); + } +/** + * The absolute path to the "cake" directory, WITHOUT a trailing DS. + * + */ + if (!defined('CAKE_CORE_INCLUDE_PATH')) { + define('CAKE_CORE_INCLUDE_PATH', ROOT); + } + +/** + * Editing below this line should not be necessary. + * Change at your own risk. + * + */ +if (!defined('WEBROOT_DIR')) { + define('WEBROOT_DIR', basename(dirname(__FILE__))); +} +if (!defined('WWW_ROOT')) { + define('WWW_ROOT', dirname(__FILE__) . DS); +} +if (!defined('CORE_PATH')) { + if (function_exists('ini_set') && ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'))) { + define('APP_PATH', null); + define('CORE_PATH', null); + } else { + define('APP_PATH', ROOT . DS . APP_DIR . DS); + define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); + } +} +if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { + trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); +} + +$corePath = App::core('cake'); +if (isset($corePath[0])) { + define('TEST_CAKE_CORE_INCLUDE_PATH', rtrim($corePath[0], DS) . DS); +} else { + define('TEST_CAKE_CORE_INCLUDE_PATH', CAKE_CORE_INCLUDE_PATH); +} + +if (Configure::read('debug') < 1) { + die(__('Debug setting does not allow access to this url.', true)); +} + +require_once CAKE_TESTS_LIB . 'cake_test_suite_dispatcher.php'; + +$Dispatcher = new CakeTestSuiteDispatcher(); +$Dispatcher->dispatch(); + +?> \ No newline at end of file diff --git a/app/webroot/.svn/text-base/theme.yml.svn-base b/app/webroot/.svn/text-base/theme.yml.svn-base new file mode 100644 index 0000000..eadeb2e --- /dev/null +++ b/app/webroot/.svn/text-base/theme.yml.svn-base @@ -0,0 +1,14 @@ +name: Default +description: Default theme for Croogo +screenshot: screenshot.png + +author: Fahad Ibnay Heylaal +authorEmail: contact@fahad19.com +authorUrl: http://fahad19.com + +menus: + - main + - footer + +regions: + - right \ No newline at end of file diff --git a/app/webroot/css.php b/app/webroot/css.php new file mode 100644 index 0000000..23fc7b0 --- /dev/null +++ b/app/webroot/css.php @@ -0,0 +1,95 @@ +compress($data); + $ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100); + $output = " /* file: $name, ratio: $ratio% */ " . $output; + return $output; + } +/** + * Enter description here... + * + * @param unknown_type $path + * @param unknown_type $content + * @return unknown + */ + function write_css_cache($path, $content) { + if (!is_dir(dirname($path))) { + mkdir(dirname($path)); + } + $cache = new File($path); + return $cache->write($content); + } + + if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) { + die('Wrong file name.'); + } + + $filename = 'css/' . $regs[1]; + $filepath = CSS . $regs[1]; + $cachepath = CACHE . 'css' . DS . str_replace(array('/','\\'), '-', $regs[1]); + + if (!file_exists($filepath)) { + die('Wrong file name.'); + } + + if (file_exists($cachepath)) { + $templateModified = filemtime($filepath); + $cacheModified = filemtime($cachepath); + + if ($templateModified > $cacheModified) { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + } else { + $output = file_get_contents($cachepath); + } + } else { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + $templateModified = time(); + } + + header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); + header("Content-Type: text/css"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT"); + header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 + header("Pragma: cache"); // HTTP/1.0 + print $output; +?> \ No newline at end of file diff --git a/app/webroot/css/.svn/entries b/app/webroot/css/.svn/entries new file mode 100644 index 0000000..205c87a --- /dev/null +++ b/app/webroot/css/.svn/entries @@ -0,0 +1,232 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +admin.css +file + + + + +2010-09-04T08:55:28.000000Z +6c8eaa82a70721b30cb9a6e0db930e08 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +10500 + +thickbox.css +file + + + + +2010-09-04T08:55:28.000000Z +9b2903ebee6d54b3e63ba927ea5dd498 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4012 + +960.css +file + + + + +2010-09-04T08:55:28.000000Z +7663f75ea6281d430b90a4f72509b879 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3628 + +cake.generic.css +file + + + + +2010-09-04T08:55:28.000000Z +2c2393fa72edd21a1dc2c4f665316dde +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8087 + +reset.css +file + + + + +2010-09-04T08:55:28.000000Z +781558dfd1e94bb0fac4eef51b474f7f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +655 + +theme.css +file + + + + +2010-09-04T08:55:28.000000Z +4efa0194c2d624a81783a330d4c61cbe +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5454 + diff --git a/app/webroot/css/.svn/text-base/960.css.svn-base b/app/webroot/css/.svn/text-base/960.css.svn-base new file mode 100644 index 0000000..dac2d0d --- /dev/null +++ b/app/webroot/css/.svn/text-base/960.css.svn-base @@ -0,0 +1 @@ +.container_12,.container_16{margin-left:auto;margin-right:auto;width:960px}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12,.grid_13,.grid_14,.grid_15,.grid_16{display:inline;float:left;margin-left:10px;margin-right:10px}.container_12 .grid_3,.container_16 .grid_4{width:220px}.container_12 .grid_6,.container_16 .grid_8{width:460px}.container_12 .grid_9,.container_16 .grid_12{width:700px}.container_12 .grid_12,.container_16 .grid_16{width:940px}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:60px}.container_12 .grid_2{width:140px}.container_12 .grid_4{width:300px}.container_12 .grid_5{width:380px}.container_12 .grid_7{width:540px}.container_12 .grid_8{width:620px}.container_12 .grid_10{width:780px}.container_12 .grid_11{width:860px}.container_16 .grid_1{width:40px}.container_16 .grid_2{width:100px}.container_16 .grid_3{width:160px}.container_16 .grid_5{width:280px}.container_16 .grid_6{width:340px}.container_16 .grid_7{width:400px}.container_16 .grid_9{width:520px}.container_16 .grid_10{width:580px}.container_16 .grid_11{width:640px}.container_16 .grid_13{width:760px}.container_16 .grid_14{width:820px}.container_16 .grid_15{width:880px}.container_12 .prefix_3,.container_16 .prefix_4{padding-left:240px}.container_12 .prefix_6,.container_16 .prefix_8{padding-left:480px}.container_12 .prefix_9,.container_16 .prefix_12{padding-left:720px}.container_12 .prefix_1{padding-left:80px}.container_12 .prefix_2{padding-left:160px}.container_12 .prefix_4{padding-left:320px}.container_12 .prefix_5{padding-left:400px}.container_12 .prefix_7{padding-left:560px}.container_12 .prefix_8{padding-left:640px}.container_12 .prefix_10{padding-left:800px}.container_12 .prefix_11{padding-left:880px}.container_16 .prefix_1{padding-left:60px}.container_16 .prefix_2{padding-left:120px}.container_16 .prefix_3{padding-left:180px}.container_16 .prefix_5{padding-left:300px}.container_16 .prefix_6{padding-left:360px}.container_16 .prefix_7{padding-left:420px}.container_16 .prefix_9{padding-left:540px}.container_16 .prefix_10{padding-left:600px}.container_16 .prefix_11{padding-left:660px}.container_16 .prefix_13{padding-left:780px}.container_16 .prefix_14{padding-left:840px}.container_16 .prefix_15{padding-left:900px}.container_12 .suffix_3,.container_16 .suffix_4{padding-right:240px}.container_12 .suffix_6,.container_16 .suffix_8{padding-right:480px}.container_12 .suffix_9,.container_16 .suffix_12{padding-right:720px}.container_12 .suffix_1{padding-right:80px}.container_12 .suffix_2{padding-right:160px}.container_12 .suffix_4{padding-right:320px}.container_12 .suffix_5{padding-right:400px}.container_12 .suffix_7{padding-right:560px}.container_12 .suffix_8{padding-right:640px}.container_12 .suffix_10{padding-right:800px}.container_12 .suffix_11{padding-right:880px}.container_16 .suffix_1{padding-right:60px}.container_16 .suffix_2{padding-right:120px}.container_16 .suffix_3{padding-right:180px}.container_16 .suffix_5{padding-right:300px}.container_16 .suffix_6{padding-right:360px}.container_16 .suffix_7{padding-right:420px}.container_16 .suffix_9{padding-right:540px}.container_16 .suffix_10{padding-right:600px}.container_16 .suffix_11{padding-right:660px}.container_16 .suffix_13{padding-right:780px}.container_16 .suffix_14{padding-right:840px}.container_16 .suffix_15{padding-right:900px}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:'.';display:block;visibility:hidden;height:0}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block} \ No newline at end of file diff --git a/app/webroot/css/.svn/text-base/admin.css.svn-base b/app/webroot/css/.svn/text-base/admin.css.svn-base new file mode 100644 index 0000000..354ea78 --- /dev/null +++ b/app/webroot/css/.svn/text-base/admin.css.svn-base @@ -0,0 +1,267 @@ +/** + * Basic + */ +* { margin: 0;} +html, body { font: 13px "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; background-color: #f9f9f9; line-height:1.5; height: 100%; } + +a { color: #21759B; } +a:hover { color: #D54E21; } + +h2 { font-family: Arial, sans-serif; color: #464646; font-size: 30px; font-weight: normal; border-bottom: 1px dashed #ccc; margin: 0px 0px 10px 0px; } +h3 { font-family: Arial, sans-serif; color: #464646; font-size: 16px; font-weight: bold; } + +.error, +.notice, +.success, +.message { padding: .8em; margin-bottom: 1em; border: 2px solid #ddd; } +.error { background: #FBE3E4; color: #D12F19; border-color: #FBC2C4; } +.notice, +.message { background: #FFF6BF; color: #817134; border-color: #FFD324; } +.success { background: #E6EFC2; color: #529214; border-color: #C6D880; } +.error a { color: #D12F19; } +.notice a, +.message a { color: #817134; } +.success a { color: #529214; } + +#wrapper { min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -50px; } + + +/** + * Content + */ +#main { margin-top: 15px; } +#main #content { margin-bottom: 20px; } + + +/** + * Pagination + */ +div.paging, +div.counter { text-align: center; margin: 10px; } +div.counter { margin-top: 10px; } + + +/** + * Tables + */ +table { width: 100%; border: 1px solid #dfdfdf; background-color: #fff; clear: both; } +table tr th { padding: 10px; background-color: #e7e7e7; color: #464646; border-bottom: 0px; text-align: left; } +table tr td { padding: 10px; border-bottom: 1px solid #dfdfdf; vertical-align: middle; } +table tr td a { font-weight: normal; text-decoration: none; padding: 0px 5px 0px 0px; } +table tr td a:hover { text-decoration: underline; } +table tr td div.operations a { font-size: 12px; margin-right: 15px; text-decoration: none; text-transform: lowercase; } +table tr td img { margin: 0px; padding: 0px; } +.striped { background-color: #f9f9f9; } + +div.level-0 { } +div.level-1 { margin-left: 30px; } + +img.permission-toggle:hover { cursor: pointer; } +img.hook-toggle:hover { cursor: pointer; } + +.controller-row { background: #6f6f6f; color: #fff; font-weight: bold; } +.controller-row a { color: #efefef; } +.controller:hover { cursor: pointer; } +.collapse { background: url('../img/icons/bullet_arrow_down.png') no-repeat; padding-left: 15px; } +.expand { background: url('../img/icons/bullet_arrow_right.png') no-repeat; padding-left: 15px; } + + +/** + * Forms + */ +label { margin: 0px 0px 0px 3px; font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; font-size: 16px; color: #464646; font-weight: bold; } +.text label, +.textarea label, +.select label, +.file label, +.datetime label, +.password label { display: block; } + +form input[type=text], +form input[type=password], +form input[type=file], +form textarea { padding: 5px; font-size: 20px; margin-bottom: 10px; border: 1px solid #ccc; } +form select { padding: 3px; font-size: 20px; margin-bottom: 10px; background-color: #fff; border: 1px solid #ccc; } +form input:focus, +form select:focus, +form textarea:focus { border: 1px solid #999; } +form input[type=submit] { font-size: 24px; margin-top: 20px; } +form textarea { background-color: #fff; width: 300px; height: 60px; font-size: 13px; } +form textarea.content { width: 99%; height: 350px; } +form .wide { width: 500px; height: 150px; } +form select[multiple=multiple] { padding: 0px; } +form select[multiple=multiple] optgroup { font-style: normal; } +form select[multiple=multiple] optgroup option { text-indent: 25px; } +div.radio { width: 140px; } +div.radio input { width: 30px; float: left; } +div.radio label { width: 80px; float: left; } +div.input { margin-top: 15px; } +div.input span.description { margin-left: 10px; } + + +/** + * Header + */ +#header { width: auto; background-color: #464646; padding: 15px 0px 15px 0px; color: #ccc; margin: 0px 0px 0px 0px; height: 20px; } +#header .logo { font-weight: bold; } +#header a { color: #ccc; text-decoration: none; } +#header a:hover { text-decoration: underline; } + +#quick { text-align: right; } + + +/** + * Navigation + */ +#nav-container { background: #eee; width: auto; height: 35px; } + +#nav { margin-bottom: 0px; margin-top: 0px; } +#nav ul li, +#nav ul li a { float: left; display: block; background: #eee; font-size: 12px; font-weight: bold; } +#nav ul li:first-child a { border-left: 1px solid #eee; } +#nav ul li a { color: #666; padding: 10px 10px 11px 20px; border-top: 1px solid #eee; border-right: 1px solid #eee; border-bottom: 1px solid #eee; text-decoration: none; } +#nav ul li a:hover { background: #f7f7f7; color: #d54e21; } +#nav ul li a.selected { border-bottom: 1px solid #fff; } +#nav ul li a.selected:hover { background: #f7f7f7; border-bottom: 1px solid #ccc; } +#nav ul li a { margin-right: 20px; } +#nav ul li a.last { margin-right: 0px; } +#nav ul li li a { margin-right: 0px; } +#nav ul li span.ui-icon { position: absolute; left: 2px; top: 16px; margin: -8px 0px 0px 0px; } + +.sf-menu, .sf-menu * { margin: 0; padding: 0; list-style: none; } +.sf-menu { line-height: 1.0; } +.sf-menu ul { position: absolute; top: -999em; width: 10em; } +.sf-menu ul li { width: 100%; } +.sf-menu li:hover { visibility: inherit; } +.sf-menu li { float: left; position: relative; } +.sf-menu a { display: block; position: relative; } +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { left: 0; top: 33px; z-index: 99; } +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { top: -999em; } +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { left: 10em; top: 0; } +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { top: -999em; } +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { left: 10em; top: 0; } + +#nav ul li:first-child ul { margin: 2px 0px 0px -1px; } +#nav ul li ul { margin: 1px 0px 0px -1px; } +#nav li li:first-child a { border-top: 1px solid #eee; } +#nav li li a { background: #f7f7f7; border-top: 0px solid #eee; border-bottom: 1px solid #eee; border-left: 1px solid #eee; } +#nav li li a:hover { color: #d54e21; background: #fafafa; } +#nav li li a.separator { border-bottom: 1px dashed #bbb; } + +#nav li li li:first-child { margin: -2px 0px 0px 0px; border-left: 0px solid #ccc; } +#nav li li li { margin: 0px 0px 0px 0px; } + +#nav li li a.has-ul { background-image: url(../img/icons/bullet_arrow_right.png); background-position: right; background-repeat: no-repeat; } + + +/** + * Nodes + */ +div#node-meta { float: left; } +div#node-meta a { clear: both; } + +div.meta { padding: 0px; background-color: #efefef; float: left; margin-bottom: 10px; } +div.meta .actions { margin: 0px 15px 0px 0px; padding: 0px; text-align: right; } +div.meta .actions a { font-weight: bold; text-decoration: none; } +div.meta .actions a:hover { text-decoration: underline; } +div.meta .fields { margin: -15px 0px 0px 0px; } +div.meta .input { margin-left: 10px; margin-right: 10px; float: left; } +div.meta .input textarea { height: 60px; } + +div.nodes .type h3 { font-size: 14px; } +div.nodes .type p { margin: 10px 10px 10px 20px; } + +div.filter { margin: 10px 0px 20px 0px; background: #efefef; padding: 10px; } +div.filter form select { width: 200px; } + + +/** + * Themes + */ +div.extensions-themes h3 { font-size: 16px; margin: 10px 0px 10px 0px; } +div.extensions-themes .current-theme .screenshot { float: left; margin: 0px 70px 0px 0px; } +div.extensions-themes .available-themes { border-top: 1px dashed #ccc; margin: 50px 0px 0px 0px; } +div.extensions-themes .available-themes ul li { float: left; margin: 0px 70px 0px 0px; display: block; } +div.extensions-themes .available-themes .actions a { margin-right: 10px; } + + +/** + * Footer + */ +#footer { width: auto; text-align: center; background-color: #464646; padding: 15px 0px 15px 0px; color: #ccc; height: 20px; } +#footer a { color: #ccc; text-decoration: none; } +#footer a:hover { text-decoration: underline; } +.push { height: 50px; } + + +/** + * Tooltip + */ +.tipsy { padding: 5px; font-size: 10px; position: absolute; z-index: 100000; } +.tipsy-inner { padding: 5px 8px 4px 8px; background-color: black; color: white; max-width: 200px; text-align: center; } +.tipsy-inner { border-radius: 3px; -moz-border-radius:3px; -webkit-border-radius:3px; } +.tipsy-arrow { position: absolute; background: url('../img/icons/tipsy.gif') no-repeat top left; width: 9px; height: 5px; } +.tipsy-n .tipsy-arrow { top: 0; left: 50%; margin-left: -4px; } +.tipsy-nw .tipsy-arrow { top: 0; left: 10px; } +.tipsy-ne .tipsy-arrow { top: 0; right: 10px; } +.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -4px; background-position: bottom left; } +.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; background-position: bottom left; } +.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; background-position: bottom left; } +.tipsy-e .tipsy-arrow { top: 50%; margin-top: -4px; right: 0; width: 5px; height: 9px; background-position: top right; } +.tipsy-w .tipsy-arrow { top: 50%; margin-top: -4px; left: 0; width: 5px; height: 9px; } + + +/** + * Others + */ +div.tabs { margin-bottom: 10px; } +div.tabs p { margin: 50px 0px 0px 0px; } + +div.actions { padding: 0px 0px 50px 0px; } +div.actions ul { float: left; } +div.actions ul li { margin: 0px 10px 0px 0px; padding: 0px; list-style: none; float: left; } +div.actions ul li a { padding: 10px; margin-right: 10px; text-decoration: none; background-color: #eee; font-weight: bold; float: left; } +div.actions ul li a:hover { background-color: #f2f2f2; } +div.actions ul li span { } + +div.bulk-actions .input { float: left; padding: 4px; } + +div.breadcrumb { margin: 0px 0px 20px 0px; } + +div.extensions-hooks div.plugin { font-weight: bold; } + +#loading { margin: 0 auto; width: 20px; text-align: center; } +#loading p { background-color: #FFF1A8; font-weight: bold; padding: 5px; margin: 0px; } + +.round { -moz-border-radius: 5px; -webkit-border-radius: 5px; } +.hidden { display: none; } + + +/** + * Login + */ +p#backtosite { padding: 0px 0px 0px 20px; } + +#login { margin: 0px auto; width: 320px; padding: 50px 0px 0px 0px; } +#login h2 { border-bottom: 0px; } +#login .forgot { float: right; } +#login input[type=text], +#login input[type=password] { width: 95%; } + +#login form { margin: 30px 0px 0px 0px; padding: 0px 20px 20px 20px; background: #fff; border: 1px solid #e5e5e5; } +#login form { -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; } +#login form { -moz-border-radius: 10px; -webkit-border-radius: 10px; } + +.login #footer { background: none; color: #444; } +.login #footer a { color: #444; } + +/** + * DebugKit + */ +#debug-kit-toolbar ul li.panel-tab { display: none; } +#debug-kit-toolbar ul li.icon { display: inline; } \ No newline at end of file diff --git a/app/webroot/css/.svn/text-base/cake.generic.css.svn-base b/app/webroot/css/.svn/text-base/cake.generic.css.svn-base new file mode 100644 index 0000000..db12fbd --- /dev/null +++ b/app/webroot/css/.svn/text-base/cake.generic.css.svn-base @@ -0,0 +1,479 @@ +/* SVN FILE: $Id: cake.generic.css 7945 2008-12-19 02:16:01Z gwoo $ */ +/** + * + * PHP versions 4 and 5 + * + * CakePHP(tm) : Rapid Development Framework (http://www.cakephp.org) + * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @filesource + * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) + * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project + * @package cake + * @subpackage cake.app.webroot.css + * @since CakePHP(tm) + * @version $Revision: 7945 $ + * @modifiedby $LastChangedBy: gwoo $ + * @lastmodified $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $ + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +* { + margin:0; + padding:0; +} + +/* General Style Info */ +body { + background: #003d4c; + color: #fff; + font-family:'lucida grande',verdana,helvetica,arial,sans-serif; + font-size:90%; + margin: 0; +} +a { + background:#fff; + color: #003d4c; + text-decoration: underline; + font-weight: bold; +} +a:hover { + background:#fff; + color: #003d4c; + text-decoration:none; +} +a img { + border:none; +} +h1, h2, h3, h4 { + font-weight: normal; +} +h1 { + background:#fff; + color: #003d4c; + font-size: 100%; + margin: 0.1em 0; +} +h2 { + background:#fff; + color: #e32; + font-family:'Gill Sans','lucida grande',helvetica, arial, sans-serif; + font-size: 190%; + margin: 0.3em 0; + padding-top: 0.8em; +} +h3 { + color: #993; + font-family:'Gill Sans','lucida grande',helvetica, arial, sans-serif; + font-size: 165%; + padding-top: 1.5em; +} +h4 { + color: #993; + font-weight: normal; + padding-top: 0.5em; +} +ul, li { + margin: 0 12px; +} + +/* Layout */ +#container { + text-align: left; +} + +#header{ + padding: 10px 20px; +} +#header h1 { + background: #003d4c url('../img/cake.icon.gif') no-repeat left; + color: #fff; + padding: 0px 30px; +} +#header h1 a { + color: #fff; + background: #003d4c; + font-weight: normal; + text-decoration: none; +} +#header h1 a:hover { + color: #fff; + background: #003d4c; + text-decoration: underline; +} +#content{ + background: #fff; + clear: both; + color: #333; + padding: 10px 20px 40px 20px; + overflow: auto; +} +#footer { + clear: both; + padding: 6px 10px; + text-align: right; +} + +/* Tables */ +table { + background: #fff; + border:1px solid #ccc; + border-right:0; + clear: both; + color: #333; + margin-bottom: 10px; + width: 100%; +} +th { + background: #f2f2f2; + border:1px solid #bbb; + border-top: 1px solid #fff; + border-left: 1px solid #fff; + text-align: center; +} +th a { + background:#f2f2f2; + display: block; + padding: 2px 4px; + text-decoration: none; +} +th a:hover { + background: #ccc; + color: #333; + text-decoration: none; +} +table tr td { + background: #fff; + border-right: 1px solid #ccc; + padding: 4px; + text-align: center; + vertical-align: top; +} +table tr.altrow td { + background: #f4f4f4; +} +td.actions { + text-align: center; + white-space: nowrap; +} +td.actions a { + margin: 0px 6px; +} +.cake-sql-log table { + background: #f4f4f4; +} +.cake-sql-log td { + padding: 4px 8px; + text-align: left; +} + +/* Paging */ +div.paging { + background:#fff; + color: #ccc; + margin-bottom: 2em; +} +div.paging div.disabled { + color: #ddd; + display: inline; +} +div.paging span { +} +div.paging span.current { + color: #000; +} +div.paging span a { +} + +/* Scaffold View */ +dl { + line-height: 2em; + margin: 0em 0em; + width: 60%; +} +dl.altrow { + background: #f4f4f4; +} +dt { + font-weight: bold; + padding-left: 4px; + vertical-align: top; +} +dd { + margin-left: 10em; + margin-top: -2em; + vertical-align: top; +} + +/* Forms */ +form { + clear: both; + margin-right: 20px; + padding: 0; + width: 80%; +} +fieldset { + border: 1px solid #ccc; + margin-top: 30px; + padding: 16px 20px; +} +fieldset legend { + background:#fff; + color: #e32; + font-size: 160%; + font-weight: bold; +} +fieldset fieldset { + margin-top: 0px; + margin-bottom: 20px; + padding: 16px 10px; +} +fieldset fieldset legend { + font-size: 120%; + font-weight: normal; +} +fieldset fieldset div { + clear: left; + margin: 0 20px; +} +form div { + clear: both; + margin-bottom: 1em; + padding: .5em; + vertical-align: text-top; +} +form div.input { + color: #444; +} +form div.required { + color: #333; + font-weight: bold; +} +form div.submit { + border: 0; + clear: both; + margin-top: 10px; + margin-left: 140px; +} +label { + display: block; + font-size: 110%; + padding-right: 20px; +} +input, textarea { + clear: both; + font-size: 140%; + font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif; + padding: 2px; + width: 100%; +} +select { + clear: both; + font-size: 120%; + vertical-align: text-bottom; +} +select[multiple=multiple] { + width: 100%; +} +option { + font-size: 120%; + padding: 0 3px; +} +input[type=checkbox] { + clear: left; + float: left; + margin: 0px 6px 7px 2px; + width: auto; +} +input[type=radio] { + float:left; + width:auto; + margin: 0 3px 7px 0; +} +div.radio label { + margin: 0 0 6px 20px; +} +input[type=submit] { + display: inline; + font-size: 110%; + padding: 2px 5px; + width: auto; + vertical-align: bottom; +} + +/* Notices and Errors */ +div.message { + clear: both; + color: #900; + font-size: 140%; + font-weight: bold; + margin: 1em 0; +} +div.error-message { + clear: both; + color: #900; + font-weight: bold; +} +p.error { + background-color: #e32; + color: #fff; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +p.error em { + color: #000; + font-weight: normal; + line-height: 140%; +} +.notice { + background: #ffcc00; + color: #000; + display: block; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +.success { + background: green; + color: #fff; +} + +/* Actions */ +div.actions ul { + margin: 0px 0; + padding: 0; +} +div.actions li { + display: inline; + list-style-type: none; + line-height: 2em; + margin: 0 2em 0 0; + white-space: nowrap; +} +div.actions ul li a { + background:#fff; + color: #003d4c; + text-decoration: none; +} +div.actions ul li a:hover { + color: #333; + text-decoration: underline; +} + +/* Related */ +div.related { + clear: both; + display: block; +} + +/* Debugging */ +pre { + color: #000; + background: #f0f0f0; + padding: 1em; +} +pre.cake-debug { + background: #ffcc00; + font-size: 120%; + line-height: 140%; + margin-top: 1em; + overflow: auto; + position: relative; +} +div.cake-stack-trace { + background: #fff; + border: 4px dotted #ffcc00; + color: #333; + margin: 0px; + padding: 6px; + font-size: 120%; + line-height: 140%; + overflow: auto; + position: relative; +} +div.cake-code-dump pre { + position: relative; + overflow: auto; +} +div.cake-stack-trace pre, div.cake-code-dump pre { + color: #000; + background-color: #F0F0F0; + margin: 0px; + padding: 1em; + overflow: auto; +} +div.cake-code-dump pre, div.cake-code-dump pre code { + clear: both; + font-size: 12px; + line-height: 15px; + margin: 4px 2px; + padding: 4px; + overflow: auto; +} +div.cake-code-dump span.code-highlight { + background-color: #ff0; + padding: 4px; +} +div.code-coverage-results div.code-line { + padding-left:5px; + display:block; + margin-left:10px; +} +div.code-coverage-results div.uncovered span.content { + background:#ecc; +} +div.code-coverage-results div.covered span.content { + background:#cec; +} +div.code-coverage-results div.ignored span.content { + color:#aaa; +} +div.code-coverage-results span.line-num { + color:#666; + display:block; + float:left; + width:20px; + text-align:right; + margin-right:5px; +} +div.code-coverage-results span.line-num strong { + color:#666; +} +div.code-coverage-results div.start { + border:1px solid #aaa; + border-width:1px 1px 0px 1px; + margin-top:30px; + padding-top:5px; +} +div.code-coverage-results div.end { + border:1px solid #aaa; + border-width:0px 1px 1px 1px; + margin-bottom:30px; + padding-bottom:5px; +} +div.code-coverage-results div.realstart { + margin-top:0px; +} +div.code-coverage-results p.note { + color:#bbb; + padding:5px; + margin:5px 0 10px; + font-size:10px; +} +div.code-coverage-results span.result-bad { + color: #a00; +} +div.code-coverage-results span.result-ok { + color: #fa0; +} +div.code-coverage-results span.result-good { + color: #0a0; +} \ No newline at end of file diff --git a/app/webroot/css/.svn/text-base/reset.css.svn-base b/app/webroot/css/.svn/text-base/reset.css.svn-base new file mode 100644 index 0000000..c3e1b44 --- /dev/null +++ b/app/webroot/css/.svn/text-base/reset.css.svn-base @@ -0,0 +1,4 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through} + + +/*table{border-collapse:collapse;border-spacing:0}*/ \ No newline at end of file diff --git a/app/webroot/css/.svn/text-base/theme.css.svn-base b/app/webroot/css/.svn/text-base/theme.css.svn-base new file mode 100644 index 0000000..961c2a9 --- /dev/null +++ b/app/webroot/css/.svn/text-base/theme.css.svn-base @@ -0,0 +1,142 @@ +/** + * Basic + */ +body { font-family: Georgia, serif; color: #444; } + +a { color: #000; text-decoration: underline; } +a:hover { color: #ff4b33; text-decoration: none; } + +p { line-height: 25px; font-size: 15px; } +p + p { margin: 20px 0px 0px 0px; } + +pre { margin: 10px 0px 10px 0px; padding: 20px; font-family: Courier, monospace; } + +h1 { font-family: Arial, sans-serif; font-size: 34px; color: #222; } +h2 { font-family: Arial, sans-serif; font-size: 40px; margin: 0px 0px 20px 0px; color: #222; } +h3 { font-family: Arial, sans-serif; font-size: 20px; margin: 0px; color: #222; } + +blockquote { margin: 20px 0px 20px 0px; padding: 20px 50px 20px 50px; } +blockquote p { font-size: 16px; font-style: italic; } +blockquote p cite { text-align: right; display: block; } + +div.paging { text-align: center; margin: 30px; } + +#wrapper { border-top: 10px solid #444; } + + +/** + * Form + */ +form { margin: 10px 0px 0px 0px; } +form label { display: block; font-weight: bold; } +form .input { margin: 0px 0px 10px 0px; } +form .text input, +form .password input, +form .textarea textarea { width: 300px; } +form .error-message { color: #ee4b33; } + + +/** + * Header + */ +#header h1 { margin: 50px 0px 10px 0px; } +#header h1 a { text-decoration: none; } +#header .site-tagline { color: #666; font-style: italic; font-size: 13px; } + + +/** + * Navigation (with dropdown) + */ +#nav { border-bottom: 1px solid #ccc; margin-bottom: 40px; margin-top: 50px; height: 37px; } +#nav ul li, +#nav ul li a { float: left; display: block; background: #fff; } +#nav ul li:first-child a { border-left: 1px solid #ccc; } +#nav ul li a { color: #666; padding: 10px; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; text-decoration: none; } +#nav ul li a:hover { background: #f7f7f7; } +#nav ul li a.selected { border-bottom: 1px solid #fff; } +#nav ul li a.selected:hover { background: #f7f7f7; border-bottom: 1px solid #ccc; } + +.sf-menu, .sf-menu * { margin:0; padding:0; list-style:none; } +.sf-menu { line-height:1.0; } +.sf-menu ul { position:absolute; top:-999em; width:10em; } +.sf-menu ul li { width:100%; } +.sf-menu li:hover { visibility:inherit; } +.sf-menu li { float:left; position:relative; } +.sf-menu a { display:block; position:relative; } +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { left:0; top:2.5em; z-index:99; } +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { top:-999em; } +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { left:10em; top:0; } +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { top:-999em; } +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { left:10em; top:0; } + +#nav ul li:first-child ul { margin: -3px 0px 0px 0px; } +#nav ul li ul { margin: -3px 0px 0px -1px; } +#nav li li:first-child a { border-top: 1px solid #ccc; } +#nav li li a { background: #f7f7f7; border-top: 0px solid #ccc; border-bottom: 1px solid #ccc; border-left: 1px solid #ccc; } +#nav li li a:hover { color: #ff4b33; } + +#nav li li li:first-child { margin: 2px 0px 0px -1px; border-left: 0px solid #ccc; } +#nav li li li { margin: 0px 0px 0px -1px; } + + +/** + * Main + */ +.message { border: 2px dashed #eee; padding: 10px; margin: 0px 0px 10px 0px; } + +.nodes .node h2 { font-size: 26px; } + +.node { margin: 0px 0px 50px 0px; } +.node h2 a { text-decoration: none; display: block; } +.node h3 { margin: 15px 0px 10px 0px; } +.node .node-info, +.node .node-more-info { font-size: 13px; color: #666; font-style: italic; display: block; } +.node .node-info a, +.node .node-more-info a { font-style: normal; } +.node .node-body { margin: 20px 0px 15px 0px; } +.node .node-body ul, +.node .node-body ol { margin: 10px; } +.node .node-body ul li { list-style-type: disc; margin: 0px 0px 0px 25px; } +.node .node-body ol li { list-style-type: decimal; margin: 0px 0px 0px 25px; } + +.comments h3 { margin: 50px 0px 10px 0px; } +.comments .comment { border-top: 1px solid #f7f7f7; } +.comments .comment .comment { margin: 0px 0px 0px 40px; } +.comments .comment .comment-body { line-height: 20px; } + +.comment .comment-info { border-top: 1px solid #fff; background: #f7f7f7; display: block; height: 39px; } +.comment .avatar { float: left; } +.comment .avatar img { padding: 3px; } +.comment .name { float: left; padding: 8px 0px 8px 10px; font-weight: bold; color: #000; } +.comment .date { float: left; padding: 8px; color: #666; } +.comment .comment-body { clear: both; font-size: 13px; padding: 10px 0px 3px 0px; } +.comment .comment-reply { padding: 10px 5px 10px 0px; } +.comment .comment-reply a { font-size: 11px; text-transform: lowercase; color: #000; background: #f7f7f7; padding: 5px; text-decoration: none; } +.comment .comment-reply a:hover { background: #464646; color: #fff; } + +.comment-form h3 { margin: 50px 0px 10px 0px; } +.form .comment-form h3 { margin: 0px 0px 10px 0px; } +.comment-form p { padding: 10px 0px 20px 0px; } +.comment-form #recaptcha_widget_div { margin: 0px 0px 10px 0px; } + +.block { margin: 0px 0px 30px 0px; font-size: 13px; } +.block h3 { margin: 0px 0px 10px 0px; font-size: 20px; } +.block .block-body { line-height: 25px; } +.block ul li { list-style-type: disc; margin: 0px 0px 0px 25px; } + +.block-search input[type=text] { width: 200px; float: left; margin: 2px; } + + +/** + * Footer + */ +#footer { border-top: 1px solid #ccc; margin-top: 50px; padding: 20px 0px 20px 0px; font-size: 11px; } +#footer .right { text-align: right; } + +#debug-kit-toolbar ul li.panel-tab { display: none; } +#debug-kit-toolbar ul li.icon { display: inline; } \ No newline at end of file diff --git a/app/webroot/css/.svn/text-base/thickbox.css.svn-base b/app/webroot/css/.svn/text-base/thickbox.css.svn-base new file mode 100644 index 0000000..d24b9be --- /dev/null +++ b/app/webroot/css/.svn/text-base/thickbox.css.svn-base @@ -0,0 +1,163 @@ +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +*{padding: 0; margin: 0;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_window { + font: 12px Arial, Helvetica, sans-serif; + color: #333333; +} + +#TB_secondLine { + font: 10px Arial, Helvetica, sans-serif; + color:#666666; +} + +#TB_window a:link {color: #666666;} +#TB_window a:visited {color: #666666;} +#TB_window a:hover {color: #000;} +#TB_window a:active {color: #666666;} +#TB_window a:focus{color: #666666;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_overlay { + position: fixed; + z-index:100; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} +.TB_overlayBG { + background-color:#000; + filter:alpha(opacity=75); + -moz-opacity: 0.75; + opacity: 0.75; +} + +* html #TB_overlay { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_window { + position: fixed; + background: #ffffff; + z-index: 102; + color:#000000; + display:none; + border: 4px solid #525252; + text-align:left; + top:50%; + left:50%; +} + +* html #TB_window { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_window img#TB_Image { + display:block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height:25px; + padding:7px 30px 10px 25px; + float:left; +} + +#TB_closeWindow{ + height:25px; + padding:11px 25px 10px 0; + float:right; +} + +#TB_closeAjaxWindow{ + padding:7px 10px 5px 0; + margin-bottom:1px; + text-align:right; + float:right; +} + +#TB_ajaxWindowTitle{ + float:left; + padding:7px 0 5px 10px; + margin-bottom:1px; +} + +#TB_title{ + background-color:#e8e8e8; + height:27px; +} + +#TB_ajaxContent{ + clear:both; + padding:2px 15px 15px 15px; + overflow:auto; + text-align:left; + line-height:1.4em; +} + +#TB_ajaxContent.TB_modal{ + padding:15px; +} + +#TB_ajaxContent p{ + padding:5px 0px 5px 0px; +} + +#TB_load{ + position: fixed; + display:none; + height:13px; + width:208px; + z-index:103; + top: 50%; + left: 50%; + margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ +} + +* html #TB_load { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_HideSelect{ + z-index:99; + position:fixed; + top: 0; + left: 0; + background-color:#fff; + border:none; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + height:100%; + width:100%; +} + +* html #TB_HideSelect { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_iframeContent{ + clear:both; + border:none; + margin-bottom:-1px; + margin-top:1px; + _margin-bottom:1px; +} diff --git a/app/webroot/css/960.css b/app/webroot/css/960.css new file mode 100644 index 0000000..dac2d0d --- /dev/null +++ b/app/webroot/css/960.css @@ -0,0 +1 @@ +.container_12,.container_16{margin-left:auto;margin-right:auto;width:960px}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12,.grid_13,.grid_14,.grid_15,.grid_16{display:inline;float:left;margin-left:10px;margin-right:10px}.container_12 .grid_3,.container_16 .grid_4{width:220px}.container_12 .grid_6,.container_16 .grid_8{width:460px}.container_12 .grid_9,.container_16 .grid_12{width:700px}.container_12 .grid_12,.container_16 .grid_16{width:940px}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:60px}.container_12 .grid_2{width:140px}.container_12 .grid_4{width:300px}.container_12 .grid_5{width:380px}.container_12 .grid_7{width:540px}.container_12 .grid_8{width:620px}.container_12 .grid_10{width:780px}.container_12 .grid_11{width:860px}.container_16 .grid_1{width:40px}.container_16 .grid_2{width:100px}.container_16 .grid_3{width:160px}.container_16 .grid_5{width:280px}.container_16 .grid_6{width:340px}.container_16 .grid_7{width:400px}.container_16 .grid_9{width:520px}.container_16 .grid_10{width:580px}.container_16 .grid_11{width:640px}.container_16 .grid_13{width:760px}.container_16 .grid_14{width:820px}.container_16 .grid_15{width:880px}.container_12 .prefix_3,.container_16 .prefix_4{padding-left:240px}.container_12 .prefix_6,.container_16 .prefix_8{padding-left:480px}.container_12 .prefix_9,.container_16 .prefix_12{padding-left:720px}.container_12 .prefix_1{padding-left:80px}.container_12 .prefix_2{padding-left:160px}.container_12 .prefix_4{padding-left:320px}.container_12 .prefix_5{padding-left:400px}.container_12 .prefix_7{padding-left:560px}.container_12 .prefix_8{padding-left:640px}.container_12 .prefix_10{padding-left:800px}.container_12 .prefix_11{padding-left:880px}.container_16 .prefix_1{padding-left:60px}.container_16 .prefix_2{padding-left:120px}.container_16 .prefix_3{padding-left:180px}.container_16 .prefix_5{padding-left:300px}.container_16 .prefix_6{padding-left:360px}.container_16 .prefix_7{padding-left:420px}.container_16 .prefix_9{padding-left:540px}.container_16 .prefix_10{padding-left:600px}.container_16 .prefix_11{padding-left:660px}.container_16 .prefix_13{padding-left:780px}.container_16 .prefix_14{padding-left:840px}.container_16 .prefix_15{padding-left:900px}.container_12 .suffix_3,.container_16 .suffix_4{padding-right:240px}.container_12 .suffix_6,.container_16 .suffix_8{padding-right:480px}.container_12 .suffix_9,.container_16 .suffix_12{padding-right:720px}.container_12 .suffix_1{padding-right:80px}.container_12 .suffix_2{padding-right:160px}.container_12 .suffix_4{padding-right:320px}.container_12 .suffix_5{padding-right:400px}.container_12 .suffix_7{padding-right:560px}.container_12 .suffix_8{padding-right:640px}.container_12 .suffix_10{padding-right:800px}.container_12 .suffix_11{padding-right:880px}.container_16 .suffix_1{padding-right:60px}.container_16 .suffix_2{padding-right:120px}.container_16 .suffix_3{padding-right:180px}.container_16 .suffix_5{padding-right:300px}.container_16 .suffix_6{padding-right:360px}.container_16 .suffix_7{padding-right:420px}.container_16 .suffix_9{padding-right:540px}.container_16 .suffix_10{padding-right:600px}.container_16 .suffix_11{padding-right:660px}.container_16 .suffix_13{padding-right:780px}.container_16 .suffix_14{padding-right:840px}.container_16 .suffix_15{padding-right:900px}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:'.';display:block;visibility:hidden;height:0}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block} \ No newline at end of file diff --git a/app/webroot/css/admin.css b/app/webroot/css/admin.css new file mode 100644 index 0000000..354ea78 --- /dev/null +++ b/app/webroot/css/admin.css @@ -0,0 +1,267 @@ +/** + * Basic + */ +* { margin: 0;} +html, body { font: 13px "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; background-color: #f9f9f9; line-height:1.5; height: 100%; } + +a { color: #21759B; } +a:hover { color: #D54E21; } + +h2 { font-family: Arial, sans-serif; color: #464646; font-size: 30px; font-weight: normal; border-bottom: 1px dashed #ccc; margin: 0px 0px 10px 0px; } +h3 { font-family: Arial, sans-serif; color: #464646; font-size: 16px; font-weight: bold; } + +.error, +.notice, +.success, +.message { padding: .8em; margin-bottom: 1em; border: 2px solid #ddd; } +.error { background: #FBE3E4; color: #D12F19; border-color: #FBC2C4; } +.notice, +.message { background: #FFF6BF; color: #817134; border-color: #FFD324; } +.success { background: #E6EFC2; color: #529214; border-color: #C6D880; } +.error a { color: #D12F19; } +.notice a, +.message a { color: #817134; } +.success a { color: #529214; } + +#wrapper { min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -50px; } + + +/** + * Content + */ +#main { margin-top: 15px; } +#main #content { margin-bottom: 20px; } + + +/** + * Pagination + */ +div.paging, +div.counter { text-align: center; margin: 10px; } +div.counter { margin-top: 10px; } + + +/** + * Tables + */ +table { width: 100%; border: 1px solid #dfdfdf; background-color: #fff; clear: both; } +table tr th { padding: 10px; background-color: #e7e7e7; color: #464646; border-bottom: 0px; text-align: left; } +table tr td { padding: 10px; border-bottom: 1px solid #dfdfdf; vertical-align: middle; } +table tr td a { font-weight: normal; text-decoration: none; padding: 0px 5px 0px 0px; } +table tr td a:hover { text-decoration: underline; } +table tr td div.operations a { font-size: 12px; margin-right: 15px; text-decoration: none; text-transform: lowercase; } +table tr td img { margin: 0px; padding: 0px; } +.striped { background-color: #f9f9f9; } + +div.level-0 { } +div.level-1 { margin-left: 30px; } + +img.permission-toggle:hover { cursor: pointer; } +img.hook-toggle:hover { cursor: pointer; } + +.controller-row { background: #6f6f6f; color: #fff; font-weight: bold; } +.controller-row a { color: #efefef; } +.controller:hover { cursor: pointer; } +.collapse { background: url('../img/icons/bullet_arrow_down.png') no-repeat; padding-left: 15px; } +.expand { background: url('../img/icons/bullet_arrow_right.png') no-repeat; padding-left: 15px; } + + +/** + * Forms + */ +label { margin: 0px 0px 0px 3px; font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; font-size: 16px; color: #464646; font-weight: bold; } +.text label, +.textarea label, +.select label, +.file label, +.datetime label, +.password label { display: block; } + +form input[type=text], +form input[type=password], +form input[type=file], +form textarea { padding: 5px; font-size: 20px; margin-bottom: 10px; border: 1px solid #ccc; } +form select { padding: 3px; font-size: 20px; margin-bottom: 10px; background-color: #fff; border: 1px solid #ccc; } +form input:focus, +form select:focus, +form textarea:focus { border: 1px solid #999; } +form input[type=submit] { font-size: 24px; margin-top: 20px; } +form textarea { background-color: #fff; width: 300px; height: 60px; font-size: 13px; } +form textarea.content { width: 99%; height: 350px; } +form .wide { width: 500px; height: 150px; } +form select[multiple=multiple] { padding: 0px; } +form select[multiple=multiple] optgroup { font-style: normal; } +form select[multiple=multiple] optgroup option { text-indent: 25px; } +div.radio { width: 140px; } +div.radio input { width: 30px; float: left; } +div.radio label { width: 80px; float: left; } +div.input { margin-top: 15px; } +div.input span.description { margin-left: 10px; } + + +/** + * Header + */ +#header { width: auto; background-color: #464646; padding: 15px 0px 15px 0px; color: #ccc; margin: 0px 0px 0px 0px; height: 20px; } +#header .logo { font-weight: bold; } +#header a { color: #ccc; text-decoration: none; } +#header a:hover { text-decoration: underline; } + +#quick { text-align: right; } + + +/** + * Navigation + */ +#nav-container { background: #eee; width: auto; height: 35px; } + +#nav { margin-bottom: 0px; margin-top: 0px; } +#nav ul li, +#nav ul li a { float: left; display: block; background: #eee; font-size: 12px; font-weight: bold; } +#nav ul li:first-child a { border-left: 1px solid #eee; } +#nav ul li a { color: #666; padding: 10px 10px 11px 20px; border-top: 1px solid #eee; border-right: 1px solid #eee; border-bottom: 1px solid #eee; text-decoration: none; } +#nav ul li a:hover { background: #f7f7f7; color: #d54e21; } +#nav ul li a.selected { border-bottom: 1px solid #fff; } +#nav ul li a.selected:hover { background: #f7f7f7; border-bottom: 1px solid #ccc; } +#nav ul li a { margin-right: 20px; } +#nav ul li a.last { margin-right: 0px; } +#nav ul li li a { margin-right: 0px; } +#nav ul li span.ui-icon { position: absolute; left: 2px; top: 16px; margin: -8px 0px 0px 0px; } + +.sf-menu, .sf-menu * { margin: 0; padding: 0; list-style: none; } +.sf-menu { line-height: 1.0; } +.sf-menu ul { position: absolute; top: -999em; width: 10em; } +.sf-menu ul li { width: 100%; } +.sf-menu li:hover { visibility: inherit; } +.sf-menu li { float: left; position: relative; } +.sf-menu a { display: block; position: relative; } +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { left: 0; top: 33px; z-index: 99; } +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { top: -999em; } +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { left: 10em; top: 0; } +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { top: -999em; } +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { left: 10em; top: 0; } + +#nav ul li:first-child ul { margin: 2px 0px 0px -1px; } +#nav ul li ul { margin: 1px 0px 0px -1px; } +#nav li li:first-child a { border-top: 1px solid #eee; } +#nav li li a { background: #f7f7f7; border-top: 0px solid #eee; border-bottom: 1px solid #eee; border-left: 1px solid #eee; } +#nav li li a:hover { color: #d54e21; background: #fafafa; } +#nav li li a.separator { border-bottom: 1px dashed #bbb; } + +#nav li li li:first-child { margin: -2px 0px 0px 0px; border-left: 0px solid #ccc; } +#nav li li li { margin: 0px 0px 0px 0px; } + +#nav li li a.has-ul { background-image: url(../img/icons/bullet_arrow_right.png); background-position: right; background-repeat: no-repeat; } + + +/** + * Nodes + */ +div#node-meta { float: left; } +div#node-meta a { clear: both; } + +div.meta { padding: 0px; background-color: #efefef; float: left; margin-bottom: 10px; } +div.meta .actions { margin: 0px 15px 0px 0px; padding: 0px; text-align: right; } +div.meta .actions a { font-weight: bold; text-decoration: none; } +div.meta .actions a:hover { text-decoration: underline; } +div.meta .fields { margin: -15px 0px 0px 0px; } +div.meta .input { margin-left: 10px; margin-right: 10px; float: left; } +div.meta .input textarea { height: 60px; } + +div.nodes .type h3 { font-size: 14px; } +div.nodes .type p { margin: 10px 10px 10px 20px; } + +div.filter { margin: 10px 0px 20px 0px; background: #efefef; padding: 10px; } +div.filter form select { width: 200px; } + + +/** + * Themes + */ +div.extensions-themes h3 { font-size: 16px; margin: 10px 0px 10px 0px; } +div.extensions-themes .current-theme .screenshot { float: left; margin: 0px 70px 0px 0px; } +div.extensions-themes .available-themes { border-top: 1px dashed #ccc; margin: 50px 0px 0px 0px; } +div.extensions-themes .available-themes ul li { float: left; margin: 0px 70px 0px 0px; display: block; } +div.extensions-themes .available-themes .actions a { margin-right: 10px; } + + +/** + * Footer + */ +#footer { width: auto; text-align: center; background-color: #464646; padding: 15px 0px 15px 0px; color: #ccc; height: 20px; } +#footer a { color: #ccc; text-decoration: none; } +#footer a:hover { text-decoration: underline; } +.push { height: 50px; } + + +/** + * Tooltip + */ +.tipsy { padding: 5px; font-size: 10px; position: absolute; z-index: 100000; } +.tipsy-inner { padding: 5px 8px 4px 8px; background-color: black; color: white; max-width: 200px; text-align: center; } +.tipsy-inner { border-radius: 3px; -moz-border-radius:3px; -webkit-border-radius:3px; } +.tipsy-arrow { position: absolute; background: url('../img/icons/tipsy.gif') no-repeat top left; width: 9px; height: 5px; } +.tipsy-n .tipsy-arrow { top: 0; left: 50%; margin-left: -4px; } +.tipsy-nw .tipsy-arrow { top: 0; left: 10px; } +.tipsy-ne .tipsy-arrow { top: 0; right: 10px; } +.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -4px; background-position: bottom left; } +.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; background-position: bottom left; } +.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; background-position: bottom left; } +.tipsy-e .tipsy-arrow { top: 50%; margin-top: -4px; right: 0; width: 5px; height: 9px; background-position: top right; } +.tipsy-w .tipsy-arrow { top: 50%; margin-top: -4px; left: 0; width: 5px; height: 9px; } + + +/** + * Others + */ +div.tabs { margin-bottom: 10px; } +div.tabs p { margin: 50px 0px 0px 0px; } + +div.actions { padding: 0px 0px 50px 0px; } +div.actions ul { float: left; } +div.actions ul li { margin: 0px 10px 0px 0px; padding: 0px; list-style: none; float: left; } +div.actions ul li a { padding: 10px; margin-right: 10px; text-decoration: none; background-color: #eee; font-weight: bold; float: left; } +div.actions ul li a:hover { background-color: #f2f2f2; } +div.actions ul li span { } + +div.bulk-actions .input { float: left; padding: 4px; } + +div.breadcrumb { margin: 0px 0px 20px 0px; } + +div.extensions-hooks div.plugin { font-weight: bold; } + +#loading { margin: 0 auto; width: 20px; text-align: center; } +#loading p { background-color: #FFF1A8; font-weight: bold; padding: 5px; margin: 0px; } + +.round { -moz-border-radius: 5px; -webkit-border-radius: 5px; } +.hidden { display: none; } + + +/** + * Login + */ +p#backtosite { padding: 0px 0px 0px 20px; } + +#login { margin: 0px auto; width: 320px; padding: 50px 0px 0px 0px; } +#login h2 { border-bottom: 0px; } +#login .forgot { float: right; } +#login input[type=text], +#login input[type=password] { width: 95%; } + +#login form { margin: 30px 0px 0px 0px; padding: 0px 20px 20px 20px; background: #fff; border: 1px solid #e5e5e5; } +#login form { -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; } +#login form { -moz-border-radius: 10px; -webkit-border-radius: 10px; } + +.login #footer { background: none; color: #444; } +.login #footer a { color: #444; } + +/** + * DebugKit + */ +#debug-kit-toolbar ul li.panel-tab { display: none; } +#debug-kit-toolbar ul li.icon { display: inline; } \ No newline at end of file diff --git a/app/webroot/css/cake.generic.css b/app/webroot/css/cake.generic.css new file mode 100644 index 0000000..db12fbd --- /dev/null +++ b/app/webroot/css/cake.generic.css @@ -0,0 +1,479 @@ +/* SVN FILE: $Id: cake.generic.css 7945 2008-12-19 02:16:01Z gwoo $ */ +/** + * + * PHP versions 4 and 5 + * + * CakePHP(tm) : Rapid Development Framework (http://www.cakephp.org) + * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @filesource + * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org) + * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project + * @package cake + * @subpackage cake.app.webroot.css + * @since CakePHP(tm) + * @version $Revision: 7945 $ + * @modifiedby $LastChangedBy: gwoo $ + * @lastmodified $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $ + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ + +* { + margin:0; + padding:0; +} + +/* General Style Info */ +body { + background: #003d4c; + color: #fff; + font-family:'lucida grande',verdana,helvetica,arial,sans-serif; + font-size:90%; + margin: 0; +} +a { + background:#fff; + color: #003d4c; + text-decoration: underline; + font-weight: bold; +} +a:hover { + background:#fff; + color: #003d4c; + text-decoration:none; +} +a img { + border:none; +} +h1, h2, h3, h4 { + font-weight: normal; +} +h1 { + background:#fff; + color: #003d4c; + font-size: 100%; + margin: 0.1em 0; +} +h2 { + background:#fff; + color: #e32; + font-family:'Gill Sans','lucida grande',helvetica, arial, sans-serif; + font-size: 190%; + margin: 0.3em 0; + padding-top: 0.8em; +} +h3 { + color: #993; + font-family:'Gill Sans','lucida grande',helvetica, arial, sans-serif; + font-size: 165%; + padding-top: 1.5em; +} +h4 { + color: #993; + font-weight: normal; + padding-top: 0.5em; +} +ul, li { + margin: 0 12px; +} + +/* Layout */ +#container { + text-align: left; +} + +#header{ + padding: 10px 20px; +} +#header h1 { + background: #003d4c url('../img/cake.icon.gif') no-repeat left; + color: #fff; + padding: 0px 30px; +} +#header h1 a { + color: #fff; + background: #003d4c; + font-weight: normal; + text-decoration: none; +} +#header h1 a:hover { + color: #fff; + background: #003d4c; + text-decoration: underline; +} +#content{ + background: #fff; + clear: both; + color: #333; + padding: 10px 20px 40px 20px; + overflow: auto; +} +#footer { + clear: both; + padding: 6px 10px; + text-align: right; +} + +/* Tables */ +table { + background: #fff; + border:1px solid #ccc; + border-right:0; + clear: both; + color: #333; + margin-bottom: 10px; + width: 100%; +} +th { + background: #f2f2f2; + border:1px solid #bbb; + border-top: 1px solid #fff; + border-left: 1px solid #fff; + text-align: center; +} +th a { + background:#f2f2f2; + display: block; + padding: 2px 4px; + text-decoration: none; +} +th a:hover { + background: #ccc; + color: #333; + text-decoration: none; +} +table tr td { + background: #fff; + border-right: 1px solid #ccc; + padding: 4px; + text-align: center; + vertical-align: top; +} +table tr.altrow td { + background: #f4f4f4; +} +td.actions { + text-align: center; + white-space: nowrap; +} +td.actions a { + margin: 0px 6px; +} +.cake-sql-log table { + background: #f4f4f4; +} +.cake-sql-log td { + padding: 4px 8px; + text-align: left; +} + +/* Paging */ +div.paging { + background:#fff; + color: #ccc; + margin-bottom: 2em; +} +div.paging div.disabled { + color: #ddd; + display: inline; +} +div.paging span { +} +div.paging span.current { + color: #000; +} +div.paging span a { +} + +/* Scaffold View */ +dl { + line-height: 2em; + margin: 0em 0em; + width: 60%; +} +dl.altrow { + background: #f4f4f4; +} +dt { + font-weight: bold; + padding-left: 4px; + vertical-align: top; +} +dd { + margin-left: 10em; + margin-top: -2em; + vertical-align: top; +} + +/* Forms */ +form { + clear: both; + margin-right: 20px; + padding: 0; + width: 80%; +} +fieldset { + border: 1px solid #ccc; + margin-top: 30px; + padding: 16px 20px; +} +fieldset legend { + background:#fff; + color: #e32; + font-size: 160%; + font-weight: bold; +} +fieldset fieldset { + margin-top: 0px; + margin-bottom: 20px; + padding: 16px 10px; +} +fieldset fieldset legend { + font-size: 120%; + font-weight: normal; +} +fieldset fieldset div { + clear: left; + margin: 0 20px; +} +form div { + clear: both; + margin-bottom: 1em; + padding: .5em; + vertical-align: text-top; +} +form div.input { + color: #444; +} +form div.required { + color: #333; + font-weight: bold; +} +form div.submit { + border: 0; + clear: both; + margin-top: 10px; + margin-left: 140px; +} +label { + display: block; + font-size: 110%; + padding-right: 20px; +} +input, textarea { + clear: both; + font-size: 140%; + font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif; + padding: 2px; + width: 100%; +} +select { + clear: both; + font-size: 120%; + vertical-align: text-bottom; +} +select[multiple=multiple] { + width: 100%; +} +option { + font-size: 120%; + padding: 0 3px; +} +input[type=checkbox] { + clear: left; + float: left; + margin: 0px 6px 7px 2px; + width: auto; +} +input[type=radio] { + float:left; + width:auto; + margin: 0 3px 7px 0; +} +div.radio label { + margin: 0 0 6px 20px; +} +input[type=submit] { + display: inline; + font-size: 110%; + padding: 2px 5px; + width: auto; + vertical-align: bottom; +} + +/* Notices and Errors */ +div.message { + clear: both; + color: #900; + font-size: 140%; + font-weight: bold; + margin: 1em 0; +} +div.error-message { + clear: both; + color: #900; + font-weight: bold; +} +p.error { + background-color: #e32; + color: #fff; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +p.error em { + color: #000; + font-weight: normal; + line-height: 140%; +} +.notice { + background: #ffcc00; + color: #000; + display: block; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +.success { + background: green; + color: #fff; +} + +/* Actions */ +div.actions ul { + margin: 0px 0; + padding: 0; +} +div.actions li { + display: inline; + list-style-type: none; + line-height: 2em; + margin: 0 2em 0 0; + white-space: nowrap; +} +div.actions ul li a { + background:#fff; + color: #003d4c; + text-decoration: none; +} +div.actions ul li a:hover { + color: #333; + text-decoration: underline; +} + +/* Related */ +div.related { + clear: both; + display: block; +} + +/* Debugging */ +pre { + color: #000; + background: #f0f0f0; + padding: 1em; +} +pre.cake-debug { + background: #ffcc00; + font-size: 120%; + line-height: 140%; + margin-top: 1em; + overflow: auto; + position: relative; +} +div.cake-stack-trace { + background: #fff; + border: 4px dotted #ffcc00; + color: #333; + margin: 0px; + padding: 6px; + font-size: 120%; + line-height: 140%; + overflow: auto; + position: relative; +} +div.cake-code-dump pre { + position: relative; + overflow: auto; +} +div.cake-stack-trace pre, div.cake-code-dump pre { + color: #000; + background-color: #F0F0F0; + margin: 0px; + padding: 1em; + overflow: auto; +} +div.cake-code-dump pre, div.cake-code-dump pre code { + clear: both; + font-size: 12px; + line-height: 15px; + margin: 4px 2px; + padding: 4px; + overflow: auto; +} +div.cake-code-dump span.code-highlight { + background-color: #ff0; + padding: 4px; +} +div.code-coverage-results div.code-line { + padding-left:5px; + display:block; + margin-left:10px; +} +div.code-coverage-results div.uncovered span.content { + background:#ecc; +} +div.code-coverage-results div.covered span.content { + background:#cec; +} +div.code-coverage-results div.ignored span.content { + color:#aaa; +} +div.code-coverage-results span.line-num { + color:#666; + display:block; + float:left; + width:20px; + text-align:right; + margin-right:5px; +} +div.code-coverage-results span.line-num strong { + color:#666; +} +div.code-coverage-results div.start { + border:1px solid #aaa; + border-width:1px 1px 0px 1px; + margin-top:30px; + padding-top:5px; +} +div.code-coverage-results div.end { + border:1px solid #aaa; + border-width:0px 1px 1px 1px; + margin-bottom:30px; + padding-bottom:5px; +} +div.code-coverage-results div.realstart { + margin-top:0px; +} +div.code-coverage-results p.note { + color:#bbb; + padding:5px; + margin:5px 0 10px; + font-size:10px; +} +div.code-coverage-results span.result-bad { + color: #a00; +} +div.code-coverage-results span.result-ok { + color: #fa0; +} +div.code-coverage-results span.result-good { + color: #0a0; +} \ No newline at end of file diff --git a/app/webroot/css/reset.css b/app/webroot/css/reset.css new file mode 100644 index 0000000..c3e1b44 --- /dev/null +++ b/app/webroot/css/reset.css @@ -0,0 +1,4 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through} + + +/*table{border-collapse:collapse;border-spacing:0}*/ \ No newline at end of file diff --git a/app/webroot/css/theme.css b/app/webroot/css/theme.css new file mode 100644 index 0000000..961c2a9 --- /dev/null +++ b/app/webroot/css/theme.css @@ -0,0 +1,142 @@ +/** + * Basic + */ +body { font-family: Georgia, serif; color: #444; } + +a { color: #000; text-decoration: underline; } +a:hover { color: #ff4b33; text-decoration: none; } + +p { line-height: 25px; font-size: 15px; } +p + p { margin: 20px 0px 0px 0px; } + +pre { margin: 10px 0px 10px 0px; padding: 20px; font-family: Courier, monospace; } + +h1 { font-family: Arial, sans-serif; font-size: 34px; color: #222; } +h2 { font-family: Arial, sans-serif; font-size: 40px; margin: 0px 0px 20px 0px; color: #222; } +h3 { font-family: Arial, sans-serif; font-size: 20px; margin: 0px; color: #222; } + +blockquote { margin: 20px 0px 20px 0px; padding: 20px 50px 20px 50px; } +blockquote p { font-size: 16px; font-style: italic; } +blockquote p cite { text-align: right; display: block; } + +div.paging { text-align: center; margin: 30px; } + +#wrapper { border-top: 10px solid #444; } + + +/** + * Form + */ +form { margin: 10px 0px 0px 0px; } +form label { display: block; font-weight: bold; } +form .input { margin: 0px 0px 10px 0px; } +form .text input, +form .password input, +form .textarea textarea { width: 300px; } +form .error-message { color: #ee4b33; } + + +/** + * Header + */ +#header h1 { margin: 50px 0px 10px 0px; } +#header h1 a { text-decoration: none; } +#header .site-tagline { color: #666; font-style: italic; font-size: 13px; } + + +/** + * Navigation (with dropdown) + */ +#nav { border-bottom: 1px solid #ccc; margin-bottom: 40px; margin-top: 50px; height: 37px; } +#nav ul li, +#nav ul li a { float: left; display: block; background: #fff; } +#nav ul li:first-child a { border-left: 1px solid #ccc; } +#nav ul li a { color: #666; padding: 10px; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; text-decoration: none; } +#nav ul li a:hover { background: #f7f7f7; } +#nav ul li a.selected { border-bottom: 1px solid #fff; } +#nav ul li a.selected:hover { background: #f7f7f7; border-bottom: 1px solid #ccc; } + +.sf-menu, .sf-menu * { margin:0; padding:0; list-style:none; } +.sf-menu { line-height:1.0; } +.sf-menu ul { position:absolute; top:-999em; width:10em; } +.sf-menu ul li { width:100%; } +.sf-menu li:hover { visibility:inherit; } +.sf-menu li { float:left; position:relative; } +.sf-menu a { display:block; position:relative; } +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { left:0; top:2.5em; z-index:99; } +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { top:-999em; } +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { left:10em; top:0; } +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { top:-999em; } +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { left:10em; top:0; } + +#nav ul li:first-child ul { margin: -3px 0px 0px 0px; } +#nav ul li ul { margin: -3px 0px 0px -1px; } +#nav li li:first-child a { border-top: 1px solid #ccc; } +#nav li li a { background: #f7f7f7; border-top: 0px solid #ccc; border-bottom: 1px solid #ccc; border-left: 1px solid #ccc; } +#nav li li a:hover { color: #ff4b33; } + +#nav li li li:first-child { margin: 2px 0px 0px -1px; border-left: 0px solid #ccc; } +#nav li li li { margin: 0px 0px 0px -1px; } + + +/** + * Main + */ +.message { border: 2px dashed #eee; padding: 10px; margin: 0px 0px 10px 0px; } + +.nodes .node h2 { font-size: 26px; } + +.node { margin: 0px 0px 50px 0px; } +.node h2 a { text-decoration: none; display: block; } +.node h3 { margin: 15px 0px 10px 0px; } +.node .node-info, +.node .node-more-info { font-size: 13px; color: #666; font-style: italic; display: block; } +.node .node-info a, +.node .node-more-info a { font-style: normal; } +.node .node-body { margin: 20px 0px 15px 0px; } +.node .node-body ul, +.node .node-body ol { margin: 10px; } +.node .node-body ul li { list-style-type: disc; margin: 0px 0px 0px 25px; } +.node .node-body ol li { list-style-type: decimal; margin: 0px 0px 0px 25px; } + +.comments h3 { margin: 50px 0px 10px 0px; } +.comments .comment { border-top: 1px solid #f7f7f7; } +.comments .comment .comment { margin: 0px 0px 0px 40px; } +.comments .comment .comment-body { line-height: 20px; } + +.comment .comment-info { border-top: 1px solid #fff; background: #f7f7f7; display: block; height: 39px; } +.comment .avatar { float: left; } +.comment .avatar img { padding: 3px; } +.comment .name { float: left; padding: 8px 0px 8px 10px; font-weight: bold; color: #000; } +.comment .date { float: left; padding: 8px; color: #666; } +.comment .comment-body { clear: both; font-size: 13px; padding: 10px 0px 3px 0px; } +.comment .comment-reply { padding: 10px 5px 10px 0px; } +.comment .comment-reply a { font-size: 11px; text-transform: lowercase; color: #000; background: #f7f7f7; padding: 5px; text-decoration: none; } +.comment .comment-reply a:hover { background: #464646; color: #fff; } + +.comment-form h3 { margin: 50px 0px 10px 0px; } +.form .comment-form h3 { margin: 0px 0px 10px 0px; } +.comment-form p { padding: 10px 0px 20px 0px; } +.comment-form #recaptcha_widget_div { margin: 0px 0px 10px 0px; } + +.block { margin: 0px 0px 30px 0px; font-size: 13px; } +.block h3 { margin: 0px 0px 10px 0px; font-size: 20px; } +.block .block-body { line-height: 25px; } +.block ul li { list-style-type: disc; margin: 0px 0px 0px 25px; } + +.block-search input[type=text] { width: 200px; float: left; margin: 2px; } + + +/** + * Footer + */ +#footer { border-top: 1px solid #ccc; margin-top: 50px; padding: 20px 0px 20px 0px; font-size: 11px; } +#footer .right { text-align: right; } + +#debug-kit-toolbar ul li.panel-tab { display: none; } +#debug-kit-toolbar ul li.icon { display: inline; } \ No newline at end of file diff --git a/app/webroot/css/thickbox.css b/app/webroot/css/thickbox.css new file mode 100644 index 0000000..d24b9be --- /dev/null +++ b/app/webroot/css/thickbox.css @@ -0,0 +1,163 @@ +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +*{padding: 0; margin: 0;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_window { + font: 12px Arial, Helvetica, sans-serif; + color: #333333; +} + +#TB_secondLine { + font: 10px Arial, Helvetica, sans-serif; + color:#666666; +} + +#TB_window a:link {color: #666666;} +#TB_window a:visited {color: #666666;} +#TB_window a:hover {color: #000;} +#TB_window a:active {color: #666666;} +#TB_window a:focus{color: #666666;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_overlay { + position: fixed; + z-index:100; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} +.TB_overlayBG { + background-color:#000; + filter:alpha(opacity=75); + -moz-opacity: 0.75; + opacity: 0.75; +} + +* html #TB_overlay { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_window { + position: fixed; + background: #ffffff; + z-index: 102; + color:#000000; + display:none; + border: 4px solid #525252; + text-align:left; + top:50%; + left:50%; +} + +* html #TB_window { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_window img#TB_Image { + display:block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height:25px; + padding:7px 30px 10px 25px; + float:left; +} + +#TB_closeWindow{ + height:25px; + padding:11px 25px 10px 0; + float:right; +} + +#TB_closeAjaxWindow{ + padding:7px 10px 5px 0; + margin-bottom:1px; + text-align:right; + float:right; +} + +#TB_ajaxWindowTitle{ + float:left; + padding:7px 0 5px 10px; + margin-bottom:1px; +} + +#TB_title{ + background-color:#e8e8e8; + height:27px; +} + +#TB_ajaxContent{ + clear:both; + padding:2px 15px 15px 15px; + overflow:auto; + text-align:left; + line-height:1.4em; +} + +#TB_ajaxContent.TB_modal{ + padding:15px; +} + +#TB_ajaxContent p{ + padding:5px 0px 5px 0px; +} + +#TB_load{ + position: fixed; + display:none; + height:13px; + width:208px; + z-index:103; + top: 50%; + left: 50%; + margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ +} + +* html #TB_load { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_HideSelect{ + z-index:99; + position:fixed; + top: 0; + left: 0; + background-color:#fff; + border:none; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + height:100%; + width:100%; +} + +* html #TB_HideSelect { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_iframeContent{ + clear:both; + border:none; + margin-bottom:-1px; + margin-top:1px; + _margin-bottom:1px; +} diff --git a/app/webroot/favicon.ico b/app/webroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b36e81f2f35133dede48dc18f78d3e1a3353f7bc GIT binary patch literal 372 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/.svn/text-base/cake.icon.gif.svn-base b/app/webroot/img/.svn/text-base/cake.icon.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..f29f72ebef20ce39a1e3721d31b76d9054b1dc90 GIT binary patch literal 233 zcmVOrfx~(a*Br=IF!2lMFyj!pzT(o0Foa zdn-*>Om~4(V_pR~MF2EGA^8La000jFEC2ui02BZe000D*@X1N5t>>`K@|6NJ6h&YL z1u`%~wUB3glC5+ga)976a!3oFOhFu(2DMubr5G5VhQ{x4NGt;hD1iW&9tgW!0iZB! z6O)6HG-waF&;)>@C@r&FLW6?XF3Wfe6jmrIZUbdo27(g_16K`ZTZ}-3IRcmfa});+ jCL}5ZNSK%y0t-u|r5FwZRfnys7YD7i0<9mpxe)+6uKiOz literal 0 HcmV?d00001 diff --git a/app/webroot/img/.svn/text-base/cake.power.gif.svn-base b/app/webroot/img/.svn/text-base/cake.power.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..8f8d570a2e24d86f0ad7730ee8f2435fd49f152c GIT binary patch literal 201 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/.svn/text-base/index.html.svn-base b/app/webroot/img/.svn/text-base/index.html.svn-base new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/.svn/text-base/index.html.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/.svn/text-base/screenshot.png.svn-base b/app/webroot/img/.svn/text-base/screenshot.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9b0942475c1a3da5034208f29922af4e7d9364e9 GIT binary patch literal 31398 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/.svn/entries b/app/webroot/img/ajax/.svn/entries new file mode 100644 index 0000000..8fadb0e --- /dev/null +++ b/app/webroot/img/ajax/.svn/entries @@ -0,0 +1,198 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/img/ajax +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +circle_ball.gif +file + + + + +2010-09-04T08:55:28.000000Z +73e57937304d89f251e7e540a24b095a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +673 + +wheel_throbber.gif +file + + + + +2010-09-04T08:55:28.000000Z +14a0936bd54fd18c22b5e7fb86ba26a3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +9427 + +loadingAnimation.gif +file + + + + +2010-09-04T08:55:28.000000Z +c33734a1bf58bec328ffa27872e96ae1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +5886 + +Thumbs.db +file + + + + +2010-11-16T20:59:54.640000Z +fe679b7307c32f2d5eef10f24d128bc6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +9216 + +index.html +file + + + + +2010-09-04T08:55:28.000000Z +1c7b413c3fa39d0fed40556d2658ac73 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +44 + diff --git a/app/webroot/img/ajax/.svn/prop-base/Thumbs.db.svn-base b/app/webroot/img/ajax/.svn/prop-base/Thumbs.db.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/ajax/.svn/prop-base/Thumbs.db.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/ajax/.svn/prop-base/circle_ball.gif.svn-base b/app/webroot/img/ajax/.svn/prop-base/circle_ball.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/ajax/.svn/prop-base/circle_ball.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/ajax/.svn/prop-base/loadingAnimation.gif.svn-base b/app/webroot/img/ajax/.svn/prop-base/loadingAnimation.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/ajax/.svn/prop-base/loadingAnimation.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/ajax/.svn/prop-base/wheel_throbber.gif.svn-base b/app/webroot/img/ajax/.svn/prop-base/wheel_throbber.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/ajax/.svn/prop-base/wheel_throbber.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/ajax/.svn/text-base/Thumbs.db.svn-base b/app/webroot/img/ajax/.svn/text-base/Thumbs.db.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..d26dda9631aa83d2a2842a891b09d43561241148 GIT binary patch literal 9216 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 O&;PSxkj3(Axc>n)QtUPW literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/.svn/text-base/circle_ball.gif.svn-base b/app/webroot/img/ajax/.svn/text-base/circle_ball.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..d0bce1542342e912da81a2c260562df172f30d73 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nnmm28Kh24mmkF0U1e2Nli^nlO|14{Lk&@8WQa67~pE8 zXTZz|lvDgC+Z`3#dv5h=E26FfcG1 zbL_hF&)}42ws10s6^G;;cE1^EoUR)U5A70}d2pLv!jVIT7j&Z~EblI3x0K*v_sV|m z0kj3v921Z^em#l`(k(o@H$3ZdDRc@9NidXDNbqrumReCGv$gd8+e8WW28HVqkJ_9i zH>s*<31KtHjANIPvi2#*6BEu%3Dak5O_t&NBI)H?V$TxT}#l{vOTn5naXTfF^&~Hhq+NX@#Ccc>y7T?;vjI&jdhsDsPJyAw*m0Qz>i}K7# zL9w50Ng{fT}A5JUe8lRK1h7_Y2;BWJDd=c6f&i?Wv5(5q?6|P zQw{>maxZP<537OA37Uk}7@%_$4o$EWe_Zl>&#id|lE-BpDC#+Fn|msJ%_2h{Hg1vP z#N8WAzfWasG}yq|xqE)DrWaOofX=z|?*pgc%{ig5vl!pqDlC|q&~Z0$&Rvsft&VO- z4MZj+%-+Vx%W}v;V76hyp=;+R;x+~t^Q%*xuFTQAF2})fSfTHDAs>sO!OBw`)&)o$ c0!CNZt))x~rAZP^^P&YOFfdqy5)K#u0POD40{{R3 literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/.svn/text-base/index.html.svn-base b/app/webroot/img/ajax/.svn/text-base/index.html.svn-base new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/ajax/.svn/text-base/index.html.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/ajax/.svn/text-base/loadingAnimation.gif.svn-base b/app/webroot/img/ajax/.svn/text-base/loadingAnimation.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..82290f48334c81272ff5991962951758137a08ba GIT binary patch literal 5886 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 Dl)1NK literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/.svn/text-base/wheel_throbber.gif.svn-base b/app/webroot/img/ajax/.svn/text-base/wheel_throbber.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e2a116c7280b4d9786ddb960fff4439a542866ec GIT binary patch literal 9427 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 OhM#~I&wK(i`}3bHw&zm- literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/Thumbs.db b/app/webroot/img/ajax/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..d26dda9631aa83d2a2842a891b09d43561241148 GIT binary patch literal 9216 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 O&;PSxkj3(Axc>n)QtUPW literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/circle_ball.gif b/app/webroot/img/ajax/circle_ball.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0bce1542342e912da81a2c260562df172f30d73 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nnmm28Kh24mmkF0U1e2Nli^nlO|14{Lk&@8WQa67~pE8 zXTZz|lvDgC+Z`3#dv5h=E26FfcG1 zbL_hF&)}42ws10s6^G;;cE1^EoUR)U5A70}d2pLv!jVIT7j&Z~EblI3x0K*v_sV|m z0kj3v921Z^em#l`(k(o@H$3ZdDRc@9NidXDNbqrumReCGv$gd8+e8WW28HVqkJ_9i zH>s*<31KtHjANIPvi2#*6BEu%3Dak5O_t&NBI)H?V$TxT}#l{vOTn5naXTfF^&~Hhq+NX@#Ccc>y7T?;vjI&jdhsDsPJyAw*m0Qz>i}K7# zL9w50Ng{fT}A5JUe8lRK1h7_Y2;BWJDd=c6f&i?Wv5(5q?6|P zQw{>maxZP<537OA37Uk}7@%_$4o$EWe_Zl>&#id|lE-BpDC#+Fn|msJ%_2h{Hg1vP z#N8WAzfWasG}yq|xqE)DrWaOofX=z|?*pgc%{ig5vl!pqDlC|q&~Z0$&Rvsft&VO- z4MZj+%-+Vx%W}v;V76hyp=;+R;x+~t^Q%*xuFTQAF2})fSfTHDAs>sO!OBw`)&)o$ c0!CNZt))x~rAZP^^P&YOFfdqy5)K#u0POD40{{R3 literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/index.html b/app/webroot/img/ajax/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/ajax/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/ajax/loadingAnimation.gif b/app/webroot/img/ajax/loadingAnimation.gif new file mode 100644 index 0000000000000000000000000000000000000000..82290f48334c81272ff5991962951758137a08ba GIT binary patch literal 5886 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 Dl)1NK literal 0 HcmV?d00001 diff --git a/app/webroot/img/ajax/wheel_throbber.gif b/app/webroot/img/ajax/wheel_throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..e2a116c7280b4d9786ddb960fff4439a542866ec GIT binary patch literal 9427 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 OhM#~I&wK(i`}3bHw&zm- literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/entries b/app/webroot/img/botoes/.svn/entries new file mode 100644 index 0000000..46d2751 --- /dev/null +++ b/app/webroot/img/botoes/.svn/entries @@ -0,0 +1,1048 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/img/botoes +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +btnCalcularFreteCaminhaoPretoFVermelho.jpg +file + + + + +2010-11-17T16:27:59.170588Z +d92ed265e4f8d3c7f099f0f754002924 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +38207 + +btnCalcularFreteCaminhaoVerdeFVerde.jpg +file + + + + +2010-11-17T16:27:53.389338Z +4e3ee7a6f8a4cd74e1776671296b0348 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +41222 + +btnCalcularFreteCaminhaoCinzaFLaranja.jpg +file + + + + +2010-11-17T16:28:21.389338Z +4702fc237b5e833b9068213b5dec7646 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39888 + +btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg +file + + + + +2010-11-17T16:28:08.389338Z +72a15fd5ebe3347d6febc57a4dc204bf +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39991 + +btnCalcularFreteCaminhaoVerdeFLaranja.jpg +file + + + + +2010-11-17T16:27:56.983088Z +3b98ec82f06c00bc1c08bdba4fe0fbff +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +42118 + +btnCalcularFreteCaminhaoLaranjaFVerde.jpg +file + + + + +2010-11-17T16:28:12.889338Z +93d4a57f5cbdbef81401ffd3dbd8df3d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39946 + +btnCalcularFreteCaminhaoCinzaFAzul.jpg +file + + + + +2010-11-17T16:28:22.358088Z +cb946a99fb9d3fd181de20b02a559991 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40546 + +btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg +file + + + + +2010-11-17T16:28:10.092463Z +548633d93bd53c8651fce79d0be40816 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40202 + +Thumbs.db +file + + + + +2010-11-17T16:28:22.154963Z +7729999bae8122b1297999199814b595 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +6144 + +btnCalcularFreteCaminhaoLaranjaFLaranja.jpg +file + + + + +2010-11-17T16:28:17.123713Z +6a41971de027f842d7ff4634ea4a656e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39803 + +btnCalcularFreteCaminhaoVerdeFAzul.jpg +file + + + + +2010-11-17T16:27:57.733088Z +35c5ed7ed75798d3e46461657b4886b4 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +42560 + +btnCalcularFreteCaminhaoCinzaFTerra.jpg +file + + + + +2010-11-17T16:28:19.358088Z +2d0198b1f5c386defe51c69b878ab41c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39585 + +btnCalcularFreteCaminhaoVerdeFTerra.jpg +file + + + + +2010-11-17T16:27:55.326838Z +52b52db6cf533ed0ec3bef9117049e7f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +41951 + +btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg +file + + + + +2010-11-17T16:28:10.748713Z +621d24a7c4d0a12b2c75cea0e973ca99 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +41699 + +btnCalcularFreteCaminhaoPretoFPreto.jpg +file + + + + +2010-11-17T16:28:00.654963Z +5be1c9d8024f4b193d1de4ff497808b1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +20695 + +btnCalcularFreteCaminhaoLaranjaFAzul.jpg +file + + + + +2010-11-17T16:28:17.279963Z +87ecaf53ed42b0af0b1ed8a154de7dd8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40860 + +btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg +file + + + + +2010-11-17T16:28:07.092463Z +64a79dff0726396267001481edf35741 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39943 + +btnCalcularFreteCaminhaoLaranjaFTerra.jpg +file + + + + +2010-11-17T16:28:14.436213Z +e39aace39a9afe25ff00f62e4802bcdc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39577 + +btnCalcularFreteCaminhaoCinzaFVermelho.jpg +file + + + + +2010-11-17T16:28:19.248713Z +d06c0b351340f92d5b4b23f9380791e2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +38121 + +btnCalcularFreteCaminhaoVerdeFVermelho.jpg +file + + + + +2010-11-17T16:27:52.733088Z +5238bd645fa5a7ec5f5359033e44046d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40833 + +btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg +file + + + + +2010-11-17T16:28:04.983088Z +d567fb1c90435d26daabbeaef6022fa6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +38815 + +btnCalcularFreteCaminhaoLaranjaFVermelho.jpg +file + + + + +2010-11-17T16:28:12.233088Z +5ae87ed9549405287e1bfa0417f9517e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39841 + +btnCalcularFreteCaminhaoCinzaFPreto.jpg +file + + + + +2010-11-17T16:28:20.154963Z +ce03c23f056a1d17123c0f0ae3d6e909 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +21963 + +btnCalcularFreteCaminhaoPretoFVerde.jpg +file + + + + +2010-11-17T16:27:59.811213Z +33994bcf93458e7d7c5dfe5af9b6a1f2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39331 + +btnCalcularFreteCaminhaoVerdeFPreto.jpg +file + + + + +2010-11-17T16:27:54.451838Z +f3b3e8366b61bb76f8b49f494bd4f1f7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +24860 + +btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg +file + + + + +2010-11-17T16:28:08.076838Z +b79b11ffe028abda4220de02ecacb77f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +23001 + +btnCalcularFreteCaminhaoLaranjaFPreto.jpg +file + + + + +2010-11-17T16:28:13.936213Z +d0c9ee7dd17330ee0c855e4ee390b9cc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +23525 + +btnCalcularFreteCaminhaoPretoFLaranja.jpg +file + + + + +2010-11-17T16:28:02.873713Z +614d2509dbe27d5533589834512e8097 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40134 + +btnCalcularFreteCaminhaoPretoFAzul.jpg +file + + + + +2010-11-17T16:28:04.342463Z +4b4f5dcf8fd5779b3dc7877a08905ded +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +40725 + +btnCalcularFreteCaminhaoPretoFTerra.jpg +file + + + + +2010-11-17T16:28:01.764338Z +e03c853457ba0c6e3c47fbc2a3f9310e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +39775 + diff --git a/app/webroot/img/botoes/.svn/prop-base/Thumbs.db.svn-base b/app/webroot/img/botoes/.svn/prop-base/Thumbs.db.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/Thumbs.db.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFLaranja.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFLaranja.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFTerra.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFTerra.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFVermelho.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoCinzaFVermelho.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVerde.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVerde.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVerde.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFAzul.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFPreto.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFLaranja.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFLaranja.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFTerra.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFTerra.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVerde.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVerde.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVerde.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFPreto.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFPreto.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVerde.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVerde.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVerde.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/botoes/.svn/prop-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/botoes/.svn/text-base/Thumbs.db.svn-base b/app/webroot/img/botoes/.svn/text-base/Thumbs.db.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9601d451e4df56a75ea30096c1f06ebe3912a431 GIT binary patch literal 6144 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 F@DIT_g$w`y literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFAzul.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..69403532a8c3a992cc98e32f8901988cb4564ebb GIT binary patch literal 40546 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�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

    ;ND~t7ALXKw;0} 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 V8)@}{a6?LV6QvG0xJ&-c{~OyR)^Pv; literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoCinzaFPreto.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..de02ea65d794a88b5611f33c01e85f006368387a GIT binary patch literal 21963 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�+9%uz^_f2p!)Pc6jJ{)LfnvKdH^ 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 bOX?!MqpI{de8>1+N9q*jG*nkdolO1*%`I!V literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFAzul.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c838bd72287f679945e99fc50619ee84421a454e GIT binary patch literal 40860 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..0e3a150ea636c0de2f7e7c68098c7f7a000d9362 GIT binary patch literal 39803 zcmeFXbyQtVlqY&|0>Ryb26qb@+#$$?;2Pw@#a#mgclY4#cJUD0A-G)J-QDu|dV0F& z&FX&Z^_%%?);njdU9xNMs`WcnyK0|Ze;59)12E;K<)i^HFfahww-@ji3Xu4x^uP4{ zqvU@{!9T)(y8&3p04JDOI2bGdEEWtL7R=vX02u%V01FHEHr#)EkdP4&;o#rF!2ZL2 zWBgBSL?n1*SU3cjcYl`v@8RCqm~fZ?0L503meUko#z8m-IwjxzW z1vyBA7N4KK&)k#i7#K*c-KcXCdtBnpA-$+sZbz@D60`5%;uK=VM6A?kER>bWwA%!2 z;&N|nQVblj<}F*PXIax7X_E5N<*_}O&-d+UUm^1dXLz{Iw(hF^rRkagpI`@JR#E;T zM`O)Pgr}jtsJ86C-}qcUfzmqd&k{pNTT`9^)R)_9Hg^uhyWu1x`fR_wvDwB^V_@qm zO-8l7ac%3?U`G;{QLZU+GP&FVs?Zs8S9HB`5Ls*F(Vu;q2B*m6prAu*y)cx;8iMjc zx9P#<0v%poQE&5)x1A@)sF&E3MHQ|C@(*phwH{HR*EoJI_{E1=FYM6SS>rjco=KHI z9fE~Arge7-ZZ2;6F*4ogVI02oaI<#h9K%Fk3XDz1HW#%RR%7Ry4U6;B0iDs6UR&)|#q2I1EmG{yx+Ho6B( zG}&#R(O;ejdAe~tQ*+CWcE24KKh-n>zb&AG3VJT|}NO zUC&&mbKmz?cTqGVYG}-#Nzil_ZTin^la?EsNUKUU2_LAcjG!|qV(#E{n)*^!yrqHZ zMA!EFzjpI*xBbz6@{yp0D5QvIdkdznZsCFKXOKY$z0&1QNg?Ympv<1AjPQH(B0k@n z>BX$A;o!s770)33#jm50`vGjmhEY*7uk&`2w6OIyJC(9pk4w<_Li=9^dQ3jXPFCdb zKM4aCKmTiIqN45(L9N+Y-pRsB)crJ0U{R-&o1MUs>G4X#MD#%GStmC?C7*-S8@rW@ zvcG`rj7pPjhnuT49yZSoln6O4gZT_4CZG6!)%H(-c1qiJ<;;DYFto8xgh9f=qs7L;#Yg@^NzKKL z`GJatj)Rlu&D*^FR>G(2J$~|2^ung2HgJ3dOgWK#BH zSC`2m;T6zX?Bs?!;BI(atcn@${m1S3aT?O%A3N&oOx=WT{r~91C1{C(K$R}qoUt0D zcg$YH`^+&bu9z5~3}uSO@#-AanvfBJ>xx+tjd?PS7Cdsci7qCEBz$;==8+X00d?JU z($KHQfSw$k5Ca=I;vLm`^nhwjO>dI~T}P|tCUzC5559c|e)CMSEa=%32{(L;wFIr}S(2BQ*uBveB(-JKwQRzAL*7lEcOc%r7q*SddR{Nm!$-uHF$F+${bNZR*`W7+$Aox&-^W(>c)GB2S9 zvw{M=M{>>@sb3!*>dS10n4Ag)quTxgctU>nVP~)8zAzhMiC8RLo`sM0IqM}4aZa$B zm(#|KL8yuP(z^XW^6ur8(w$*7>mJh6J?P&u{Nl3>$db`nSlUw6DX285{%BZFOLqDT z$O*ZwL5DHmFhu5wDgtfFY4Q&0QaVqwh6C3KQlfnFomjV;i-#srz; z>puawFOTWm;oyhOxn2wI;%51isQOO5RGKI>QE(*NPMA&EoLk#~Xw^uxbxhXxAn-HZ zv*jg+0@3;ZG2yH}?_{msnSGcKuX?%s<~=1AFyzEH0Q>q=$-ZP!Uz7T1FE*q1hM@(Im z3)DgxM^7A*gk|d{Mdz7Db;yiKLlpCIW z8)JdRv2rSpyTY%?QmDj<2B;*fphw=^RAcZ1?Skw;nO^E*xHXHugLiyXZGx5*f8!GC zjbIY5i+L5hNjc#AoScHJ9uGEZPUmrXqu7weO}pODk2mcF=4QErWp3elv79L;Qt=;8 z-)mfp^Lx}c2_nag*T_GDBzu-u!b1)=R?@&e)l82|B)2ZAayH6;sJ=zm%#6$b_!XaK zc}XIDquO+kbd_Q+T10ybVN%(LC;ve2<%jw%jWQk1!dLpz$BKc4u3@Q11*37TPMxY7GVz8(h9~4 zBsS}ttF6ILoXtQreNNvyXX98Nm67Ty=fDqb7eNiPKi_jTuAc9Cs9a^^uq7yGe}SA4 zq&A_>rustNB1UzC4o5}7ZGF2e-8beGkd@6V{0+}~45;meM}&QccF0MSdwXBAK}F9k zwB5jDnN8F93H*PYqJ`uD(USj$L}S%oz`vqnz490E4`P@vkX6>V+IiI3P+zDWpWmo% z$YHN2I9>_vANbyKal^2$x&MkS%D?2^Wd4gNd-Gv$Yz!aws8q*X>6ALMA{^jZSy4KJ z%+pL~7*GOLX10=O)gR-63Tcm+z=5f*L+}a)<&_#OHzE78U&u5kNsVu7zh0T7m+>%i zlu;!pf1}w9{cHkGr$m8%!~I=gb6pl?+-Xo2`JFFeD~dOLD-K(L%^zRF5&8VS`xW&< zdWp0$clduV;Yd+cS5fkEAmBo`m0jN*nrLac(njI;#lhS4vk3b&aj^)bRJLuH`l^{; znyMd}zcr7iGEz5Gh;&dZ>hbw6AcH5lSPo;FG@Z zn!^`^*yR2fD}`G2)nXW1w#_Hg3CTp?Oq_=b8q2WMcR1;6w~sb-sAibDmW2(UbS0AB zh&66k`SC+pd8*yKW?ql@;j?4WOjJqP@bi>1V=(^?J|50iJk+8q+nkT>FF^IxF9VFK z2`Obiv{r0QoGT*~QskqY+gAA0&tJrzC+Uzs6wcTHvMsM%*HOCFNor&)0M)2hgBeQD z;vm!GeB^ozUwG_4_$q4KwkmTa{*FQ*vi}Nn$GQ}=8W~X~MnEjq(kuJ2g~d)sr<7T& z@iiFz112`aG0ReKSiA&9A&tF%rm|{wwN%W!5I=fM_&|||V^=#J8p*yDiY`Lqluf=F zQC3n(Zj6W9rG?u*O`i7$lqB0d*@?p0{zoKOF^&?&XpsJ97? zOux|wDpq0WqR*^1Nk0M0udSz5Q^+%+GyJ-vs*y9fRy`{gqCb8(>h?;c(|>g0O<_zS zwO3udxi2>uu4v{#p4rujQTb%_WhoIFzCIK=4qvSp`-!t%ApnJyKFfwf>Q4i>-0)ph zKIZ;)sa+WZHAfDR!sUy5d_Gu1b{2uZY@??K#B

    4VqbSvi&^}LT6)6E0U-)t;4bG zEH&?DwMki%~x7u3MwTRr1dP$?Gqd#wD|TpjNQW`F4L9{y@<{=9RhJrI`5 zY?1z5^VVolxQMROuh;;gr65=)=LdPlkt+2v2clSbfzUYGHkx!=y2tLXqO(UvrTz0J zZ7A1M8D$a@c2$bk$ETf~q(fLg8x{3htl}~| zmU2%LQyP`DI4JWovXbLAD3z`;oHDUnHVjpTGX0p5chQsxSfUSa&KZ*&f-r;c!Svl;zqmSM?1eX(5ln}6JeidfTr{gB=}`)<9+pE`!_$sh zX5ym@RSc_YLdi5*-_I&yPCE0>ywEJo-(g;Y%o$(WHNtZwI=BfhGEPBHs*6eZMx2|k zm~&T*3Tg;AoS}57t>U>=YuIGDhVq5eY04&9eO z?$vvVEm4m_uK0i{I?f3FS+-&NyvsI|$fP#?pfLaN+;=Et*o=&<_*tH3^|&Z_(!$F! zAg-0tAaOQH;22e;R$p^O4z}to4^)lWkW0pXbX7yD9;*2ZtAJS!*Haxk=(8r*AI2zI zDF^rrDYHZRO@^>A*l$OaC`I(8*0~48-7teIe}eQzC)D(7%&5mWHHa2AKX-#i-RxqU-;{g6ii!km_qt7IP=YGo*#4xJeHhO>O zCAmoN6V&AM&}vKQu9Crz_}Z(T0g(qdk)J{?+=;Jjx(Zs`yNx>;4h*wjsXe+Arqrl? z29F;-73sF>9=H2ujjuydu40&!`72>#Mg2D!lcC?Na{Q%odtK^@%BRkl=$e^%gS7pF zm3Oy2Soxmo2GbhS=oh=XXHi`L+e_&yrv&?bV^Zm z(TN&39(XHM7GFfp1MzzE>J3~{CnD2oV0tk7`WLhq5l9!qO``1Qed47XQZ|`fq10w8 z*KSxE;zhqH`|vPBm;zJ1tx{zjl!=1W8}XsaSoa9}4!9ccN>FIR)8x<#QCWcl2xH;j zdYZ`b7ro4y6fF0W9Ixf`@JTu3!TLZfZ>!L)%|0R51$&G3M#;Ybu{WRA5cch;;F!Pq ziDxdobpj3#yeb|TT=5|vnQW239Xxkmgq$U%=f!@~xKIdIP2c{=Mkda6ZM^E%|Go53 zDpF=jgcyt1?MIf9;?+B{@wD;`jJUSlu@O?w z1*lb}3`vZEHow_qOffY2;#dDlO;5DIgJ@v1ZIQJNS(8%6STq>dF|PQ&wFM-w;5)(^ zY^%+pW!k|bLUHfC_GrOk-+zl|Ag;HKP^q3J%5`BfCel5|w)o$BK(CXgWa^kSi z>2q}tV(|-ew#}CI%Q{QFc6-%Av-R|2o!4W7OG&D2-KNwz3+Pi@vDYA+dUyWRpv-G( zObRor$c60^xK)T2&`HpjI^SJ$?V+5`E_($#5>FPX?MYhz^DW$K+@%*sQp#W)mX>3; zYo(>B7?@K;_)$i-3n#!R9(x9)ypUO-mRY2+8N_{1qx=(IW3&rCub~#fg%WF%naQ$c zFybOiE2>15v2u!GLzmsNf}`&vKM`lfeHCN+XQ)r=$1eyRk6^zLw9;XU>!8)ggX?mU z0SB*;17%a8I4tv8II=5^QNmg%nc<;c}_Q}l$6!m#i0_?VYeZ+jKpog54-_Vd_HRPu`o zDnl2~S1X(axe#ykM=%o-UeIt<91c!8(P!ih#fOP(xa3#<6 zY7?Fh$54*}Tu2BLn5R91qhop4|KSkfGXd_ZI2^qZ+V;Y4q0sy;6WNisM)D z(p=-i-*<$k`+y8n>vfm;@&&R`(0kjH^(BGzTQy!<{j9GjQFoO*BK##JC$*g32Upjv zxkL}~i$`S&c*h-HTD&aI+fx=?5=B7*6*ezj97{p^bLrl)N?3nfHFBn05VW0} z+>~nUGi`X_!EUa`URHbtxB4wkCDBc~#(Bm2!#^vfGqdCnAITW%rMEemsZv3)6-JWQ zRg!VHBz`95E7pnpOKDE0H;f~nF1J#6vuK>YjcPj_k2bqjLVW7mCfz_lq%&GIG_`Eb zQu~MZ9h-L0;oPqA|||-Vb5EN ztG{J^87o~WvmU%|jU)~g6_F>Qrt@C-hHJo%wqe>2=Kii@2h_F1ZL9CyXzuT>o>5be z(#{#+Aq}_Dutvj6C_pLM3~hEb3H^ntC!Ddy)Zz|Xs8cDPfj~86mTHm@j0bJy z34AML#CczaQp8xc%djrhpdY-pz(y0wGfc`iiK}|w$T;d2E5}YFLtNmWhi$Jh5bnAZ zQLj|gU7=>K(or!Kh+T}RxNu<5j=^+6m^fWWB>nUI`_`&DI%3;ci2Dww*xML&Ei+h5 z9u71pIQdf%!p|BbKBzHc`deKHT^mHl~(N0W2bg?l~=r zp`RlgPBg1ILMvk&`$<0_%^VDW; z(I=~eNsCwXRXwJDEavZWiF z^b0Mvp1Wk4VJ>^p6gh95I4b**Aw(K{aw)`v@%q$guJE-LlyF9(L_8qE!Xnfjr{Q}a z$H048Apd29Qpnn&SL-=bgRIKVm$@+YN@+Jr<5V7^0{nTD=G z=VXYVgXtv;&bjQ`>G5B{Fo|n1McxwJ5`RGT<}KT}aCq`k7LZEX{45VEvl~=))Eog0 z=eF&K|11Wi5=MCVOr7YCg*l872Gr^6qL-i!{qa}vfrMC;~=8I8tJJWtsC|M2Q25^Z? zGfwHuc7bzyX{}!Rx!qIn5rvjGhiQw_+$yQ9nr}*R+jEC<(Kv4qi6yhfj8z97Yw8j5 zHZbK^e%ubs{vcA5Wkhs78)Qp|sW>TbM&AsplVCT@fwJyJMN_iHGYl~c56L~Y@}qXo zM`W?k-;xW>7v?k*%W2+m;$64WbY-BG_e4NNM=dS^hH!J5F*z6qRgT|+KbZn7$f2rs z->5ED2C8X^(XU^-{)l(VK zic@9-Q`7qgX*DZXdovUyJH^pLb5p4$qO{UWVd;fp#`aY??`bGfFrn8?pQqfX&9fDolfFY!)7 zq8h;YU=mB{e^xN0yX-N2ITqdSG;7>{A#l5+6Q!C&<8wcFk}!<}Ps{aLS zz&v#4nlLx(vM1H-+4O9w6fFiXRytS1M>HAw1C8Ri^`~Q*(!>^GTqxkgHanzda24(C z0STdnRkMyfCQ`}(xezKK{boVdU?w~ME@#z%+IW^aE%@S#gb??IUP}#R5sr1#PLwmx z*S8320`umeSf?od1;{c&{_KE~q_cc)hgoOnK7-D#p$<32@`wjjs+Qsf5>*$x3w&C( zBt@_VshwX2h2&W3Q4$FFKs$1_rcMm%hd8#~3da50jVw)tX89vF`Dt~nS42S(0p)q4 zAs0PWywH(q;f65P?OjBw&jtOF@(}@2jsgnyA>{C3j2czcJ)D@gc}sr*>a4}Tt%qDy z8CY5*TdzQW7y#GyDRB1TSBVdm(qrunsPqVhevEd+RqW(}=VTZYIG88HJdw8N`fy+`Z0^qv7+v$fPBcAqtx}dwRcR&iX7(aIs!B#b zOJ{p2Ws+OUU4E;doS{ASXpVnJ03!(u;v^HRbm!bsvVJM||o6pJ2lXyvv_Vx*o>@aXn(SLgLKBC+M?UDN1_ zw=Y0}NJce>`MeHf^vRcX>;LR6nX`iC2waEVcrts`g201bxCjoG2l@G}88p+jgsm|a z4ua{rR&CT3Cn!nc?TTFZNj}tS)ErucBKN0t1axh+#K}GJrV)R31?j0eQq$u{2HA#e zw5_Cb>%a~3%isHSzQ^Dq!jf=hXSl*#ho>9CaTbyrJgFg{ghmKXPa7B)@NRv`OJ!Sl zP$>ICyLwcv+gi`ih>tF`cw zt6(W@Z))^gA)D$O%MjDM1U;iEBekLX3q8GY!b6#e_h|El@v`n=#kVUC)=fVTRjmk= zlN0p)zeZp75q-%;#ndhuk7WEPqNthpIrCcs45t&q0ILSAQrt><$6~W{IFBp&mU`rg zVs=zDv9e^GdJ1LIT<~@1PF4!wF*;e#F&REQEGPMof+cMO_R>2rJS0F@jOG8aqOP_J z+$18XP#wPBLQ)t^&U(|UM{w|XLUw?eC5LG?^yAT05O2%u{1paeV@m}ixW}7G($a;D zxa=E1-Cin6kl7e^j6vcKG^)09SSz%-2y+_PWAaj1*vTNs-e*t=jQJFAK@RXz3 zI^J^*szrUjyzzW9*zi>{6drhCYhZ6L3}mzC&1^aeFivh>G^OXeOYLgw=%3%EUotQV zyVF_pIY>^2sK5{Zgg<{iEC+W4E2SBrTgyGa$Tcl2>coib@X3iw#>r*~FnupeOQIQa zEb2*hhv`jyGAUnjSXM!3z+XZIBR~S6V&ELeA6-k9{|^<(qNw2AED_#mHqgd`)@H5`p5z>IV}=}d#HcCy%?8BURa6y&R7qxMqM789SId3ipYERo}`*@)o{jF z>&e<^AESKDx{rIw{q}_V<_cEevufrLO zPk#aWzlP*zEcv)g4rS{=SH}I|cF#o=~lKK=O`lIK#~ z^eQCgn@Bg^F&8*KeT>bx`sFNGs`MZro|*)J!#_iUjqFZegi`#?N4x z)+PnD_EO>ZF)p^rg&u02MC6AnEb^BH*POz$tvX3Na{Fdp<<5;v!wG)|?==5UQe&ud zt=({N-LxRHITpc4St?_n2&;fD^O0n99@vG1%7BjYQ-rs4daXz)0rpEt8`%_kA1;T~ zp#b5<;QG2zXL!2})K);77|y;1IJ{7r44YcE&R>O`3G{w9@U)gUVn>z@_Ynu)Fao;p zlLFo7wKIKifI}stqH{>>xv-8?Xk@QTxbS94$jSXW4Q3*#d$WWe?z3{Uq%AgbC@;L3 zWJxF$WYK)4sVjIgG^@D48s6x zcyy)S+1OJye#!wAH_t*qWtWUBDxPD;(NrjC+5VLmzVQvWt7r-E0#cBQbX<|vxj#hD z9x-?iu_H%b!ouE0_$}!G>|$XQIX+EuN%=s5MM*PG|CK(OhA}H58g)z3;N3vqZAsgN zEaL8NW@5}IU1k`EZrq>`r&(fJGWc=bPg6gOhZ+sl3n*qiXaoaMw(?V8X``pg=sttl z5l*d^yX?tp!c4L&y?tkyHFiHlw4&y+xNw=>*OKdnYm;`7^(fZBGNYEIE`f{=zd4ZU z)729b5$+DA#cEtImvn?S8*h@27;hP#Jl$^CcpFyUS04?$h3w7#C1j5X3x|S)jEsr# zc2n(NL-t5-F?-x|JW38^0xB_eP2;5LS$t|vRfqgW8ZL1)r?}iYT5c0l|Ge5R%nx+` zMDPEJ*1H77*Eg{9N=g~I{zynHD1`J+ZcP14*dF$uu>I?SLBxbYD|g5do)&k*+V>I4 z*ac&fNV@L@n80;G4DM+~p=>NK(gD92ha8|yq6Apd=Zqc191VWv<>)qGGC zt6W*ys76m1*Sb&6wM&)pPRMK+~iYgU`V(`rl=@5NV3R+ZCRh zZD$H@TfKgt%3hn_WLNGlD8@mZ|EO>B6_UA1uRaPt>tI=n!Ft{;fBc^s4@J61W$W)$ zc<#2H@w_VN{n{UyR*0YG2}4p3mJS8aWNvavji~*&6ie;84|LuhAfLt{tLoS-GFXzp z3s((yd%p`)f zR1BIP1vE)O&o8^j!EY&0=w_+Zeq%uD>&+o)MQ80r6#J|1_qjJm0i{(`Dm&*uO>#P& z)!^N`;&V*K@ZtiX`fh!qn@pcc!1`@C)L6Zd<=^mVORHuMW~%x_%0tJf`qK(d=+YBa zhLfvPc7Q0-#Wg&*;+nQCS4NW>=tGLM;A{=nIlSXnBhE#0!(yr{CC=w#*;h3TQZkR9 z+?M5$kCF>RJ3XKzLJL$4=30crlaBza37nFav)r;OH^w%SfZoKulI9c{%4O4s2Ndj% zH1DqWFZ$Bt!L4WsK@16rfkd;RD2_zU^BUDYr#UMVk@$z|zv)P%(b{K){TYBCwfV&Q zCvS5&Xcp!c!`nYFBK%Bh7arBpn}XS+*77ZI7J!?ZlWRi!a0`Uk+Os{s$Q|^AnIge z-QCt1LV@UsqHm(5cs+qPRY%#GpZ~~YVH#N6HC-O<=H}!k%yKXp2QnwAGXM#>X8KBo zh$RzQ$_*HJOnn9y{Z^G-wx5LusA`0%VsSN+wEQ}nvh>&JRT#e!eokj#!1v)zkuOeI z1@w95s+!2ld)Wu^Wza{Jmp3d3(MPxWKK(3ZKb@Y>Tc0bO-Rce9k=ly4{Mg=PDPTVgsxHzx z1C^OJwuuP(N_nowDFXi6^@wNPS&j8FR^ZlX{D6{*_+_rG*Au^cL=wPql-8(g?X15J~LTKoVW-iAta5;oJ z=wlkd(M9^pN%OU(_+H-tqP7Fx;u+)|wSStqKe1h{mwc~+p|p)RNxI|aqcuBxzry>u zeI5qPOxQ)LlIhfdi11n5R}bdZp@q_Z1@JM(`|cy9r6E^*;jgf7xmj* zp0_0fsj^r*j&ufM#<>sKItI&nrogl`3OIk%=qq*Fl(Nszkilx&=AA5Ic!xs#jx~vr zW}*QoQ2FK5zI#}Lny%cF4UO|tYb4wa%F4=*At7;d7SuXRu)n}(XmC{Cp{mUg4y9hL z1lsx3;mRDNmh^3#UKyDtw?weZA(|W_N!%{~(X%iot_O0?7IXCG&p)ST;sxTRs;BPV z!z>Kec;!Q$R)2JnkEqmViTUdm<>;2cqMHu{!B=^3(51BJTc?(}EdxflMnQkCGMwz8 z?eOOVjmIFK1LkON(rCnNSVc~%KXiv@r1soifgapp>*JXEqY_1PJM-V>se~0vIIwbx zWP?aG^o;d{H`0{Sx9h`ye#HtotQ!K?C!w|8l2yx^1;6y zzFfk>VGl_;_GWVT2sTQD@E)wrm%DsCVqb5=EWajBPF1O=U-cm@>N39m;7}w*Mx`0z zM1`kDT71W6?7|SuSn5$t#>-o47n-fp_Ge+4c}907P6FIv79dYuuD0Fs5m+6KV~mD> ztO-gKJb#g{L?IG}#WJw2XEy7sKp^=#$uK78#SJ_svRCr;GA?lOb-r)QF#6&iIoTjI z7P4d`C@at~arkcJ`~{HtM##mfPbfC+?p?{c+)UJ8j8xZ(a{9?Gf3hnAOU7QZML|fNZlu6} zoMLvS&5#P`!ukIKsxASqKg$){wxjs>mP;Wtk_;j+pVsrrwikx9kQ3Nq1FJ;}@L0=n zJ~0+)E_?KfHi9|;~p~P4>%xJW``B>yskY^M+g!)mMT#Py( zd$=4d&X=>{wH2z#>B&2CwbY&`6AZT3qS2Ch~YATzkJw|E=2|{4F|4z1ifj#`A!TVxhkPn+v$ETlXpR?&1ic z`Y|pAw=V@#{!YDokAe{u6$NB^e8iE{Q;28lXU8lGArswy>YQ&tjcYlZ9m)r-FHpye z4wqD4Gt)q&a)A+P56y}m2o()u$oNiQOz_m#PbF5OHB8vg4?;S!?~nCsx<~6(X9^A>G@@DE}%a*D5Jv5WnB0f-CDuBnPvr4RZznnenu0E52I=`JVKh&Ew2C`Vl>#O~Vy>g*&9~Ep zMX^d?QjK;?SXh&`u|-So$jS(Fvq)50KWL(ymBekjTsbCk+V+s$s6eknfIln!^(=8= zUUuWgcgrb!@?g0Urh0LS?O`e7^?s~Y)|N>B-sk+zlc0$D94h>=ypW$Uc-#l?PFn9H z$>r-up+ZD*8wm?aDGG@N3`mMK}W?LCW zB24o$fJia1QV%G$>rG#BPFEDuO*0*5CJ{_oRL%ChaQ3t;NLID%k760<-^{qx(b37o zTCU=cx2PtIH+ZPhws>*k(kw5TBafa}9fr^&d4U$4MdJw-i)EN={{-St!7q}7IZ?RJ zL%Lq<&u~(=S zejYaG0ti`||2W0X47)r=*!-OH*?J7b$B=lzgrza4wX3A%Q>R?7Q%$}IQ{R$lF6;`_lDF*dPt=t1F71`g8~@RDoDd(#ZhNajE*Yx*AxLhf^5BVT&@o=P2Ubv2|*lUnc^h^}Y`WfRYXSS#t5dFA$! zD|^dXAaPVA&%B4VWN3u57p`p!dp?_*rI&07`oopD6fbcBv#h~A6VmK-L)s3Z_RFi^ zN89IMR)Ts%^$jza)|XmS&s!)GSp_j;5=nPs|z)rvw^ye#TAIvV=89INJdk z)5wohizmyzFukAQpJ%vk^*{wn$0J7$7Awa-3dA(`U`QWpHZMsMF@o4e;*shg ztQkWnU~(ipn!cXeCm3pVKS3gplzPfXo7JQnKgYN6gMqW`4{M`TdV7}$oi46CuJ%;o zEU8ACaBK8YfGq$gT>5f1!1I0Z?6O#r$Jq|m9q_9r7QaT7+c z9A_4-M~}x!qQg8UjtM_ERLv{L{?U@!iJl-_*F>kUg}aqxJvcNkIN-!G4wZ^#HrWHa zI0_s_nBZWizv!4C);4W*1Dl5ZSuRdKzZV7^&oa3hA|kP0L>o`VSJ3%RZQ9`uy-bl= zCu*g7B2tn@wP?yxEmaL+^qsbE9k>+bCcI=fVlKIQ(-wP%9$12V6um9~<4{SO^qqoh z)yO+yvs61SeCa1VIG?PPQPLH&cXQWAHX4)IP`w*nR0jiKm&}1v9+~plh+mkdHeEMZ zM3vg;I5d3s^OGI-LVnFpha4@KrZnGA4h-}hJ?~4$M@y${D{etol5-NrswJ^Bqt5eQ z3|EWkDufyP;YSgD_??l`D;kaW9gQS6hQ2MT0At>MWSFrplc263HeoIqGi8do}- z9P!8#P#Vc4LCcYT@Fv#D(m48oRtD;Y;X0c+{oDu-}&KLP(^R$?bA! zlWjI^`{<%DN$z58=~$mKx{WqEh?g;*OtCBe^H9)e;+KXZP^wQ9w$90`j&3 zMAi9}g+8NoVqn>iOa1mujZl@Zkk3#lcZ{ciuN;gt?jT*nvOq;FlqOt1b9VsU^G_4r}sXT`;sB|51`E4gmttVPyR#BD{=mPL)B>@6Kd^6iqx`n*n|IN0#r z*|+sJGOpj(1hPIWlglc2zh^RvU+1>+k8O`uUusSxACPE#3g2FLnm`5WfoD$mNs2_U595Hc^U`L69frh+_kDy+7bO1d4xof9I&A;{-v8&Xmr1!85F7bnVBQ z4ZVw)oTMS_MTO;LYf3e()Uih6P=ZJQ!yh){O2z(a_f2&Rpidi>0NM91{e#E2BSDmoo8rwjAtns$w$o$FkM%4~Bo-&$p-WALW1rxCr>KhGDgAA~`BksL)a#Y}6C)X< zvJqSk)&)WT@oWFn0=Zs97chpkTIqWoRRb-aoc^~$hZQ9O@ooX*HVE}ax)+|LIww#v z17DB8^`lhWyP4Mkh6J;^<1wB*^K1^PGPZyJ`Z1lI4_bb2U!S%65%mFof&Y_!n!^38 z=yu^W_N0WtUcSoJ!Y^$^ef{K^yLFW;4L<>vs5VR}6PpQ?;$DoY7V#5rv<%9~xD3L1 z+B;kI*?h`pESLTQ%WH@M4Fm%{Q@U+U%J5h|s@90dM0n@_BJVALD+#tNu_v{p7Be$5 zGq#wSnVFfHnVFfHnVDM5%q?byUj3Q<6ZUx4Gxn~-;qa@BNQlgQl~wiP-K=}hIS)>3 zt4inE%M_7X#Wd!-vEmR_JaTN9aWBX!Q0~hpWz`+8_Jr7sW}x#j`KWOM#N98`uvl_F zKe@oF?nAzz7>&D2m=;`oG#7c1k)6C60U5nBg;&Ht1C75y;zzDdLPb{e^m?Hk0V`mK9X&h%$OJNqf2WN z5R6>~!XY^rvSH_160_o1i>F9yJF=_3Lz@jUtUD`fV8kMq8ZcpYNmT_eo5<^RjY5Fr zvJkq4T2R@t7uZ%*K#($t`D+?nsh%dk-0P$BpyF`EYg@N35n4SuGTWCjYIvE$AGSNb25=A)5Eu3JbjIAc(j}FT{|(i`8;o z5otkX3pjvInh|$rmSPeylm~>abHu2I2%*!+@vSgo!9STNxt9>^2}@;ax8IT#l8GV$3EF@c z-ev2{)%|f&f6+=>b7p7(<3TjdP>(W<|1a@=G%ziv4Ct-5Ek-q>DCX$0S-tYOc%i4w zkLF@>A44^lOaB=BaMI~b_gLaqaXFGpLN*`z#J(rwH%or$h<2vD=qgF4iD{ujXL`$_3bl5NI^pvZkM zv$J<=loOk?x(KdXz&kU0`^}s%Bz5@(rFTiQ)_U3A7dbdvez)yC)4!cH8K-XgYubda zZJ%svGB?ul+EH&uLZB~Bi+Kb>w`36nJ}Z=rF0))ZR32W}Qtn&`QCJiUSYm0lYejn$ zt6Kgj$z`R#lHaIUF&ldcWc+wR62#rK>1kt!OWY>j|G-&swwmYSa-N>McZuhs`u{gM z^IrhnqpT;D_Ne*gL^LD!B^>=d9V8(qMx_i?8Od&mK@mg-opPRxK|V@&Jq%3hpaLb` zxXu9Z=PIg!Si4cVp&b^E3_2@EfdwN!_L76pRD;x#N8*X@3-}eFMa(FdiaWL16KOc_ zFCb%>0I43rCl{1AN+@?olIpOR(Svj4FChODHIpOF3OU`xY&MhTg{JKksR0-Kf^~x$ zsNLlm5$`9+aihl_juF+7L;Nd5H1XhfmAA_l7gEkSynVHcQ8N9 z$rv~a!tA`HLyZ$us+feA!am6_bHZZoP%=`9`GDdSqw2bKH)^JGIRvp(Hf+1e_f+MI zkwSjXpx-4}E>y%7QUL^$35z00TX6?cP21;tZRa&VtV0S(_=TGh>rlqH9e=d!pfJ*k zoy!DNanOp80Ue{L+qXhAEpKsuxII+x!kYWEun$tmu(QHzi97hE!E$n>mZ=w^0+#J!i#M zhM6~b=MkAXXMnkM(qc7D+wfBwP`{;22}Ep)f-y?DhOnub?zd)}@^|P}&|;PopjmhH z*v`z{Z*aLhJ$~}|KIDFfm}tO%vqF569|1#wLqmf98!H3?;5)#CfRF)rwFqor4M*8k_n_NcohEoC5b0l@pT&hHw5mX%ZMO z@O#mbh&wI+u5nyTQ|dShe~7Sqy1Hr~VUTf~D#k=!6S#4AS%x33&)B13PfoJ?m1rf-!$aka1CQEuX|axH{Mo2C59R%4 ztP0oZscO!lNBxehMAtLX(*M^6_ZDk^FC)rzWj^NQ#r(YEK&)C0IHlu7$ zRVBQhiEthtN@o%nc2xhd%Kz%6=ukc>M;F|fEP@ZVxsV9Z(a~u(&_$YXISdiP^CuZp zMhEFI?K>AW@?bi!y5OepMBn1DA&@7~q}0>PU2P(difg@9vFeAwtUNSYkxz z?<3&6oceU|i6>Q+@u-fa^ahfvd+t^j=A<#H>r4)nz0LR3=yp_BbD-l zAndv>c?Yt)P9x!t)o4C~J=|F5JDjWMs$NU6h0U0w`O+g(yvb#Dt>JLqI8#@x zQJ0Olxph<1>YK*^08nH=KwK4)XRD~V5|XhDO4KPw0v)I^@5W^|L2e~7dEfO2c9tPl z31tJ%FGWC+2>-SQo926@+pM}`>9d3mP1jI|9e^o}>d%VraJ}*jIVJD?=iQI*>JEUn zGL?ij4^1V$aH$1Ldt?F?AQl;og|wuiIM0j~fBsA(xq|BW(vr&`_0VrsOe}coIv_US zyw$jnK-dt{9Et}YqzcAK=zywaUej2q&wyNi-syEY z8sMNT=47%^hu=vDic?fl<`-~4FR_I9{u&gIIz$R*<#Yn0mieYeeX&L%*mzvAOQ0)! zkZG@S@6&FE=BY9z!#Z+|O}70!$hHEar-*w(At~et9OaYPNU1IR(1XN)?D1(-4Ax|o zvEre;$V{ri^ccz2t2WWKvKi-K0VVf# zJLzIRWdS8S{W3KrWhkE`Vd0~YoDyXTqrj8};^i$c;S2_Qu{%*SIESzj%OlBa>Cou6OvjE;r@aMpf4i=LvbJy%EKyaf zStTO5UFTG(sxp$E3$RC&EvJ_E0;2W<)T^^poAVcydq}eAEjm&ha7E# zq=zAv0PdDU5wwN?wwhIk zzW`uMm}bH+5R6vqfm{0X-bPe(goE1cVe8t0z8t)b56KJS%P%IY?C;>@rryipjdepG z9>(T}&f-_Mn+k=~8Ss0NGy3GM@!q=g6NR%ejF=Dd)UBXr4~~0_?;z*#QL$bjZ$&iZ zPfs)JIhNW#yS0dCXX^k9| zM<$&nA*HXfRa*W6z&Nqlc3SVw8>UMOyjgYg?SH;b@eWKpL!VbC*0HDy0EsFq57UlX zBmUUz^$HIs5DB|iCYf8CN-$2C$5gegcnx`CQFN>2*|_LAfP#FN8CIGd->~Kq+Dv)B z)YQDwbfFNNu`avv9lDsY)cFetoPM>op)v@cR3s5(n;3WVaJ@BIYCSPP``EO-4ut*- z0B^L?H1tqst-RD=Wb_VS<4S4$1qb`l7W{#!_-<-F)AIGhv}NrZ=HLG1I^17vk6hjh zB6?Z7d@nZVg&}+nRRN;TwuWZ!QgN__TgrM4pgc40sDZ-2)3xQEIB3{_MWG$5h(01w zidlnKR?Qv6{5nAzup*n#oBHflj)h`fiPwzB#f!J#K4i$8PM}C;JB?04T(fJ zuAr1QODAqZmX=est;8SnR9|qbd6aZhV7m|0-79`iU*}=sgVkzx-e<>6sz=q7MALJ% zBgBskOfPN?+7Q--MZlebUvV|X9jRPN-kn-6a1$5&Q7_99d#j-UA&)jT*-_BIqPbmn&*+XrTA3U8_aBzwSv$PXxR6XELH-x+FfeNouxM--^D{K(2zQRbGgbV2bk zERNjS{El2qsD4zc`o3(!-ik<@629X2Tx?W&t?>Q)l=O*8Gt(-2z<`(sd3 z`41);_BdJtYaF=5YW0rSWErtIqw*^@l}S>Xw(`!{%g8EO;6G6FF8L89uiB!9#jd5D z#rdV4wzL^=P{pUI&o_&nEstj8 zGXz*o(hrq=T4p4Rd%P}0B=T;)<7l_9Ap}1TzkO<+F7L=`p zQ$W&k{eR}wD3sPnW73!fVn=<(An!Snfu==<_(!4wUNH%r7}Gi~#va1;SsrLq19D|7 z1S_;ueE24QiwOl3Rmj*jtSK`HzG0zd21rl5IgT5kT8v>O>9Ni z13}j+R@6e$8lf2|W(n!2)+?dV8Eb!WBXe4_N|{T%(-PGT28`te)HwYfO4aHp_{gNw zVJ=#rbih;=R>=*Pac)*RY{$+KbUNGWL^=@u^By%352?tI^IVazop@EJH<=MVLH2_v zf+P!6%GzF7*M2NPox*7}Ye~*pm{`QwA-rwG5-LECJfuI4)ClP(rnZv%tKFZw0LwoT zdqJ39uDXl|P3Z&#((+m@4i}R?)TN=6h;o{HB87EO_Oa;5Ntn|{s*uMb2NB`fgCq!6 zjI0PbTxE>}sp4R34K2F~M;!$^;~i%?S`3g-C}7zZo(f^bZ0J}E;CC5H!X}zWxl9K} z6X8a*RBLE(^ZTRaAfYZ=r37UKGkV^oGKZU^vTgxK7nVIMt=uG}t(ZpLI3k!Tm@zLL zAPbI&h*BlBi40AI0o508)*Hc&%IR|zotR2nX6ou;H9<}&{16x=erK^36_5rl(}P}R zHXL&&oAv`l_Jc)pV^iaf2o|8ZA3)~vl>vN1`3Mo4%Oo(j8~DkQ(rS?h&17Hs5M(4odtz(w4{bRmd; z0X6||5V&2oe*rB}$3L$IbtB;}O1LFwMsm1KVr)bhmD)vFtkEjNxH4k5k9NYkapUDY z#Hx?9(W3^XBbiJZek9i|+C|T~FDbazZ;Jf3nTS|BQMzvbCTkk*K8JskUsIvt)g%5{A~bg%0{ITb@I z7H1hNzMee+m3D`Anx3==1p7QTV4egoijXVyvBCJW?S%$Rq2RI1kL;3qrxBh|8Bn+w zKxs+u-JC(gJ=PWb$~_V3q#(J$zJrWMqIg#BR^t=(R)W^fsIka%ZNRkm&A-ap?dtT1 zE8Adb{>Q(r7w=c?@c1wUs>u$nrA--c!9|qWF4Cca~vFPs~iN4wvmSjcUWu;^Y?UQ_uOvXMXN${@3ZX z-Q^wD*Kf?`)cVjTMeNic_o2`Gh{i_o>(&Akg|~$gFdPn+_FDutin6S5k+ulKN%#r+ z;vyvjF5DyN-mN8qNrR;QZIqjSj#9H=JXHtoNn+vq$B+U3&l~X>S^8^PBw%9?C4KIS z`yo!mz^w{_G6qqP9Dziui^hFv`|yeue)r=XVRSiu?O-lxDhCbG0eljfN%QIrgklx4 z(iutfU$hLopC%gayf$3e%%&$%W~Zk(KY1`Kys}7(C9sXoFJgPdU#lBd-)zStw4Ea& z7K2k`b#ABQp@7duiP!NIf9{`SiP|Z-@S1z2<-(aoJY?99uB?dN%L{*$f4^_ZH zMj&X)oToeuBaJJ(RoGDR7WR|}UQyW-O*m9v>+_VN1aSB(R8SJqCYl+E%2L3DQxZOr zr>CYMx{HwC7YIdbs$GRM9y(Y@Euq5TAlNe(wv+iQHn1;fy{JNSPKU1{o^;(2mb#)j zfui+wP&3SUC!-~lkT2DS#wnf0=Sh?y*&-o6m2P0zXL+oXYJk+3>(-k`1`rid^1!)! zb|{DE9}UfMfM?y-2!dTMa;zK~z}-LCR-UDm`*OE`L85Z%<<8(~H%1irz~(-B**^J) z)o3qIw`#!)^WYOW1F|Nag=oHn8j|CMRhdL+OSfrl-#^)Thg(0hSYGPBCOiX=WOu?K zb|Z9KoK=xpTp=241kcpbGK>Q^;7DX>R)z(zKNG2nb%bMO2>vMyoS~u`L zcRMmN_V+RT%FK^Y4z!dhU^_mpqPykX*S(I{wOtfhB?RL$qBTjAzZgkkVUAhNgl;J-Ghjxn7ba{eYZPQ+SInFL+!J)riG%~i zYwaGNA|6+!{$5BSM>rIU+n}oxn>bP?ldtn%01=x<))2Si!ZnQFj@#L=E8_d%!iZ)) zB)?@Uw~FN6v}8Y~jewB!xJiDi5zCGtP7AljbR;8^?WHh46~A%_-?Hg6ZwV za;2;SAJ)L-^ThLHZA1PMwc~*tEqFD9S?lwpb&}2_PnMfKzO3FZaWA=ejVOp>_g9&Er-&7GUpze*; zeHXiWcOxdH3JGF*d9C(+r6V*GElt57XOae;ELpFl4*`bzG3pSYYLN;1lmb*XYw+Pr zIumV0e*v;@6+W=}md$d}7&o*v17iYCzwD@8rn-P{=r$?+%{qWcR^M#M5uyCx(}eM< z)Z$@KP*)lPUKmiz9AFuyL0Pq(GSRuV*Vbb0;49i{+moak!vZqwPz993hLuN&d!>!= z>CX>~i3vn;!16fno=gSc{YJyfjHHCj!}`i5@qc7Mw;HBAwm3|*%S%j@cPqLQ2}+SJ z&zC*+!Z%5tz~g6`qMeMw<@$Gpyt zR=lni9GG2J5q0;s6KwdyPjXdZ0)s!<9as!oRn}~qB%?8EhPzg`?;=9KO0%vd=55Hf zt%kRkmWhFjCu`4{W0NjQ&DHG;q-C-kFQ^DaCE!ls%TmWXTXke?+SuE8@~i~K+X-T{ z8g=^+1WT*eLe_jM-0y3bm0lS}p83hEfq?h&n4wI&EdADh%AaN{t%}3j&lJRgj9& zRh>$Lw!;d2P{e7%!A;I=L=wxF)2?viYwxLD;lx&2WA;ulpKdpKh;+8OLW?XnM(rM= zJ>CA%!4_w5p5^kO%|oQS>;J{BdoMErQw!4_bGlMhF+i+Enae|AlEzZJvlWjl{gn!o zuw#WYA__w0aU^9~71F}hDp4Rh2-z}OziSjbX@P;xAjYg4l-+i`h7g~A8+j#8M!&b> z@$A5N_bXvXRMmH}qbRF`Dr?$k);#ud1CxG^zt`39+wdoPjuYJ`C;B1@IuqX%M3hD% ztz|WwdXvXUT=FajLB=Z^X#kPKjey0kdyALyZHeBuBYHAo3u`!KSW2m8+)&M3?>7## zRkZ$63yf7>S}w@T{M`is%jDkgZ=se7UzSfTeU`HL%7H&;Aptr*-cEs#%-Jg8oFe9% z?=ElG3sJPd?;hpt9<%Y~ClVrgq&#Fnj99KpiIg)R3sW8OL#8)*u(_?D9dw|*2b)~; zRxz(va`i~T;!3yzacntc;RF@CX)%kIdol>YXcWHUkt>k@IPxvAxJ1d<+ltRpt z683N>K4p%vVd(liLIVoA~|NwZk{ZGVpmIgJw*(rLbh0^b3(*s;2h9e+ntdou8w}99Otd zLKZ%u=J(mlJ;S|y;V+_F90b7Fy~x&F9ba3y4YQ_8U&SxbK324jjpoagPjTz_SN(`0 zQx)n7$7l(0r%~yOXolq}F=D7bd|I=%uo8}KsM6u9uu<`RzDS8002B_PNlw5LXCYmz zL@OA&A2di3rlu61q8Tw##Ym7hdKJT5iJ`pF@2Vm9GzZIaB9qdN5%E#F-Q$3ROm5Qy z{AmLxZw^>>e_s(v*asU5(K0M}gQ-;7*amqDgaC~Wn!r2k)pW^ITm^eYWl$w~>tKy! zmt^$Xk!fC?R=QEsbcB+GuXrh2n{pLP%lzcQz>>LAp+VSy0HHIkD5ki@emNmfhiuE%9cwCfm{w{y!`$zL*%RUj9uqFv zaW&CggR(zW8o8pDQNYj6Red6q&Hhl>_Hs;jgF%@2!S~^~=??At76$ zEDAs3)l<<0vhibu*Qz@)nw^Bz3GL8=R%l`-!=pw{liKYtN)*S=5G7yKl~ai$1URsX zTRz;Vt@er13*-72YYLdx3zFk7168Vdeek?WE~YsSOXdZ2??~jj(9Zi{Q2jB3=AUYV zz#mQoM_Xk?`nN_%15Fuo}-sOuSTFiGjZI<(%)dY#z-LSZjwab#-LT*Bur+YZJv zoH6K>jEc(XB<;g)qlfX$Q~a3=nlh{!He7|NTS;`=F|lnq;~p^wq@U zidd~V=SvQ(+Dk6~bQ_2d5r>I)Bf+xCCTx$0Izd>R%d)0kN&_|iZ1|{ev5jN@QNjIj z*t$Bq&Wd$peFx#JGSRwc-T6vSyKpicja(Bll~zcwD6FK(dc%RktsUR|alzJlsi@4m zovZRqV>A~LKkOAlm4;wKtv0?KpJtu;aRekl_gi^DgC6l^j$su8a7VV;37=0EO&?*W zM$*gO``mXJ)c0k>t_gHUcKa{9{ABR|5c&cF`4_RTZ;1c5q89*xfPw$p>3ZXzA72kI z*FT59_fHKPUV^W&!?-qTcC`J%T_cBW$nlN3rRtIGF_sDLxm+;IyUA!Rivv~6wxy98 z7W>NoQl(&fi%_R_QFiMs{F~21?pN=kO5pXp<)_R7|D{VR?!Qh|ybp(ZGA{fj#?a1D zD;J_QT_P+g5(ToWTTN3~TwLkZ8JRNh75N}t=Uep|~>?B@DleA5F;j^%bYsw_N zG#gUvwl9nFN8>)n?uklar)>yHG#bat6*Viv1xMmGgNzC=+Z|Qy5R@1+Xk>9)<8UIEEo^c_PwEDO`qYktv#Y+@LKk%&&mdE#_MjHXJiCxsVE+vc=F}- z7rd{X$72ZHSocgRl!ktAcuCXW!b!_WRvS|-R-!uL3m?TFN!3O8orN-Mvot~U^JnoF zsvxYKSBLst@3-66UQju?)@~)6Tie`m@9O7WEn7&Cj$ef_ZV9gx}_)HK_N`q#9hLn`DIDUXyXpG`Vsxh*xQnaYTg@r23G{Q5|iW0fnv6cf_D3baMaDkh7ItdcfE$%gW= zJizk#uLU;PqvqA}t?O88R@IgQ(d7Y5(^&N=^#V23z0*pE+EFIwhm0&vasrrB)-Z&Q zu>AauE@ouhF=1E?DN!ElY?hnZO*|3}1&!Q{sY%%6tdLR7>sVZwIULX{1RO`o@a+@#E$W074KGRt5J&W zuk12_XXx&6`ww$U2Z*<^+Zq zh@5`CCz->0y9-EO)n#0fecWb*OtHqpF+NzkfIP??C{&TTL9J+Zl0zI!KZxEJNpyqo zgjIu(5(r`j@CsxH(y|FpA5Oeh*~MlwxM_aam4w-F^f{v0a{sb8}+-~V?GT63~})&!fT53TxhV_4=JR~hyO1? zVHz&cHur!b1B}=K89ThroHK@${wNOqhe4z&OT8I>v+6B(#ERpe-l~%B)noSGL`0 z8eEE(WPcp%b$kB@YxuX7@ks@MO~OxP6rQxB@U#j3ECZ?O9n*F4FZ1+nXk4QENp5@Q z>PjyGO)Ly-Jo3#ehNS7xS>@lvM?DIaTE3C@k(P>c?wg^6qUAe|U#z7qdVz<0en4QV zzhn$&F>PR^_l^x@#Eb39unXVP(Rhx+59q-zxYuXryAq&)jE47JMj?ml2Ej-^NHQ0j zDQIZRz@J>#7h~;2l>`I^xPVxI5r+t*fclgdNuq4m)IKdu`2mJvK|zSTD#gGUpjGK6W=r8|QHuW9*B z$=8L8FaXyHfwqbCfZ+pzK}}%ukoRQ9dn++?AZIw|JhFIkc%xX?Ri#8PR3V9ixf-KU z{kD?$P+~_YlcAl4JQ7^eGNuJ_zLh^X`z$`?X7OVsn__dVJ!VsY(Liqt0X63n7zOUxBV{$y({Wg# zgT>2hN^50PL(Z317!E3z;OIZuqTpPJ zqWcNbj~j?Gtq)+A{zj!ppONSc$g7?Q$xTUeu7!PCIZ{hvkQbVH@xYmsz^0#0E&*cj!lfs*VoYreJBA(DDIZ>(fft&x7 zIrI6SIGkn1bljlvITr?GX2 zMuzQ#Svso98^RNsZdm)Qg>T)>a-=loj<^51`ezd1MmqvP`^ z`kT1*T}zxe;op*sv(SZC;&Y+NN_Oz;t%)~gEGGj$0KWchS`@{nP~B?zth6L8gOP6a zyn$VpTt-ffMiXg!0w&{^U%@Oj-Jz>`8BTr+IvQTDh4*KpYh>C$)U-<^pvSIzt9Rk6PmpaaOfxb_bum6i%R@#d|19W3pFK9-mtm zObD9ui3)kOt+K02^47YltGV`8@&D=~I*UbHRfUf9x(`dyF&2xj8^sQQ^faQ5Hi`#uR}jF{KIiGfnSBqCf(Skv^IVR~T70W)U! zukIll&X4&RC?aygA_t6_k(t>MvZ-l#%L^V73GM;$w#b)i;sV6ybD7&B%=BcyHukV& z%Zkwikjq6=I8K6CdIVTzsT(&Fn!o`RQFeTfs6yEL7Ya2X^yzs`^ALyO=Aa(+CV8yu z>xZO7_%0S}{pclvXhBuh-Abzni0n0~EH+Lcm&9@?wi?K;psU;XOMK9uvfQB5G2BKG zz`M|xcSbQ<8_CoPH_Ia(MiH+RFVs&*MbVY~e*7i=`}$~2T(}_2e`=G^DV_U2JkYPG za6AoZ)Jns)AmUm60tR-!rAwTpStx2z4K$eb*W+pXEc9BDLS^O+fdsO&0RdnycI|if zzjREM*lZijp+0+s24%z!hEi+@^$j71TxM}M*jm%5DDMVwkOw1C)#BHn6MrLA_zfJw zVeB#=72#M(YuF2>$xv6N$-z^djtK{^y7*i3JLSM__WYhh$nT_H8^PM^mjRSG ze|G4vu{^mX3t*B8?KRqnKpdJ{2p+*05D-%@M6(E?rdi`6;K~2|k=~{l>PUt#{YyvC zeVrvB>a31t7?T}}1XUO_GEOXB2@)7U59G&;-!T^_iN~DeU~#qoYk#QXu1w+4;0ndr zw=F{^$a-PkYtkT3r4CV#<*MA$RM1pD2EOwC*J{SvYuY_g-n9AKYt%}W&BxfBoD#`-Ji17I6@#$fjN5}TfWjFEW`Z!|Eq;zhay9k8& z5!SNgY!qr^`azZ;6HzC@5Hp+_#?qeXfUy9zIR!r~~Cr3`<%q=G%X zIwIOMk#Gb3R<;oBn+GlfPq$x@vxedD)zI8aUyk&$^iMuVw!<`M*<4 zsi^e(^=5f(wmkKzb^;+dXaU_fb7l97o59TW`)>y}vX7+_ z`nCsrTy-DWk+>3HR7wMp=9iAG{_VjoD zaY~m3$5D>XWlG@l701{AleTfk3 zgP*vX>q>FMIUW)-|1~FI_zkB+87Drp17f6av{4Ol=weFV%c_MwaxFHvL?AkRi@wj^y7YxgD zzD|;_F>|i0uSl0@(sI_+9gkp7Bd22D(e-u20Ms)oJ3%oLTgqAZie5##%dkf-il{cp zs0KK6Atmo-)q)(kkx}(?=s--|{7*KD$YrtmN%zZ!AcI;V+Mn0<;6FqMKkai*WF4P+ z{Zu0ZHXfWLAd2|8@B^1KB`cI4IfXo^MEX?I^LZJF4-N!rYAEe_&D zEQ2mTKUTxM>tZ0neA_sc)XyRyiF*n6i|;_!ZG1j|U=Z+cBk=!_(VLiUJBt!q70uS8 zlqEYb|F#W~Z_pR+tWznIrUcbXmLO5V>Xw%6MG}x-RXEQs#|*1 zjosOY{B~%&=e7?P)*=PDxj{9{z^Ym%LiP~usQ%8}=I<;r$+P4>W6N&gXw()it5;9B zOrmd#)%zB|oj*fqLswO}Y^5+O()WcE{=hE0?!|TcW@R$kQ@f8nzhT#CV;w4_Dy0fE zLTu;wAXXH{Ig=dYm{YqxI5v$OXn(&2o)*+d+hhs@7zxnbAz3PKR>xcV?pJ~=#Oz$} ze0VbhSTGrh@C)dpIECdw@&pz{QS@zVXC_OvO|W-dNAkPc8+AE9ct>GmQ069IWB<*X z{>EMXi#h!dEBs&I`rFIr&)w+z$M?g_;qTqn|Eo3q4}MtMDsh#vmTbB|XAlujp0TrFi2(mPT6 z-TyXN_z*}onCQ|T_m0LK`4qKHgAH{Iagk_#QShn>*D# z>xkpv@ca901RclZI=7QPX%(_{nK`>3vv9wN((MUBgp3hOWX+8ODX3qcDrT{RTXmZ$ zY31fQUpit=BIx^S>p4roi)y5a=OSL_ey!|vp+2#b#0dqP^(G(2;8~{38Aq4}wV{{>(SUU?P2@O((aXf3idx%*Lbq8+#R zuUyQ^!1=H3ws$nf@ZgRgo9#j~%Kay8Td6aAro50SkAt5(zj} zA>^THG&r#O>Dxn}tsT|GKSH4P0~frdX@F_B^yKq5oG((~&d}CcU<8{=54aLxbHOuc zlNyHtg8^hEv3+&1N_g6!a+?9Js-2?`!|Lye*NPlV`OPbU;rl_qeLI8eG)wl&0!FD@ zX@aHhV}u`*)8ai2zukh_z#lcS=6Sq5h3*!s!FcLiLQoynrnZPWl)cvY-}8soA${?) z=1EwY(R2mrc?cwxyQRzDKn2Gj=&bkG)_yGU;+6|y(L!75u$u@CoFdt~B>#cp95uY! z6@>gngJ#p2uaIq($CAfScmS0uY`)a_ki>{@Qy^1;k;s*_5+^V<8u*dnbw4?DomNr} z{vTu1rRk$(N`-6vqM(ii@X)Rdi$d5wFyP_-RBhd7R=gG=_!kLwPoXWlLWGj>@g8)> zG4kpiydz(Qbi`{sEbYGG$_UPoKU6^c`Pina!A1tyn0+Bdjoq_3+Yh`ei!Rw zUS#Ez0=#Y^d2v9X`6#V*P#_u`)(CCg$~D&#wN#9N3MqIx>nB1WGxZ;t@{|)HPSfnh z==w{ksh1E?Q!$tM?M>GVbHWozjI~Jyl)p2Wg6vdhWU2RRqTjM4-uULsiA8!uBgopd zcF>1`-q{<-okmGng*C!Tm17ZDRjxN(Ni>oi@im}aL@QYd{sQiaP^q>hZIOo|fYTK~ zwUm11}Tz1EJk=uB?BM z{l3R;Scay@g_cY###HzVh$_?-dlx2^vF|OjHy9X@A4X+lF=p<$gSjESj4V%cxciPs zCfy29Duh|E?q(=80kJ%Qr;&R2d4RB706atz?_{vRmC!f>NlS;nXM)r)hW<=AdRgZ=w+6;qRM$AA{^v| z!+n@D^dDK7B@)QtX@Lu50sL7m+u`d6AfyQe1qk zc%k<7J&s9kvhMR<#)W;zHM@Fw`S z!9?j^abev+gFF*fR+LMxL-CS+=wHD40*K}8s)x)^TO|LDpbEPw;qWfQ>%0oYJB!9aXiK;=U+es2eshh=OQ4&VTBK`sL#NVbM<-^PfB} z86jLkT&Hq^-p;zQ{kb`bs^}Y+C)Qe{rP%Lp^X9l|ueB(pSG=o{aoUi2a~#i>Gwf8} zmb?BkrUd+?)prL(5za;BP=S5G#W!UtWaC&jk+fe!_)((_Q$^k00*SB<1VdvwXPzZQ zuN}m;H)61oNNDkS2H5lRKM7|qe~Nnz*iF%{fGG+$0bN&L!FJL8pZ}>g*)G2emDYXh zCUXOsidUt^belO>6)=YFHakniB?^vwzr)0rCTxW&?9fihM8PQN&uG|5Q+(kpbed_>fWT&1Y0+;A>FFM<+QEhGzw z@vk|%#9mgg`4CcTL3TaLY!rqBYPu6FO@NF+FA*{(b2*RyzhVe5rd`{ARgVmYHn;pi zQ+M(H3)oq4zblCAvD9t9SKznwBf96eF}@PfS@UEsXaPaHc2Y7|(neDFf@DSL5N+E0 z)~-*{+BS?Ut`X~aLs^j_kvS2vdCj>FW2mrL!OaL>DV?lP><*@rM^MwXMhq6f`w4&JfbgTOhTz=I*ie%%+GJJW0ts?e~avnpJw{T8+%MrH~a_5gWC+u zvW;sa?MPJx{$+nPUs^5iur|E89g0dh465k|^WdqO7?+CGTvsjhxAA|~JU*#Z#--XmmO+1>ccH-)?`EPUqobn}dFi%9E? z&FEkC=P%U>5Cj6T0gvrp^(STvg^%^i`od>f_Hw!&uKjP_3Ez(#UW){Va(>312JBi> z7BH%oLj+-We$p0wN!j}_#`jHMBF~x2{|TZ8e|((?E?7KKFd0S2@G-|l%R~7Q=OZ2&E#vDU%r@@CGDH&4JKIP2 z;cdTyLAU=M@g0SGRP9X1#uUkipfU#>UdPNH-hp3W@%wNOCYUJfMDUU$*7lUG@}e#@ z0xD{Iq!i}2z8NPq57hQnjFKS(d9ySHg{${gUR|q91Hoh1t19(fij~;HCggm$WL`Q2 zw<`0hUhVvXtX?+wwY&UcyZPKJ>k(s8_5scsEM?)et`8+`hxu5s$R*Xs^LnZ3b^?mM zpz#5`+wtHcHgWf&Jd^$Ppnz#)sl6KXD}eq-D3V&7IJHpGloq9?cM)9jJY~eN!5J=u zwzK)hroh0kdey&U(POmC8wh<-&6?S1*4CQZ^7a^sZm*Y_GCPpDYoCnS|5377`xB7z z*L{8%iV%O=Qb1ZPJhM3J!*^l(6eBDTMXc8sPS$i-WlN@as;$@E1Eg1aj|YHD8Qc;Y z7TM}|v6t_-L_pj?Jf2WKvy22T#dxxFmx=7t_=4k@J~6y$QEcG%XMO5um}@*L(MMcy z+iL;Nsv|iMek=OBpVfYTO_S73h!rzetM6d)dRFL^ykw!FQY#A6`@YY~C9_iq6?-Hi zp6Tf<7t23|pIvsnHYQ|t0ad4;~Et=m6|`&mKiCE#^kX)Et6JRN#1I_)eWWMFy_}?t;R{_(b(X? z&W&ZhO;yLUHN(&N3*s7H#i-9HA29N#)DB3h$pR%--AYu7WzGyJwcWtmW3FiBQS^>* zN7-|I-mR5}#4lxAmBLH+ykh?fmL{M#nK82k@By5;&T~S`a~r`YY;F++Fi=0_-qM;7 z!NbDhE`}hDF)kCG1!TYHpk%V(xz-0VLO6C@|Tc~ z^!OA<{y0%D>v|nf&c*7dHSVf<`=8I<Z%%!vH`_50PO)7jiZwb?N_$x!5csT!z2|_vmJ>RZr|2F8Zt**X z^KOeO>of@5u~0Lrv45eT6=K3)gCm(X^xb6Lu-xeGR%7@x<&GcQ%J(dGzL$n&c=pKK zxP=Fo71R_(4+?VD&~_vq^l@(R>orw{gHp$)SsxDf4Jk^3&}kBTh@n!^w{LCe#S}WY zORr8gRj9!y)5c9=40t+HY&4Pn6Mz(xwPiMvUvtQfje(t!S2#LCg;|RW^-qGFAy`ic zi?z|j)ap>-*r6`9d=<5{p*f5eLcHHcP97F?%NI&*1E3pHA2))KGWl zZB7-|Bz01Qevp+PeMC?xdmyYQ^-s*_VzV2(=UH}Yq^s&)Qyj##(}|M45kY79?8sK5 z9GxI%HCfB=g>!64gXyMv?A@pzQ~NJfJWg;5ZyD+9ovIclkAQjfiJw^D_9tWgUwy86 z%XIyYoMl~{r9obWD-^N~yfPjNnz))o3}ryKp>i;}sq3x`miBwpS5+xuUZpGC^{pd4 z)bNiP>_xt9f)IK>wPnsyvH32U4HRvo-di9A-y?}zpgGz;8K!O*sp`nqY^B{1yg}g> zOK#EU;Yl~P@)kJB!{M`t+dlqWs|>j01S?s)_2oX!PWI~#_vZEZ*1`CeP^;T(@`IL@ z0E}oW?bGc&#i?cH#S!Y96LqMv}78=m@TTE&HZpD#fk{jGC6 zN3!p@^+wOHGy@n`J5v2Yxx>ys@xg8U;%*pQ8-_kLIFky|V1!W*%8ezV*83LY4eu;C z=otiCkl%P2ibBoLloIet*)|$w91x9T2&)M$8OVpLC1hfXN+S4v^ zr2Eya;bU)seSHpjt_X+9?X;NE=z@|*Q0u*1ZuaWj$CKZp*1D~$=l1P3-Cp4L3v>^D z0>Xa+F8_TZ)l;QTL{Eq*4JK?Z&vK2Pf+0yQBP#QGkjflDtSWf+Ci&T=L=%YgFwFV7;P|O0cCeh+?#{sV z$(wUr=naVG=3vWO{(1~DCwoSJ9h7BT@)J-YYF5t?j77J1?;PJnY+BiYM1B*hl|cS3 ztKV7dMv7bDS@g?9HQH~3ZrSTHPqyE@OkS&yJ=F^B89A}#!fDfAe{pZYpiQ_Vi;lo` zRksJ5Kb?!cuq?x8A4PU?(c8r=lAbvfFAOPWuWmnlVVyVXzi;j&JGQDG@#McQy~E5b zD6%NLWelWxzdk(bN#h^Bds+nb8|{g4*9xqEv&Nv&>vX%PfB_m`f*r0=KWpO20QR0D z**J9hH^(&xZefEA6><$5iicQ>P$P2A78QpC(g~D4BrTAy)UuMKD#-mtZzH4q>{%^z zz)TAF&SsZ7A;h(>Tf8XDvpV0x&Fc9AVt|uLeZk^&vi0f(dVNgiiw~M(n*rnhH@J!= z^;XkZS0OovXE4vmVcrD2+lv$JkAU-2>Ro%)Y$<)?cmU^opnKU=DxqB0P1bYP! zTD0Rq)Jh0?fxMhOSCXWac^LEM-B5;@X2>sGi})M=^uz-3wXRy;!4&~mHEmCMU(MSx zo8nn;N^Oidi}eGM4=&SHt}w8=4FZv3#-7(`KihpRGlbpzszT)V@a8dpTk48c? z(Z&w!Te_0ZW_lPyK~3tnlkUopvt!_UwO zkONRt#hLq~1caQ&_r)&TD~<2%oL<6*IHAvzBDO2JPkgpw0JI4hzt6?rm0nK+V$0(` z!NAkBJ+Cl+L!vSjqc-%Wi)XwGLb|porX7{(4=7T)ludJ$e0s*;Mfh<%6w5VGtbGFVX z`6(*j^LL|6@c@||pmo~d**lsctFg}t9)h2Jgc-~dMxd|iRqzi~%0iRQ?279kgE(%^ zo0!z?O5Yc$=8jX-6vvjeL8G3gD}q7iASyuOmJ{%)jI9}7=IreV1Q5rZh_A})P!h_i xxG8dU&Y1`ap~EMa7WZPa|8&*gm#LmxlkC;Ee)ttI!p2^dmgEBb7(M@U@gHxVrQ!ep literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFPreto.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c2ff5e77bd855a8031d7c35c85d3d1affc5e86dd GIT binary patch literal 23525 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 F{tHcECg}hG literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFTerra.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..13a41895ef159b0fabc5542fe5f3bc013dc20502 GIT binary patch literal 39577 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..dc59924e121bbd4b4e248f91f5156215a62e33de GIT binary patch literal 39841 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 I#;^Im0f--OhyVZp literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..b6c47f443cd3fa48c21b279a31848f9315a35a9e GIT binary patch literal 40202 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c1df479d89eeab03d1b717f4a5ef8ee31cb1166c GIT binary patch literal 39943 zcmeFYbyQrt%Yl>$IPK>=jmet_3CfcRgj|5o@5 z*SK-%Q044&!2`U-}3KIa02?c`*_1X_01wa9y;QrzR{t@6|;oc!2!azeIz41xj z7=Ppcg9`w_K*Pepze9jRd|d^gz(4_@F<>wN0I2ire-rr!MNw;bJ(TNaqx6mg06?GW z7WRF563+GW74h}?hsfLYU4O&Lx!8dKDEml|_&Tn|^u^(X%n;x!>2dzVYLu*zc#d$S0jy7 zRTMQ=XDnq2NmrkUe42I>_~!7edzfu#*(Smqw8MFCX+3w3dLUwYOEjCK-ZUV{i=5rt z=6l{Dlp8$VBSJ0Mc!IY7DBiOyuDIzTe@Le1A~Hv+{5u0x_CP4M&)jc5SN>jF_1@5U zMJa6DXj$(?ch&icy!f2WTi8j^ZWVtpI9=)9ITqPa33ps4<%| zc^u-No}-06UL*3LF2*0aQR})ss`}#<@c#Pfl<1wHR}7QKPb+5&dba5IF7j7nYYQ27 zV}|y3JCZoFYg!W^hm^@Zp;QimoO5aYNr?#~%BIigHQfyRk>xVg>T5mh1g*vD=&={A zPs!O!MlI3nd(0sv`O0!-?dv+bK5kYm6ZU*##eZ{XzXE7tZiOh$OYB?UPjuD)jx~CN;h<4RU5gXuxAGb3C^7_LKa%$0BIQokbImM;p62bO-(XsX|SXJ^{YAj|K~i z&T*StL;997Gsprl-@bQUR#CgJqgU$TEX>XYcnL?6s?L4n z5sP3$*Pe{nTe_ysk+zo^`dNPF)iKJ4hc|?O1oV#1sT=bj$~2Zw#c`ER%SK2R{oDh8 zf=ED*lhx<^zUG5l*O6P4so=Uyva8PS=8^q%-ytCC)Q^7vyj`Jgb?uwbd@^cW;&HgY zE>fas!Q-?xEj$W5RX(?rSZ)uh& zV!LrZAz=ViC4wQAHeukqJuNTp^WZ=}rFBwOzmZe@dv$ zv=m!Zi>w-z-hIAWi3iT^S5V}4H&dBf9hJ#>$O* zU^6qGO=Eif;GJuk+l2dg#RlV`xo#JuJY+$0y+NayS&JZd%&7*^GC1p<*D?@lp>)91TB~v8#LgbTKG+K2bO%+0~fVPF8 zD#TF*osh~bm zd}=_S$_d4>%d0q`DEQYxO3mH-zkZ^fN52A;Z|}q6{nyjYkoOMABM=y`Icxm(Hhf#Y7-ucSpnB44fb*;&?BZ!&CZMO|#t&O)*F27H9t+6i?%jl@S zv7N!^Frqrs4qRQ`nhH02%B(gfR`;c>*Ew!|`ua$^QFk4QMCsi_!a=;Zyw<~XL`k%U(jh=$& zZOJ?robE7!bnh=AJD7%5Tdm$beAs5UdDJcV!`l}m{F)2ae^*Gsw=OXG{*X_=Bpo(^1RxXFY;kqiMvn91BG013CZ?te zH46)nr69-cQPMdIYCUUz4o~ZdwX$WYOv*~Kw_K?&nmu-I(`QMQe5jc#~ z$&|Y*4f3sXXl-suKi>9y=Iiw$4Ev!#jkz+pG-@rbAm?B&g~k$%*9#*A6mV)|LyLxs z+wyJh;9u+UzaY4KAAm2_P~V|RFEiaHhQIFaI<_wF-Ls8GfGCO!YOy|8UCc^Z&jnh1 zK87V8RrmEcOM z(^BgfQd8c*qzW{4OfJHqR11jDtHr>jqU97*H-R`MB-YJ{OPE>Y_YBMl_%cn-US4 zaTlIl@<#e?nt)|Aw*ceXgt$r?g}faos5-_7~Wh)89F7=$-%j=>K2T@c)+>k}s&|U&~{eBw3-E zBQS+kI|)mERGGXWUrM3FBr}H|>B70K8_^SiDXPT>)7jtcm7k3#AqG=_k{-( zJ0fSqdKeN>BddHPld^ayq;ibv1IcR4Z^Y38k<=0meP3?t^{wFyL!s zA7fMWMV683W}wME)|kZFL-W=Vn5+p<2x+*7BL?1E8zMA^IZ45VzW-iIIQGntVfkV| zpmxc9X5a<7;;PwfxEvXWG{(8emJVpSl{VZ1sdzl9+GPfCJ1LuvT6TtzD; zG0K9s>|ZzL#aC0vjNxDkgXxAh<2a6eYR`kFR(xzOVYboH;wrW-4bLhs50AK9A~L-= zdHE*dL*=ikCJiO|Q5Hc%eYPV)4;vqFA3;{-+VfusYc zRrSEZ!NJ=rbEF(`B=-2qA^K@N1P_AAV#rX1Nx|BmE2b&~b)Z9kiXK|B zYXffKp3FwWFwbd)q{n`Azjhz2jis&EV<~;|D*QNpLS)NVIY{;OD&7vZntz9YkE@dUN)r*o0sR)B{JQ+tF}hc32;~{ZV*Afa<^27-nG}U zwWFU>I9*^g-C(rm?XMrD@9r4M($QDsb_}t{`|wqVPKzt2TE?uGNJS5-SyoE6JVh;k z|L8Xb)hV9x|FSE-s3huPY#Hozk90X5u30BZ`<7@txG-yeL;%q^irH~UUWw_VS}yJ+ zZ_-lKpC-mOJ^_akX1>G7@^hSb3c$2vYGvDx>YN?G4H-TaOM>5vgWo_UgOA3?a+PI8 znxi&F!!X+M0+AP@hLi%h6a~tWQO2DfRy*m4| z{w@?vvb4A*+BQQ)r=oOtY4a%E+(D{ODoVv&FYra$`T@7G$f4D*ed{uaj})eVoM)>^ zOy&^?j#v^%kn(6Yr~5s@QD@o!*u~-ixBZAMsOX0J9i^^9W9-$Qcm|fS2Ul2H^WX^N zWn)Pb0PRh-OFDni&Z!Yu$T4vDZf_E8FQIYzK{%H}Yrg1a-H3CV9}zVf_#4dcDX=Uo zej!dwG+C9QRn1xz)!BBa+kTk1|5frhYwp0+ZA)di?`D|Ch+4BYD)tKCzcjoXu#xK= zY@XOb#~5r|?;LJ!kGOn?-*Rb5<7g&(9gP>oQM#A0E^5pq<&AUosmu*UlF!gRZ6;rona?Er2L_LX-D551( z7PSs5k8kWOQ))bnKtG89nYAX-6xI|QbPhC4NXKQKD`1wdny^jE*1_V>Q59260f zr9I6{dRxfQjK<~}6aN%oF~|Iw^dA6Giy0e$bSQaw)IPfm-DH4fC*^;4UQ#>ovh3iI zJZ4*`Qs^fip85V@;MsHB3L{D7OCA_5mWa=$2O)mrm^e&Om0T)1;x^dRJ-i4DH`TW@ z*w@|Y{}U9g=U$)4S4VX}h&+(4;W%OUfqT8isYd5FMPsN#EDV#lnXVs#p0AA-AH=lx zVKb8~<|EEU;n1;PZT50i&LK9r1imaQcyLzjuyr)9KpO7}tkXeYzmu}c zV_#Vz+EItK5~hZ>A#PFQXbRudE+k!Gkgda=lXW$(*NBed;CsUtC%1zaDd)fjb73`P_pvt|J~nd~NdeOmW)p*g60Zy#aV+a!ZwQ8kJ$zK3a9K}{6H{&9%5;p}@- zL?L-XIuuKTLZjK|B8H=qnP(gILKL68^l$()0VV?lLX?$+M8$A;=7LsYN^LXp5}n&e z*KrX-!f2pWtn>UAYo#BO4m#11gHtB*brYw>W^m_LAAwWErkNQv1l;ChM1ZAO;y2uT33~2&jxEH}jR^eqL)v`)zWJ#JOLttJ!GL z(aLgjUm;1S`p%%!SLZ`MA^WeTn&Q7(N9j8OfmcA_U-r>+h~pIyyc7=IO|!&Zk&6dA z|LcTjJp2kOUh*spkT~dk&WVfI^d*ZO>$^9zj>9CL#Rw$G!Bqk#y?+#6n#Ryh{!AX* zW2lhJHbcf|ni@A7+Z-^bdbnXEj9II=DEy(_FfG#EcMRTnE@Rz}3yxbucu_dIRqn3p@G?l1BYhNMdItxhnu6mET8D&s@96E6r(tuE2 zZdQ@%q)M~-%|ax?wR_;Vu(6(|&qzFcL}QSP<4l(7TI^1p_%~mv??l{EIkwV{jR_9J zyEFp4A61NWk=??`sjH{>EJw7?7j$0%-AhPpmOC9j@9|)W+#xhN)vC(AL$Rx&Y^`v6 zXGwa(G#u|C(fjn;uM9Ffv}U2iQ2?L4MyCZrLvCs zVWT;rIxA*FBHiDT8Td#2>|17xTLgQ>`kJ>UDV!Y!%8$NtG$HD3mlnusCKE9`4Td2e zRGn1-8yPZgG;2uUgfQH|u|rmxs^*6wx+{3`A}Y)y{Vyv+R31x2LQH~z!%;yE9GZy% zL}snp8Q@c0@(?8K(1@qblj3on8z~a`bOz2Q_Z#b#4-K)PwdOL`_=_W?RNeLB9A7~u zLKJ&sEvxwORyE{qQuGNd4|NVhMqL|5tCYGms3Jo9#wBESSX@;36`7Im z6>iQRr>U=jy^9a^pW-K~KM3-J4EzoDZONV3*7 zGmS&3c&VDa5Y=Rt6qdmak^pQ_pOBS_e+TMv(F$8%&6HKaaQg(k|5&)#4{>;13!asF z%$3Yw)(*P#!@f$aYU_MK22%HT7%$f7kFz)q(m@W3G|l>3U2E>YYKy4EVbH#2SGLC3cS`E^D3Ks=Z0mc#@l`S66p;;K@rVK3iugZnN&tm5N z=&p1?kQS%t(9#eXjalsYr(LnA$tjcFWn;~bAwgNsZD2UB%&ck64H4IBozjrX1R-v! zK9r^(nS%;ECCJF)$rW&?pmcj{wR95t7;o^{!N|h69ZJ2r`CNl!NT~;}E{^pH#11-= zH>1fvBzK1>dR<#x9ee_gwnz$INKw54XvrQ1fB9pLM62JgNuTIdgf&i{8@*-Az5+mU z&08&`*08wM_;PnocRPcKHBAP0H{ZJo zR}?yb+6ICM)u4s@y_~9b1L|j=3eVhY9LgVqKNZHflu@8vppO`?GVB=5JNQy+P~*th z+T&HUfx>8Fq@i_lsK65^Klcj zC$XW}G;2SXaW*9a589r3X*j#fdJ24CM26S2@q9aCpi7X zV^%FC6Dq|nKji?Aw;{O;=DcE#%r1F}bNW28dHH;7QT2*lQ^5nyegGO5my7N~fz80G zJ*eQb)k03TWGch_FXq@EKf0ajb?jJ!tcE-Jx6pL+r{goYScJzyWAa+e{G*BxCLrS} zg*#6ITmvg9L`=<4O)Gd*tJ_^BW3olX!P!O;M7CZjJ$N!SI}&mabG_b6eK|!d#a2=ANaqqdF`*9QyuBKFLS}K~_0ohsnPxN_ zR&$<2G)#G1vfG+B2isN7cR0OuB(ynwDYPVT?z zPQv%7gJC4$@fnKD($RCaY_k>>iC``YKzez#7=0(uT8gB%x^3_3+Y71VJsQzuC&dDo z*TAJ$-DQaw!k-ySkP!d&9$>JwG!nk zh1b+5+rmrR^uRql6PT)a6q1|ajYMcW+6j_>QW%l3)`Y-(6I}q|v7n5f=8{!ljPuRS zWU|PX@8lpYC}ap|k-z!M?qF-XOhGcMFWzD>j)Sq4vbKn8K9u+q75gg3k3`GDepzm$ zeX-!o83wqv6>Au~6}tetce1F{0a${f4l^8L?6GTBW)ZE}^%{x`^x^es5T@msLrFI( zSFYlWFMZ)up#oC+ShhE55j1&v;VOxq)S}J0%%b2m=4s~d$K-7o6w={ngfucz>}z0@ zcwUMW>xj0Lp0H6vGDe)VlG9l&5?wQ#)IpWI2+HURB5)gDxYb!_KAB5}(9In|9~Ozr z?~8+w-&+ow9!FKUMAn{4tr%Sd!gl0X61i%x$*{lU8E+HJ$D=QfB^Df zn{`#6k*-9;2nqSCe$F)Rp7J)#R5n;oDdmqPTl?fsxO{*dfg0Bp^Hi*kdLo!IarEXz z3%Pdv%g;54SvS>9s(HMu%2AnY&^z)2Kwu2xOsQn({*s!JV6vQXLDx@hwB zzIERDTrU(7x_FX`>dbSqKBro}GlRvSSpC!BH}5JdeDsntWO__|7jSTJuGW;?P*ntG z1nJ7HYR>*kf=q;!z;pz+-I{U$s-&uxXhQt+nsz*gr&)VbhmkoKL#{J!x-yOftBvZ#C{&8rx?4{Pj??D;!G?DJj_c6!(J$jNN!-nWkw$mkP}HQ4ss;|kDhXpJ z{H;84NVCNzduHH$yS$Vsj9uPZUf7e#lv4G~R>?5Feih6S%xpuS*^hw4lSEd&4Lt8?x#)qwQsd^SrW#r1{=Pb)qI>N!Y?KSUC8 z#oS*3M@RWDwaZxdjD-R^%(__N@#^B!l@1vwQih`2jS7t;h@ zel+qYraZgGy4Zdo+#jy;!naQJS7=|*>MifW(b=AuwZ!}6B$z2hbDDaI%l`G~6>wVj z=eP`d`;a<;YE%qe43ie}AODso1iZeP;*5CD#wc8KU z<_kGyJ4Tvr%7!_tp%iCu1C=;2Xo#rL7_j(a_{D2I3Iw%!QTs54vaJ{6bT(U~f7o?m zw$!IZ3rHe+_4d_pn2g|42nQ>Zj>xQ2xmnEXLXB)kEE?e}r0vJKW?3+P{q2m-6DzGx zRncs{xyrZiEa4T6^vz$%ZJo>^%%*oSLUSzX^BJZR#1u^oo>)x!vvEGC-&33rK{iH4 zwo*n>RRvq>_BpmuFJfN(`R_H=fS-YeghxV4!+B|j>if-$l#x=%1EGxpfLt!C_Q z)7US|-Tsl~zfkdi)_pnJpJ-3?XV4M?8gdG;=mpk$HHZD9RjPfS$;Gn-$&37h40Zjh z2fC0rORzvNpcP|Me^(6$fK>M%PQ&IUB4+J{kZz--3O97f;7 z+9X&exHD*2Ijw46=MSd!mSfe^hnjH}3Il4hxx{6x-@zFS0xe^Ru-8MPX|~ z0T>~Wq55`&w}zP{fBdAOSBGq5puZRPx_hF?M0BO#8!38RvqlM78J4@qQ zs)}|eSoCb{6cg;%#A0Y^0WP>H@u$0XC&hY|5C{ZY>-3C1r-@j)t>tba?LYR0z5-XAkd zx(|gTQ>Ouxkl1XE1*x1gd$8E91^zjvT2zK&Ti$QKrd9D}Cz1ZsXxmfC@%5l*lWY5Y zxp}>IZ#dbjSzTm;MmJoRPBhh_q(9ZOL>E&6R;+cKcP)LW5ziH6jtYtJl z@+Yjra6euuJJv>qJ9Z-jq*z|H>au{s%GS-J439B`jsDr6ltLWg_V+aL1Fu)aoOmPYPX>YOq4L(XEr_`%Q^Rh5>7nE?dyrd4ndX%b3^ zcu@KWqR~}Mg!~!*76$nAw__?=ila9#$~9esi(wz3SwFR>+poc}sQw-R6_pTmO|f*h zY6`Qipb|Z)H458YtGO@AYLVy4VU-_+q15rD37tuJGTf8{oQPkNrk++UiFT5{?eeL8 zE3kBL?GGO)_wts=Xlj}7YzUjP$JlSM80v`Za|}a{Uy|+iDmChyD@?cCJUZH}xUs)^ zmiL+XWw)SXEzqt{aQZ!tnXqoIu#f51{$OA3;m4aNN@25a-qtyGTD7$wRugMcSa-*~ zo*zGp9FMKwnPF%cTUV6-oFK=RwnAp#vdCWJq~WRc+fIRCK+v<6NKr+7DAg4_`mNqe zO7$du;xN9*g42UeJD-X2hwWDYaPs*7ne5wY6gc&NWk39{^`M<6d}P@ho$9~Zq$sA$ zZ{3Dvc`R8e8SO~Q;D~nXYK0gKY0dVv*%yD!^Qi{F+fe- zF=2iIhtfD8zE(`!#3?Zk6@AR zyJrCO-#r5gb395<6KnXGn*{guw$2SHXmKuqTXl9s4Sb41)K%g;P(q1YVpp!Z2@e#1 z8hIFRv|Pt&k3I2NL;l-D2mLYs-*B=Rk7|CL86s7m^65?)&a8Lg=&ydO$(?TXW@vBR zQGVMODS`X}y4m*nCg%MMk@|m$Uf+MO1kROQBta{L3#6KufwbXgi|5wjxnEorN)(No zqG-ha%%C(1eEimfRhK%N^|2q!h6%Z~D>j59##`~HXBBpYq;}AkpkOttEV7+KLj0y( zM^N#CG$j|miW=~*Fagx!1{$~kry>`(3@UVeJgdOBKN}lmdRQY9$ZNKz*J8YZ!$jy? zDDVFChj*LIvXcm6I&SUq7#e zvg=*}`*H@-e`J1mu2R34kPzz5a2^0evgWsL!nwc{tZ4RFC9zEpw>oRT7HsTmfK^?c zn*T?Vl>)xmVV1l!oMGRJ1&evAZ>J@Xh?hRNd#t%|kQ*SCBZ)O3&*91IfvhhW($M`T z+8CgXe$pN^nN-|+CNd03*zJB^?Z(9v^^wOZ(JDS>1}|=ar=?K&H`r{wtFe%LijsY2 zND-`m-V@qRiKv>z+#C}t4@em54w65FIf*pVfBfW2r05IoSUPo7vtfe@B=kc0d2750!Xgmi4g=0h_PJ4Q)j-E1zrbTSZk?)Y^TC#Va z4+V^GS|oO#Bbvgy!6d6ro7jQaSGg9L`}?8!oX30Hy9|mZ8-rLT&_UUq-A;Qd05}hn})U zwp4UMu#}B5RlTM8bW6SXSAf|0kE!Pj&15`kNl7JV1HZNe z#<2lH7ghKCuXv;}Oj?PN4L>OyfhsH{g#TO-?h&#ZmX|lT&6UE~V~g;W@;K;WS%@LU z#m;{Liu_v>#buEhoZrBa;Ix$TK*BoMRn_qv@r}w! z$v*eE%f9kKD(%+P*sqv3-1@XHaZ`J(Y%k|?la?cIa~;1T*s;K~bP9AjD;Na(TMjGg zT?6+;@9wUD_<)r6hzdFgq$trNM0wFyU1acXK*}4mqt7p9VVHh!dQ|8}5VROenNH8! zM|!*(gYNQp(A%Y}T=c%lk7Mf^tDVreB`pdoh_iwBJ*e}r^QlZmaU&Ghc&4L%4t%VA$R6EUA zSnh+_-^bHv_q+my!`$W#%1~25Tve_0Tyn zm2uE?J0V^&W>>wTq2qi%g2iZ*5(IC2DZ<7+Vb|^HXEK%ka*dW4wVunamd*buY5SYH zhf2u|n?*a=FSxqy;~(zjY>w|+M{ca0jM4@;%e^Dkb;g#C!Gn?`N}P^qHK%!umI`Bwk&Rfio7=G}rNwi5-`J{ohXlVxeU7L1vH;gAL8`lT+4Q}#AO%wA!w!wD3 z1Xy;eIH)4xw&OFGK7KIFuHz-IP;c@GLoE{n{1SCTmVK}DX($oYjNKExPKy%&*1w;S z)lUu+baXY`uIm1=+_+-Q`F-p~3;eiP3+=mCN&B49XZW*xW+_C6N+}}1R(Z|HyNtV1 zz;roalqjmJ0u4XGzAX|euaTFp#HT>ak*ZQWl09F$`d9!4!WX-CAnj{77EiXnL!A)U zS-0l7KGR+ybC8>)9%=Qfx1DJDRNDv+p=a@`ZXa=oD zhz@P?rFrl4@*>X3SN!6u6#6^O0&WL8nIVn%(H_@jUL~%k4f9$D5+f4D9tlY<+!X$( za`2r>AKS$Xg>quL)Q9!_=*4B&k<#-szWLD43QIJNfUXbeFuIS-2o1|fuAIcR10jAP z=`S(q+9~(p%&bz#JouhZYZK{$zaTR)L0A&F^R6Vod7-O!- z*Tq8)MvjbgDH1&;kyW- z`)<16tN|BmH?GTTq$P8!Z)V$*hLFg9n|5jYeVO95xO(Q_x(5zK2^3j*wb6Cs-yxud zSPm|0D~<-4?Dx>ixlP~i)oip~hiYMxc=3ERiP@>PT(Dupt?e9@9;JeJWwpbwO(kme zXIs+X zU6%7bH@xiH7-f3b?JL+ni>*twiW0SZ-o$ni)-4peI2|ilr-s+|sTDR7L0zSt%6PO~ z`5FXo(U}pGgP!Y970&_@e;80!P#;$6^D8c4=^u`VexXjPieQ`Bi67YvUKVrg+?T+^ zLE=9Y%K&;4&rw&B^`WhGs)=VcVEO=YH!1(c|D9Gl^7^W!~ah@Iz*arJMY(c|u zK6k!w5tW4A4CkI&z7D$qVzO=B@WBi`l9>N7Q6Pw86*Y<7dke}1*&~HFya#76I;zKs z`$Uaw-H3O*f@fQ}as;bA%J3ENi-`4@)+^bSKON~g&};|dWucB~r+E+6=a!%sDHc2! z6o~PTQ4=q+v~6h;B(1C7w-JU|7Dr0$N}MJ$=HJJ2j}_nNef7zGJU#BK4)O3O?A!Jd z9Y&M-mM8*5}F^od-gK7ymaPi zru)AF{Jtt&X@I2tYjBis+)mUz>vb*k$+E3o(iH9a)@WIsLvY@ISi*QGEX*PCV2zBY zbwQFHMOVhC$x{}bIL zcJVuviYlJWLWEDIR`vR%v@pWvdi7P^`QNZx+*4tMLMNr>n?6i5ju3}AHc{K7fWW+E zyhOO00H9vIPr>^U1dVToCXYp77}D+QMQamjl;qlW1jCL)*&ac$0-3dY1>kT&JBwhm zYCvc9qy4W>PQM3Zp~YpqRqJnHnUVp4(2kQtZ{N#{Fkx>;+TM|1pprto&6Q0>LR zR$mUw2Yz!`d>kLV~Ns=|>ysr0{dhFznQ zC(hK__k2jaKq)Sinq^GQ*S0)!vPIu8&p&aFaZfnu47v|m;Pq<)7RslnQ*jT-tPpN0 zer(Z$CXnv-9rb&x6p6g#nq(qnwq3RRikzCI`lqP`=u2Z_AEEDuqlOEuW`yx=Xx8=` zM{)U%eG(99izr(x;i4-3piK_Ms1^CApNZAbv*6_6Wujn>W+ zTk`Gb@GN&SKtDuXvHJGKknEvTsqRi4Vmm}`;w8=&s}U4F5@};i&o9?!`JC_61)n6* zE*k6(IAe&CXQ)GU0)bu`lNS*!uUfDa7IXtHjb~d~sc#aXS zQ#kAuP$i-%Dt3~M%#J0Qv;-}oVR)+Jl)o4NhHLt+3&6&(g@Xl1`}+g-DJZgFRXHTK zBa$gBWpIjoGc1KBg_TJJ_r@};hn+MO86tY{2Fq^DbEAF~J4vrTZ9m^e2|OvgkzK5i z&Eha}DIP4(i>GejMqZ9d$cA z#+21{yZ0p({7osg%|&3Fxf*-#DXC7%3MHL}Snm;)vn4Ml>xr&kkiZebHbwDl8cws_ z@W__0V_zApKR_3kl}W&H4y&bgZka$g<6gT)ukhJ@VRuX!eqYT}LaYkjk#y`mk6!Ac z-j%D+uiLdhk9>RuWKR8#jQw>@BDaM<2@ip+65G9JOK2=n5e`@&f>xf`S5}NT$PNF-)Po zi_(@v43&cgj~ow9oq{;a1!G1PLbcbI6JJCbk#?2f4OEccj3V#2d($%8wP%QE1OIA7tce6;kvcn2$-Jz-8V?JmMJZEo zO%iw1wxkFHsoMI3a(Zcg4UWVJXX)8+=!I)uui5s^lMis3~rG7ASUu!wE%QXdgB+g0F{r8w8P7qmDw z`Ho1H&9D%NTfEMq#oXAkPOGfx0%lsVms?#bG1$D%iSd-y%xVM?-zVg)pEd2UHLq7= zK=q0_kWa*8E5yIKBp81eqf$bs$T;|SEjQsNy@ohFfh?7JLLh;v!@lD%0Jl%Kx{Lq> zg+V+5!NgQTNDk%G-hRk^sk`<5Y3klTl4(~px<~byr>l8uLbXj^iliCXei9ZxcplBS)yBL(0x((YbnHd95u@E zGy1S5{k0BoECqb!<$mv?oS@J@!S}m;_5LQX2B~jr`E4C8JFs+T+(2J7>>9k`2$Su` z!U?Nw7Q(quOq}v$btc=NfvFF(9p)}9eB(|_rluJ=qr)g^RfUt^@ORQ^(A3zLaH1D- zO0`6oOLetSXxY)Pt+(!ahszlpwf#P}CZ(PE^Nm9DW+u)Ybz=~FEiZpo=A}<^Nj3$ql`{CwdrP?Js*wL-LDsIKPe3|E&I- z*+Zls?-g(x^G^@^cam74a(eEE*F#^!nCE2&dhxlXQWjTZlL_BNF zZ2yn%h+{ix6^$w-!MD*GUb>{x_yTn7^L_s1OC>?;p66)yNZFv4;$LXPOVD&Gsw|0D zmrZtgyig%md~?@{qsZDe-?~jtIGgr(jN8Uhy6p|I?O1*)(TTrpIG*CyVDcC@?XvD% z$bAyU#=yqJ{`9xF9Uh*AiTN>}k&GwKxXd`kqDFF6c}%)T>lGjm$uj-~p&D&^1~&h! z>IQ-zD(n|@eaqKwHMh$Dk@*=c>DuC2Z04PF!~|<@_T58bq0biz zi$yn(w(Td+6HpBsxbfyRt~n49%_cp2v0=--Sr+T4~*?b3@f1@L5-~^2CJc> zMTD~f>LLCZnD?11%yG6#kI-M0nrA-fZDO<}M!Yz(xay2E{~l;5$3+xQfl&1eqPVSn zlD1Y4n?C?AEcecg2kcfn^TUTz;y#ro!(XtQyRLmyh7^sv2Mr^WxQ+6riMP)#JcNA736eZU#lQg@v9YwqIW#C-Sb&#TAS9Pe2w zb*Xn@{6gF%P~J38vSID8M)C|zH{tdsh$i{%OUdu@kM=$_^N^!{@*YtfCBI3(F3bd0 z>I6iD377-(~KvAG)BSQa5ioQ5lb;%Ao|EUj4ZSXDYblqj<*6!PLLEKUQyp zRrpU4oZowbAHQ~z3=uf1B+8oYnNelL1M#SLqY~!JIB5w#@@SOBBK*Lk7Cs5Wn2;BH zUo01t&TuR_#tpojw@F?k@?vMvLa00}Y9usEA)4G9*06n0G7ebMmAL+wBN1 zjU93s)En`b(>0?`_%kQW)%^HSny_gX`Bg?dYlVS7#7Ri(Q4-G^y~gqSA!@ef29 zqUytR5o#py%nP3C=OgZQlCI*hfr_yV@(>6*uT&j*Nr+scsgiR`qKR6HYw3O6nz;ZDcQlN6jHgrn1c z?`{SASRU}n$PHX`1#U1L?DRy^y<8vU|E#)S9tw{TmYAxL)#F6^887bej;j$<-xhOL zk<6O;Cfv&v3Yv!G8yfckRW?j|lY0;`(MkCd^S$e)$|Q%^LUJyth+0xLv5Hbtv9aj? zQc?3_j*h+=FndBIhmQOT60+tEQEXYET4AS^$BIp;DEl%fyj!KfEbtyDjDSxC=Vo81 zf;!20N`fAR=%Zq}S5Ajumi~OZe;@M)pv)OZgwSkpC>`gHC3RUQFQ{#11U)Ub`EFzx zUiK@4bkylZNe`b+C4@nguwDxH!hq?)W(&R97H}pBld3w|)f->cPS;U1Cxl{+&I@bW zUhWtW%LEmX5|lFAhkUKwrC0lIdSJ2fj&u9l)6Hy(`k*F(*bV*S$5)_&ZpnxP`ns

    M|!;QF1O(~^nb0{^Y@y1|5CH&?={u_8#Vv$xB36Jnzlb5sjca+ zig5O2$5}qc)PgpYp1JKYnov9O87#KJGL%&sNBtJwvGv2y^0`kCteS|C9F@iN>f*qg zk;?g6Bx3uo(+hZN6#Xz5%GO{`tHs1?)Lm9 zgzvJ|L+d_e{^XR_s zWrpOFBEI~-lrh|;J=Ag=-GAis<|20f{_awo@&^##oc#wdEb01m!8#K2T8HiQkexD%Q3LDUf|8#lwF7a9~A2xG6)@cV*mf1Qt#$%ci@><-k&ezrt& zu=o!kpgQ^M&hxLM{LmJiP*{e1>xfkG;=>yGiVpKZN92HMxwwCbRc;dYuC>nE`0fFH zcY|!dd_6r5Q#Y%36yBc@`fii<&hy1)&LYP!Ljsom0I)VMKGm=wV8r&`@ZL-a`8>$6 zd;G9c&i1!nquyiJ@ryFdUYLiwNI-7KWPMbp{{VP?S`Y8Qf;Gv7^n(|W)7 z+!sAUhE|x2!v_x%Rs!Z&vj#vIxWv5gj^6P25l@fTku<%dSt#Oi(w)OTkcW0b2w!$2 zjqX3K-+bTvl&hBO< zj0+1yX6B>NYaZ{p?Y-%b4gL`vl$T)Prkp`MxBbWDKL9kJt9^+}#^bQNn}0@gsJ2*I z&NUVI`nC0=sAn+etu+-j^YTIyQa0gEZgTjN_LJrhU~?z|85z$tdwxhpMSGCuBBGGL z&`^DCab)~v;^n#E%SZIH!zhLi&zp@<#$L{*9N75$IhZ``Nwg#O$+$`iq@a1IPm>KB z@R&W#13GOxhi62y-tu-fd|%W{Ou(?l@ftO{ zQmuK>FlUL7h?iqeR|}&*ZAvMv{YdvMrEE9FgyTW^reW!KZJvX`c$EY}ytZIDBPqC2 zgZ;g`5Y(3Pl|J}z`;4Y;6H0!Shf0`N{wRb0FFI8Qb&6LcrUdhZF;s2CYvuz(p<(CS z=u}vI7RtW-DEk0HWO5wdMUT*&7>M}!9t>L(u_VN5ve|*FFpUQ~d5X|W5U_pyv?s-d z=$>z(A1{fYu5WP1R%5|yhD<+AhvhuVjO-f>q*cu6{fAx68Yf6hdIzb@%x~OFm<>~e zuojpLTFMg92VO`e=Xh9zxW*};CjE2B1OgBgcpRY_2u;+3cj=nrZG1uEzs3KGBR6NA zol`Pi)>B0$Yc1Eh?%0nUexWgYtuH}-yF-7!8+7{vKz-5rhfG5^`}bVM3kIfWyN(QF#SP zhmdmqbOhunVKmn=+5&|-Ty=|>vLTTykdm%Qy;Y2(3hIdo73{+@#4KyhqNQ~nV!M;- zVU!=l8q^IgDnyw+UWAo*IX!Bdlp z*mnOzqo{F6Zx0Yf6hqwann|N?vV?N~#P2&jy#ML+y4f`E`SLsn*b5=Oirt`$Z)0`W zMY9qc)p&b)j@dYEIb4o*7#qt&jyr=eg#_jnBc$Y{P=nrUKK^Ny0tgL zShDj>2;0;fuAuNH_PxZTg`D$Izj3a?&1lzqmi2te*xueeaA*$; zn{%?%E2B$fHV_LDy%4Bn78Y9tU}jlBA$~< zOQV7{)H$T8(?1DTKxm~PxnCn__qe);Gj>2hT;n}P^Jx+`>Gipcah-IVLSs2rzvw_Zr0J}AX0{oA z>@Zo@;ykv3btP>0u#S-WA(e^?m|tRLTIuM>j0O9{%gKkjZXE9X!k2h83_9- zEwMnDj|gGU4^@f!s!j0Afn7^hiaMX97h9Bd>{nu{ny7}u`@WFEeq+yAx;xy~p0tMe zUu@mH$OaWcbmO6hhAeuDvEWx<3ScArkVqsq_caPr%yFEKovPKVz?6VonS?jZ?fx2A zh&P>V1+l(oqgYX;3*~dnwbr`croYHM~-lY9l2- zyb+oH#9;;4MN(o8bWM!iN=-;1OX}eWQuJwCbi=GUqBD@8xPV)8mmEeE3(?{BZA;JM z&(>cBVDZ1Hnk24VpLx8pF1}qLEgfosa>3gGi+*=qj>MCrH5%Ni9cNg+kByqiq;0I( zs-UHes!)%KZ(Wv=Qe1L9EQ-7C)2?0}S3RYPFUH~3oXpOp@1eg&D_6qdUfLhS|FukJ$Wvx8g6S|JKN!B7EU$H}KIYT5Wn9x3 z(DjhD|M=@!DY+oML3c})Mx>#LZcRXc(0NYj3LeEMQUnYip zC3iOyVO{aq!*YaSB}zo)_f{HjmWjG`NKQ!U$GP!)EW$4F0b8UcxU%LgR;Uv5`sXS# z;Ugil=e3sg^L1hi&2OykqW3?r4orwp)V4Sd&stwivsx}b>gE;o^PVe{grWktk1)~9 zG?KYS~c(wLhnXb3F@9a{V-)nELm(QU+sN1^>bv^}aY zr6Wz8dRwIM=v&+UEyLUa};F@BQW(vs zDAtD4&kpM$fE^HkcXD7E!f^=?*DASI2#^;>bb2sgejSk&wC$_$y>Jv^os`0Dq*#(D=)hjpPOi zHtoS3HF)GuFt+vyGG^FJNT#}W!=%DS1qPCo?w}9OfWpb%Z%dMv?UP} zgUDFS>^qP`>8D+nleId@Ip-ve(xc_tGQwE8jClUu4Nw7YNmit|?0FvAH0>`oY!Jpj zhR|hlUS0Z}sJ?bc9A?_hZ;s64=F094+}i#V&(alRY&+Z=O{j#mlZCHf_t23#@#1tu zcC+1OSLOVUk0HMu4N?#}eUy??G8o8Gv3~$~sWub<2t~y3!w8Lrv_7gfVoe>v!23bQ zudk2?39~vASkO4|n0m=Wx5y1&W>=2B+w=@BzJM z2W7C$nNz0}=KOXo`^CJ=?D8ZIqif}q8b)&>wh(@7n>dC&mH>lQlbs3T8c9=X^oFPP zkzR>I&y6PVjH4`$F;@SEPq7se9c*srFNu`K9Ilw=B15P(QH3*jXh4AG9K}GiW#hS4B0r z@4s}Ep=A1;1)S1OA2oz>*f|Bh~t5p3l`96B6*FG1ZupM%PWf>=Xoie2Rji-%-T8nVAjX zD~IoT;#%|u&h39Q)3b=HGj$0U1nSnGyVNK>4Gwa3qr(;R!1Z`Mg$x|#iqs3TTI@&3`i02)8&JIa zJRiSRwOMy*UeBu+BB|D-*f?XM8Z14YK6%k)iaBsZnfaHDWp=L1EgN2$!W$O8&(06e z8e!c~K6BTonvGH|c}T(UG8vEG#*F1G^VKg-njBdL%Pih5XB6VgxOuQr7?CSn&;Blv zIAVTN;JmxL2|02KyssgtQwtR&0N>P^E;e;PlW9`lYK>w+-7o0z=4+uw8QPK^B5GD# zjH*S`;FJw%TPfo33sLOEO;5T&2#f5fuugUd4t}CNVqisFEIy~wX#6qXp(8C{UvR#{ ze>RIIl-t?V2$b$`Vzl5*mx-{S71|a%41|bNT~#F3Y0E1e+~r%RV{AHvln6RcCLxE) z_v{|?u#p4AxA#Q$2cX?&Z|XCM_a#Euc#k{YE`R9o7=Rp)Q1Qu%x}qIcs#oZwliF5> zs1vver(UC~HPv~bZK_+HhS`Ksq(!suJF;92{PZP4XyQwvW*w2+{q1u!jRkxu+ih@0 zHsbArKKDM`?8A<@SGSAZIW*z6;7`vpz}1>(>O<#mQYk!P$;e}L|I}s8Mr_;AvgIM| zO!B_=Qlh?V70lSRGH>PbfUyqC4a;=u|4Y$I)(Lak$TP| zXtooR74!m)t3LV;%*+G#Js4~7Jpcs;v)&u6Rmg*)P!!vsP*bimc8Q)n35RXX#;MGI z!!+_|NP(7RZr&$~$=3OnVk05hU<%2oS(8FzQwob`yh8U*QwLWt8&Y%xE^|*Vt;L4V z*skD^A(?X|3_o2%)o$^_01cr$MI&swG|R9tY|0gm%(|8+ zn#oZ4#+0TE%XJn&LlyWYoM@U7KtzKj(1|K%n!!L(S%F}+zA4DK0><|h4s|ObTFses zWQmr5qY9WcReaZkc2iUkakR7n) z4g?k^;!ddV5@A_n90jzAFmS4!S9N>Mk3*~?SBErID8atAi$9P1Ca;qLLgQTuQjO%Y%}3h-PI$16c|fR^N_BVd!S_ICO5xjN0b$dV}}6 zN&l%W+dRr_67kCr2qYH}8Y(O-hV8uk$ln&(<%nxzCy!RT>MTVFg9+m6<)|eJLnfRL zJ%*W@y#W^4twfmQzC5c{uV%evP6ZK-0#iSfTH}^x9k$*Y?zChU0~vlqbHrACYZg3w zSTkR=I~Z4cX#{D0Eb2?A-#^jT zkvgWRKjS~K9lKS(K}wb4G%fLVLy^Psc-iluu@3E3s8A!|P#ENVAJ=aDDs@X(*Dm{{dAiRC}pj^(dxv((tfq|M4#wtWEXX z!#Ki*82H#z%7EYJci>>p$I{bN?|h1P&Tr>%^3&N)F+60Mx~qJznQ#`Enrq&8dhy&$ zd_A;q=|5xA@1=8Mp9Dbcof+wXPZloL79M0Tc?LVDjCRp6V!luk3e?ct5{Ng>$;8FRFEeZ?1UrUK^`m!#@zKP9X$EJdQ#1D{qUPj>ljgleC#}5HXn2aba^>~1 z`C;vsdAu^~EE5{^v-fb<^-R!!*fg5C1*_`hnCD0Q5?(mGnH-vwY48abwb7=WQdb7) zI_r&tomfY0ba$`pe|=0z1U4Q00pPkABtKB?s%^zHshq#92oE(F52j;HK#0j@yW*uW zxJ(sn85?@LV&3|wA+p8%e97nfZ5%!jPNBa!+Yryh6Ky&HgTYQ|t+q!ftWZYQN~?n64%6g3SO{!Qv72NaqChim zcSZP23jSSQ8pT`)`S^wVaZej9yL$fGI@J998Hx=>Y=8Ui6Am@(NE!{AT?Ptj7u^EK zKRFLIde6qQu`R=pHMTyAM$xTR$r(C<8VWnz)GN(Ina-qD!{8MV0n)DW#fH*{tCohs$;?znt>S1vBc+L~Y$#49pFv zrO1dCvQZTqlu&;!V7ssX+UgI&N^*AY_^~YRoN*+Rdh3F=hu5n#-9b9(ELV%B6x6y}}a!2yfFr>OQ1K<)YY*R+q+-uIfDn~?0!lmRcj{e5`e5Bkv8 zp5Y-pk5@g!2cMWoo~Qe6;X%jjQv?I$$F*5NbTu8{E=PbbZ4fVtA`<-Kv!1fT2_ z3DuVPQw3FL?MIc>c@*MF zmO&8&{#lZ$z(L;#*ahE`D7-<F;rD7d9CE9J1G`K_eoO@TUOuf&ef;B;4HGrr*NO zv41>Thwi}pvNlDEDPY$xl$@00*vMg6Fbe$CbHsRhA&n_|=xr?BhH@YmPd6hs@ z??FG6dhD8rlac?-*j8hXEj>FEqUh(uksALmmp;yq(qVOP&|-Fc(>kGN~mL)kCW7hN%W@xn5Qvw&yz7MGE@U z1lQ_lR0w{=#laOr)3hTExCWM?%Cg7D!lv;I^sCOQQFN=+{chOr!HGLY$4a3&uXYF#YEcf?V=er__LsUOro3%M4o zDeX;!7t>MNTjXxg8&5bSS#hs%L_`s8s}es}q(5Kvx+^nFyOm|FKSdZVM4Pth=k?3yeOu`FjDCg%#_L0N z+%Rk->YP7PY}q{x)fnq9faFd1RCBa+>Bml#btrO@vCvKKOtfwA4UQrg%#f;50RpyF zWU6ODjmU8b6Kn9Un{x1^aZNQ{Uu7m#1t*&w0kdeMvxD+ASAGF(EK#H_$eg_{7Svh~Ia!~Pf}n_GjLieU1?dC}SrN|4pwMsBl)=;wp4D#{ zCR^%F1uJ1>3Syz=9i+IfTd^Z7@go*(kd#t(SP4~zhJyA9nZc?!;1=fXf}8o;fL{8e zX@PkK1=&>}(a2M=sw+NDOy-iHb_ZB2VFOQ0tZ6ysi;`tX=18yBx_0qtjiB-3VJCQ+ z_ep^DDc8!nzOO}uS8i;T^rjX@SKBu?YIx^e|9-mmA-8?{o#nCJw%oPneC?JfOijGc z_{o)O(r7580;~fS7yi3{HF$&6zx^qN`T*ko+bT&H1AgRIDV$0;Lc+6Adi`jE*yO1qM5@%*YdrjX-Qf-v6)m+*&|5b=^pHh%;qEy)wIbeN#ZQX6$dJVUMv zIucS$j{jPo?<|m800332_pMKGpLb_h(AB>-)9VkQlpP>Vt_i%#>|UZa_-lER0y%m+ zs=;3qX9c6&+r$FKo;eOE&RM!RNYzG6Re95#A2BwI7f9g{rv5j=k$sji`+yUADg%(R zCwwOg9rG3(3VA3s6A5W^A4T2zG@IU2UV*bB5Sg} z2BbpeZ5E+1rN#7OlhSL>$p!eqrTq<_TJFbuuSi3;n=hB;6s>aEMh;dM2<1#zq*-jF z#GVE$Q;Gnt0KSjMdYO;M(;cqImN(qyAHc;%kE?SfxX}|RCFw6|)$rdiZIK;MYElBH zT2KHh*l#KJEY?S)>bq5;CV>pp6HcYLmEY+of0t6}Xi;$i_rv`>1t zH3tv%#Q=R4Mj@+Af&~zSVgYZX)9(;Gj@!#S0H>+OdQ^XVw#-)Zjn=R+TS-@r%Pj`@ zw3}8oLI=<+4qsIXjTELxQPW6S7>pK~u{$v2D`>APfnn>QY{jX~Tk`B{jLb~cbK+7b zJIA7#P{S>y|^+aIs$GpD#)+eG~VqECD(5 zm~+bU-!{^&D(65==y;t^;tpuhA5Ce#PFO?SNI?i-8B&MhQLn8~M)hN}FK?E*=Idup zXC2M#9x?ko|B*)YaB3n=&CkO5E3;nP+Fw|u=%p_aA^PdBBZYDI1! z?=l5_A?opQIFNe;X6cj@K>qnd2&23s)7(0L00=@WLQpEpeo#X(BW7#OQ?E`&G!M^-b}e+drB*M%4;uI!%2baH zwrjUu^_SV}&(r^5s4@>jChBE|6b2}peZ|a$Qy6~aw`Ha7pX+cv7d3v<)>O9c`JOyi)ph?a{c3l7*w1pA67 zKrFHK*7_Ci4in2*%vS9E$1w;&$+=(vSv4s1mEDyMz#zw*6aD7f0dzQ0J4@+nBrp`J z}Cb+l~V3V^N6T#migLWYQmZl9CG<~#xe(Pb5#W#>dXNMmA!X81fFiv`Y$r04ks2qVFERNDWO1zYMnzUzIhC?Q)5 zV8@z8KQ0fMtofY`JI_^vSh}dnAQ!f6{72BW=Td4CF*n*0a0%63zN9z>%}fX1#Sdqp z&%jb48QNB0;p_!Az*ku7B~6KxLs~Zs>N?KUP*ut|^eY2h7@}JgzeM=+7Rse3d%3XM zBlH(AK|$Qeo`AE<^%C374wuXImjArFx?sf8nYQ_`3ye?)ql-HCTrnmQY@muCRAok9 zpbdVYYVoy%+)0w-MY>3ZTD7IfvI45QW*Suzbd*P&02EoR?vOns}9FMV6bSbIql(HR_7a z$}$A0o=PC zXMZJyD!#;Uge*oE{AcQEp1XgRe(w^KWW~bmKbjDHYqgj5@6R1Rhdi6(V3=9m;E=_9 z;4oX*%~48$tl)Dj_sS_NA-?}27H2n1o#H11OQet8PDv7%WQo{OA#xTwNivSKrB+) zwfK}A;w$jU*!(MQ@~?E9u|*VqlbtEF7cl>bn~jPZd-!Y~S{mKvBc!0vQS;b71lle1oqhEN2vRn$eIN((%I?MLql%Hb zGSiMdaE)OzbYWM}HP%1)=UkI;}2bz zYB6NRzJeWGCH6_(EgW~``IbfGNr+f3PA3!B@uuAeu;Y_5B8FD!f#p;Ib9y4CR47BC83m9 z$%Dgufb4j!Qf2lv7ugl$G+P~uu<=tm9yGH);K!Ncy0hfsj0ub-wd>-CG+hj#L#FD_ z^%n|!2t(QVW+nv1BN)Ket2#^({+|g$Q^;l|0dyS}ese`W5R~QZfZLi9fDldmhRa-O zdUZYZG5m!vU>-0KI?*~H1Rk30n%BbK&m zrWppAz;C~U%otU3R^3rGFB{!*!B3p~0h`I-X1!&E;ETho4*ELWo{i}T6Ok;0c{;y&XyO!!lznZaeRUcP-++gCGbnfy zHJbn$;`}N_VT-*tnJ!*D$8T(i>wq#_URHBIQw8hMLhRJ5vPuXLst_Tf zjXn(#;0IwcIw~8c-50J<#gvWA6Fnx8u<&chIQ*HH#xEl$tufA2S70f~ajey-v{XwD zl2Enk0cQrs)D=7GT!wVtwkKXfS9^ZcMnVcSj^Q;OcgZUiCK_7^HCREzz2bQ~{DjgV zO0UtWpgR)v)UvG(yQL%#KI5Coo^oDP`)7*Z^gyf(w-_9nikH3I9{nZFsg=eM&8gDd zG~I2=RsMHkMCG&5wa>?r`(Up)?$=AEK$bW(%UYc$^VxIxen`|-jI3(Tsw`^iehy81 zX%QWp+YjfoG>cRC2Om6t09mlaO;b6?UNo6szz=3;`jW>lUg1ktcW>`bODZ`f)!Qg{ zeB`AsxXArOCtBL;N!Kt>kn|$60E86)9e*Dps_Wo{2&6~9L$-flV_XH=*%l~W>?aa} zMEHp0DFF%^q6G)gBBl0|uP=Gp3$Kj)`*-(9EeW!vKC%i*t4iM)&B4xbx*!zqlZX`q z)Atc@hAyL{TlZ6bk}@eE90*Z@G$4RV+znhoivJ1Io&^a(J&7=)fB}8uTQJaaU9e#! zPGK|nLeWO0VuOhlpfNVhua`kFl!eqzMpvN{s1&R)Z~_jDb}ba z3y_N?F1S!vM}vRX=S#jsL>u=VLV%bDn2o627_}ePkPQGG%OEVG%jjr{txw-sq5qPZ_LcjNR#QW&@_Fd(Q z=+M}D`h0RfR50=uda|fHsSpqU06LBBRH>{omt-@Hf_65XM0ArTAMoS!Is;6>Dw0-BveBBVw;5Sn-hcLbs*wVLp!6jasWT+p4+Za7 zC+AFQD<{XerGxKV<^P80KU$hP7H>F@s%_UiuVz-i#@E1US|D6_og$NgFt7ZK8DvRR z{?2I2hij=1Vq~osR)l+o7l4c3ruP1wB&VCXg5G}U7JyXu3rEW0L4t3e6 z)7=cU81N15$5Xn+yG}isni=Yf!D|E;7z&LUr3v_Kd2@Te2vB%K-AvnQ?zwy%#X^m1 z(iU~6nrroq&R)mh&+u#1zZEAmD+JBQl!V8|+Dyj}>}p-5l%?#7020(F4K)UovXU%b zg8nbu3Nr=dNkwD|F{n26t-ded3`u)MKEG_E5wIyQa?#ae&67bSoVS{uc}@P6@PBBB zT5HsCj3WhQu^rtfZ2m`|ZLu6&+Pe@g$Zk@a(6jeLj6_sSbhoqpjos>U3Z2XTcOzCQ zepE_jv}L^{q@5qin;4i%`Y%olVlDHF%w&b9ZT{T$$`mVW;YnUtr&gv#A!-_f?REqJ z@rlR4Wy8KGif9^Y5{j0*#oI}9m=o}-&wU7FU2yfCp-q3NG2n7iYe~x!lCrv)<{H({ zf7)f}B>3ihb5vGXgMpjDhGOu|=1 zBySPO4YZUG21#(mt6kY__XuLAP@RP`XO$t{NiRX(eC)HCAAbNVc8=BD`!*XsT9R2Z z?iZ{&OkZYC+RFI6r_WDz)+3alV?lCS)wQeXFp1dx;HY59d9xeB87|l@iifIa$TM6p zfFU@)d5bL}aPOISk6#)BY<jTp#etpNWpv*Eo18~!mQ-}8A3>y}zht(sIL>P-Dc7PRdYghY%S971K9 z9cm?s1Zb|gB(1949V=CsM#P08tlMc-Ma^yqF7_PAb8ZqqcVU#>4bP#s4R zPspMpZ?zw6!Q-$fJ@lVg)~hYWlNoH*s|}|AdADZEo5%;4PC7%14s)y@9)%R}gs z-z8wU`MW^yS0GY^Pw_jN?r#9PV$df4B{W^Q70Y(>KLE+Ui36FQ^wS|RKlQxi9N)kF zB_8~fwD7*O{ha?pZrU8)7)?3LX-m7(#UQRp`nDJpaDiA zdAO4QN&+NFEJ~>eWoKM^^5?reKR^h?9tk1^nFR^J z->akI3%2;z)l+?SMSeanL>vikAdNo!uQN@Ify8`~boKl&C?=e$W$gQ&5x!o~{Aq}> znOG122z^^30i-=se|`uI=<-@Xduy&QAQ*g)1d)!+2N=hSz~KgBk=PWQhYuK;ngD_a zG4`$^S-T+0sn-=yHX+@KgEhhnkJ|F`Lu?GEQeOkl^mz(3!85-WOo`IiVyBFBbz+U9 zn+M$_3M4A>)~Cw$8maPAXCk(@@_#Tksb#E@HeWyH!(Y;eJA#o~eUm z#wR^`-mA>$QiSJ2TY^^%Z4nJi)YQRTQ7!`Km!KL61seA2aU#K-+6Lk0FPuQuB&p4B zfCPt1Qmm0I>?KXE4O8Wl$H2!#Ys$c26WM2a+W0uA2F_Of;oNEv3aVz+-hng)MA7!> zc{Z#V1}?w0q-Du`?|jVBhcrw{2v6!otC`enDu86JX^c}Cs53*T<`?R!MN1adoxMbu zWegr%*8w&_uc((Zfo|p|<608A2-pB2lM7thBBA=b2)Qy%H(CTS>vL4NERg>>lWHWN zPHJ6X|6mOmd@!gpuS*o;*HhV5(7oQhe=qi=_?@vX~f zONFWTE%~X6mp_-j*Nj_6Q`o<$SlV-+1*2QYM1FNI*%7en5aB6Nc7>WlTG6RV8Q05%pX@;53?+Yw6*fyRB>bHV` zp$*a~w$BKexjf-cJ~6|3M`^5yys;RK+>zCY*d8(xJgZ# z38(LMh~x}f1~h!12(1sV4{6BsRhdDrCl|OE(HEi$WeC>FDi}RGZi;rwf4BTM}AT!Q_EV^4Ea#!<`r@^C0Q-II58TJ3TW z;Rok6@*Vr(NHvdl4t!x!#QrLW*dV)yo9+>;yV-;HBF(YvPfH#OOTj)0YhpvRNW@HX7RX6bcAbDk((r*n&VQ4YtbH!sB z>d>Xf6?Ub$W6Hw!b_oE2!0wU8hzElF7*LQ^sP^{ihzwvAW6PRZztD_O@O)s^?vh&p zl;=>C{afV_iV&7|XrzcPz0FkC>Wa`sp(c<)rB1&&;wj}xk5%_f^=qX~C{_Y!)-VTo zYktg$zGW7S!O0rQ-($nlNt85QzKU-v!G0Zd^>1fWQBJ>B#h)FOf_F0LPYHopX)_T8J0$>9B)(<+Dj1LU# z{V?#9*y@Tr{oI8aq&IeSpsdEBySl#DDOkLnqb*~-H^pz=xV>QtM7~{nK^Yu2EE@BX z|3dlVk9y{`RYqeJ<9&}k%Ik_ZV*>K6^)wINzgs1pyi}_d9JT4j zr2p4No7rMpO0*=IB6bbbaYD9$m*7TU9(yiDypl3tiy;<))Cr+MPF9gK>jz8}tF>qH ztXJ~YO%9xL-iXD!|6U9K(tefy6)W;qzM+`~?+<}SNF$;+sFhar&ci}`ubKOd7R$XG zNy#%0uSqf5*iol>#GgQs@|CiF>2^An0`pd^p>$#%gh8$P{6?!o2nKRg3YDGD2M$@Qq*P}Kr-C>F&jTHDkK_D&Lee`Is#4k!f5u+TCv3b@QcY3^~L=)~Hd2n!v`qfk=A$arYieLf&i0tvxu zbpXyf3?v;&qES z^1M{Ea=439X9?uuo_j9>n`z%gaoHZkA8090Ee@eeqkBiG)csfxfE2%0QnsmV`F?^h3GNnOjnS`0jz z_kaBQzg^5EsA_yZ;tGpgW>ScZ3!HvO5vBiz&ms4^N|VLG%>jpn0RZHdO&(-!NlYF@ zvGV3z%qblKw&0K+tJz9k44Wq??l?Q8gU-9 zZa_pMM6#l)f)RPMit-+%6x6xqD`$R46E%miDbId-vbQM|zWR5OWdrdiadswTjQ&q; za-u4B2A|TIWuR$QB=;z;DwSQk)sV7D@{9aSDGf!v8|vJpy-pDOy)2bU=uN0^$b)==UmXGJsi&*y8V4 z*f?<|^|!b0sQF8C)>Uy0C0e5<-D7+qK5GsrpgJk^RutJY2HOv;032FrQ2SjNh0AE zC~L7HexlPeqsfOtiBy5!O+9MmyyraGi}3-r72D8Kean9dJo{&iu1hD#@M`XTL=utm z8u!|n61d<7YN{)v$!iAzWQJcv(Ie$~4<8uMpqVkrt!Q6?pxyFPr#F&aT^#G`I118u zZMA;nDj$`CHQPUa6I7ud7+mO&pzo`e`-kp1&0^3VOR?e0XiSCH-fFP1x#a^U(u+Ws zI~uqQm!l7nOe?KpNrVRi_^on$gaenHjjY3=)5 z!lE4>N|&6Ww7pW3U@r7ASgz0At-!!0^CLtK%g#|_R`Xwxd)jBFW41{5rR)$2b15vk z8Qd~F2pa9Y1itX0kG6r%hBgVJD=kttAsz_{xjv3#*mxczKiQ9T&~M+)u}<6Qmknog zE`Eao>0}5ur`f}7cev0i{9%N{|1N6EPq1Cw@eutpQ7$bs0e#Gr;kzi)WY5cU@5AU* z$78q|PXpEs6@R2@ArJwMbfi{{GvHBhlMo@HFV@XF4Ofjtq0dIfgpA^`vNV~>hLNnbK;eXO+VpO$f?Vi!yoR9Hi`4S7De#^;i5Om2;aL0<6JIx3p$1r6=s>VT$#7 zL;N~0`F@Wm8d`F(+5QJH(D|RTUZ2*JAM6pZpS_|gVu$}y@)wR>2xWv$Vm5XU7@-?V z-9t9beNmKp>a7a}{#0pb=QC}LlpkY9GO)`GfHG3T!ssOr77&PV%57QQ#r;w#iT$&+9 zcQB70Ey_Z#b=ljp4U#9=mK>!IPv0Vw z6W{-F= zO=5-&zS1CmXkGyGv&~MSZ{=K;+rco4X#4LFd>TjKJCjDwuf}pV5cMhohCs<}4pvpI zuKFhF_rmBqO6ntrA*H%SOv>CI3kvTr4JNquN@;=j=a6bM^B0jbnP_&+$JR_%msv?X zB{}X6=a9*LKUfk{Un&W*2Fh~xRw-6TRb2~_+*Leyu8Mrq?>a3a9#Z&6!HVa=+t_Sw z$hf%Wnj?@_bk@NRFGV^EPi;y&`TF=KaJM&del&VAzu+ML*{mRE3#;6r5zLu1YVxDx zKAUOaM`@%gFECwRA72j*iB}Ky#V$!wH0XlIep%!vNXB8qhONM-J1ss<7tuVV_9<^B zx(eUUsFl8%ou+d=;MVyONbe!5VtFbv97P%B^Ox4S+5RQPe2|@BRID@D=}oi`zxG(= z^Z3~LIt7e>tpUh;Q7g?S<@;;@()Awb%tb3Mhs}w^Y|&R&8o9PrCz07-$eywJdyG=3 zC*$y&lbY!_C68A2MrV_>75e>xiqqc_i>y|#1Y}lAZPh~4*7vt>30vE+w_U$ay|;AT ztgG?KRZPOE9G1PAm8#1sJ#p%Hh|)(L-Y^5NOtWYQj>?Mt$3?kTanmQVTdQ(5jWJE_ zGTYrqsj#s8MY2s;1afihx9P^~99+#=%X(W*bpbu<@WcnyR{Fq&kc=wcZz(M9p0z|s zn`8;pVq@$QCbA)C+fTkr}=v61D+w01yrUa>V8VO=a}O5 zmY1WY`hxA#Mz6*3S;6nTmxUyIc?V37-E7zaBiRg1Eb!{gF-=8i#8Cb7-*5dNC^hz5 z|3OBNbZ%~CF`ogvrGi_B-dOD0B+J_8NK^2J$N&xJ>os0`|)9x1_XDYI`-ii z5O|Tgn4c5^@#T?RK}}_XWKm-hrm({I#YwFyqU6aNX>I_O@{`-n(Aav%Yz;m!^~GQ9 z4cuhe3l%@$`N7rBZ_8Nr4h7RH+*b5gzcLB8pTC-0J7+Gz-=FfNPjUc-!-k)@$Y5~1 zTfEv^nnW~+)c8zDGgaIK6 zM`k7-*!GDzitmpZ&5!B%Mt zzD@Ky&>C3*qQp8g6z#%M+2Atei9^ z#E^Z(*s^v4Yn%_YtTq4NppQ_%-h1{k;FMyHM_!d<`&p@)x+AZ}zoKX}`<;PpwTdLH zU-z+YDi{tZPy*GpDZkX8?*CzGWpI(+{eUD zi0L#4C2ey3R$j1(6G7*POCI@Qc3h72a(MGmi!|u{Wp|Foda3=nZQI04^P$(8?0*5; hFxr&}zaGt(4`&rhQ190!Cj?J)pYEL~S(W~p`x`Q7HXHx| literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..07800372a1ae8bc82b4b513902200f4b4b900dce GIT binary patch literal 39991 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

    7JPv{8kJ3Ve-KgA9-+zDl{V&^i9Bz@q?l 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�hD4 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..d033e8aa16606ffab66699283ca5ef1b9f53ca84 GIT binary patch literal 38815 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFAzul.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..a4b15088816cb767fb1afcad333ab284965dee8b GIT binary patch literal 40725 zcmeFYbyQr>^B_79ELd<4GPt`t3~s?a1lPeeND_iOgS!NG9UOu)xVviz4hb%g&v$o! z=eNK2-tNA$XW!XBwr-ui-Ceiq&Qy0-cURSYS$x?9U@6Kf$O7Qt-~jTk7vNIIBWnsHryL*xR*Y_djK2&4)K)?_%}d7Ktw`*`v(4B z#Hr=UsZ9TqP zHx{jL^+9vjOkPz*OS#7L&nz4Q~#5pDwOPeH%g1Y2`&(U zZ{Dw^VvhAXrOvy>?um^2KBbNjj-?&uT-Al!AA8^ubgKR*V%S zU-TJw*$+o#EBc_zrTbOR5Ob|l1@v0D-UoCr)H>32T~v?yck7HPDH{dR!D zw+^f<&fTo3>yT;48YFy^VcjLSd;)V@%mtmEj@pX6E75eZ2 zxL(6=^q$zE(WvsO&_O7T`0>u@XPxmb`k}$ug#W3|bL$#7J25F)KTe~4mM4jGAf)c^ zs*y@II7{cBk$lXLeI4>`@&3$xGi{;**P}=~!cKYST@uN6FsAf%G3h_ga2)NMsw+6g zv)Iql?G z6t32Ik*o-G>pT%v5KvCq=vQz#TYA&)~iOh2qooMkjaEI^eEZx#wo{r0PS?Zm? zHYT)VdYwFMvmQFk!2~|BCJc5o{?e!K{TfVI|2BiKC;xfDFe|Z9=?p3T$H%+h{8ny;tex!oz`O38g$ASJn+$w@hBO=D&dn1GDhM z)t9;(u{TN1zUXcJWSuLXH)9-^o=0srMD-aW!DR^@%S%g0FNT?;QwQze-tOnt4>6E1AvGBCw=p;R{!Wt z95{GnLLzKjJbVHw`VS~Hv{-bUuX+^aRl~v|!au{N=33%$PA?Pa@5Xk0{&&E+1$CU? z>S?yUx$Xx zsnW7?sgGHjZ4x=T^}^bsm7Pf@{G(Rt$o8KARkh-Yjkj}0aJ;4ey1)Nh=^Xunp#yj3 zQRaq`A91uJlcS8v&*o-cp*r5?fu(U9=dp`)GH$5zzv@d{@C3|}EIw>y)kjt8m)yAEzY zZxt%;*4UyKS^vNv6tuRF?aR-SZ&8}~5L*y4)Kav;9nQS-pwK6uNg?FW{j4`xT^1Mi z%Um%D_Gy|}c|w*!?ZcYF3~Yb0<4!upxTghgwNPV$m(5j9xb5>VC<=01&XUxD1Gg;&l|dCTa-S`BQiNd^9ffm1frH&) z8l(OrNEc@#CGDD;sCVSwU==U2lWz1fMC3iki#v*saWvkLD~wKSe=~DnRI_BZ5yfZa zedjuAx?}9M)eJ10)8g!QnfsoiPT!{I!?mk(FSLmf#cMIB*`Wb4T^i~OV9hk+OYe5+ z3^T9qk_;k_ikKVq(+dD^vCW5Vr9rJulhY+djMGad}IC)OR-Z!o}hFDFu1Qy_CT2w*c zY^6rSpUX6TOQuAH#6(cl2L-zVH#7GIVK4;0Tp~}oNT-y)J8h0>PhRcg`Tk*@_HbNw z$JW@4gF*pG0i7Yes?OD0h4f;*JgSlPEMqCcgXE4c`Xlg-zZbHr#hDTgp5*n1NlCJ4 zs#HET&4nT*p{$OW6lro5@!uiK?e!0Trb&@2@Eb$5X1w<-nm_-v@&af(%QFyAC075n zGqtW0cK;ni(&gX5_^{mD1OLNV8ukcE>jR_fcQd$Z^8-6U{cZFfE8CV_6Xyj^;yr}_ z4p7D2hF3O&21x9tzvxj8T*`#=%h1Y(%_S5ZrSp0*W}8!{SH;`M_!}oZO$H%Z9M(E2_9B2dnt&1r;G<(a+O`$5cgGkd7~?4vIL9eTAg;x|H1TC&v4 zoNTs=FrfPe9s3i*W?aG0%3G97WhwKhQ%lwlimq;un-@TKqxB>e=Z;CDk^#{M{n$Od zvdq8c=f9F3dfKrvGV=HDqoo<*dEo@Ul!W{nqScpI0p<*@ zkWMz~?9rU3 zZ}C_JG*Ye!d9`&@=iJg}R&M$A4UKg4I_4IZ9+2ejp4lx*2G9ph=fLk5{r_5j-@w6% z!@U4Ti&v=(w%ho&XiMVtl~;Y{hBSYMWy+7XBEX@*yiv;L9@gFkvz#Tc$T5bIq2wgT zWB4Ipr^kw^2C6btHNd2(p>0$QBu0b9Sblaf+qV&#QB#t-W2| zukBq{9jq&~{JXNMY{?|yjyZ!6R^?zq2PNEnR$O|1xBFWEFXI2Yq-Nb}k*<-6xe5jC zt12I2u?|E=8dJ3QXK87%91uq}OECZPOLYFW2sf(Vk^@4`L)sM=!ClXHaPw-SjLAl- zPrh3of71tbL~Le)Qqh3aqLxEhZ0=`V!0#7;V2{CaxqlJpX2ndHt@EmnwPA!cqpEew z84Fw^!wvk10*okYblRmSAH^2;#uUH-{?1@S&?bAR%bmA?Ii9N)khMt1^9e3+! z7tQDgLYWN5>0bZ@lo|H7yCv)Ux_AM<`>~f;TB(;-A>v1Z&JkT>_lz5E+%JIkZJW@? z%F_KVDf2%sfRqgg78hSH8PMGa56S!WGw{lF^UuuAn+kPUsPvh5)QLM`@Fuvcs|6HaQg z<%X$UU{a2sknU%+>jWhZ?MN@gx;GjZ0X5$yUtyXif+>dr@1rQ0O@8Z}k`-r}&nRCf zb;V+s(p(C|E|Inyw)r7!jc+7ip9yvJEn12`k{vlh(1Sr*rh78VQ|iU|_=I`tuG^7H zNK(MEnoA&^UD-@nSom~Vi!-RQb-9!vGD^08$(c^ZcKiZ{ZDLtJ#;roPiIRdTLYNOd zB-YTvmH~bY0%>dC#WSZWTzI_za1MSKM*M=nL$`^&a&v8Dt}ykhr;K{kBD-!=#I>23 zm`W5N#fUPmaL%M58CMb!B~ntF&cw5wpZ|x6%}Cw$(-25oha3bN(>8Fy#un1nWkX4f zvtR=Lc*n$K6%j2^QqqAMnSy7qkKZw|URB(Xab1G;4Vrd(E+wg3I>Ic({?$Aw(d<^}o zW5+}7-wlUPOAGqv2j~U@f$nA1Qo2C0tSUmNeB1g-B*7Eso+H1Y?A&egSn}m0gRFWM zRTG@U$rneUjo6}@}=j`;g%h4)mR-Y#gmtw#yCL)&6= z@cC2OZH**^s0=)QSB$V}bMqvRCK1u)dO9vp z0v|}UrKFk8>wc>=A2-zd=^fwB4DKCMj8p)VBv0_Mz0Hm*i)_&0j2w1OM50TjJw%|T?{=J)qmd8DE zn)MP9$T2iAY(L(Ze`G^rwtS!9*kGVzh*^uS#>y@)?`q;QkccYnSl3Muw_|<-(yLZ8 z+B7F6l}X ziuVMId*y7mnp`SnyVhunHJ$*kMCL@EfM3UGg=;XT5l6*fyRVQSprLlJ1Tq~bSq?SM zr(Kq!9TCM9D!q3p1Q+wv%B&u}4pL^Pqd!BWxpSax>REBS%-`AjKaqoPE5(F=21ac2 zb%QAVGObg{a2S%%cg*Tad3o(&cB15K>o=;^59DuhhA5Rui?7v&R{nmzMJ_gBo-El zUTCZ@wvp|U`oXK=)Q?p~#R1W>jzeejC^|-cL(i1kNfU!%>&{E*3vIK3aq`UB-dGex zh+t)THt(A($O`!9wp-I=y1gyL<@r#!qoejTnwfAXTSE@b46oJID0#*AI{bom;=!hA zcpt11<3b?EZ<)0KP5Q%HJECKJUSyG(=DPe?O2iLeMQTHe0v&nRso()*$^D4}V@~&7 z56{TlFsL6F&NA>KWLZcO(^}iz8leX3!=IfstMO_!v#`cke3-( zHS~VAdM(Z=s7Ho*fXNUtK*+Bicjj*3x19(HP|sU)`}1RjFikszdk>q4ffDk z&~_ya%Qek(V0Lpi?`vPlslO_I3zs@=98aL7OTjy#q$-G;Zg(nK55a7gnz1q;)&&w) zm_(WM@ns}chBfhR7Hnm^2H#GAqGoXzPHOQt{Tm~RzvJRHtm_ak<(=LQ)4z8Xru`L7lB5AV_MKI>$q^^7adbtECVu#ENzruspqD z>$mDnrWBn7Rb1xEN}O>DzY4qXfwe9sj0(u~k&pQx+KZ{I*mr2O8285Z6`18f+6-#F zlARZJ9J4E`3^WY0)=KFMy7lgj5wH^QLZ$qG=zQk4(9be(RGE zB3+Kqma(B5MmBQ=g1h;?s3RA11KJ6~%*1`E)f8iaDg4|Rk|@l zct}}E%~9}!(RPV#84^cfK`adWlt$VDI#j!aI9nsE19xnPrUATAA(&6e=_>ve0u{dO z)QB&*)XT)rEX%_oG9U$}`aUxFKn}WL)FWU_sgj&F_$dUVAzK&QZ2as8+F0yr)s2%P<{Iam|b!YE^8-Ztsn z!1S@No)SaFN@nU+orQeFF2~vd);1ao^tE%erJd*YzjZV^!20%%u)F*8x>M&DdbAAj z+dm0B*e%uV-cWdgIzlBzJfJ~4gS5s%7WI_scanC2IN`Ko;ix^JX& z@cbYtrg6uqm1U>&v~=nU?WqtB7DA(HD9v}OtvH5=KV{ZN86T^f6Oz$IKX(itG%>O% z67C+$##R#5jKwT;gKR^Pl~lgoV9@#4vB0$L6Jyk?1PFm4fy{dewLuH7v0A#CHl&C)KQ5p4g+K^urK{Gu zQNAhd3qYvp3Agby>P3+#QqEJrsV;>oBi6v$k2Z$JF|2kwdyw%U%t=OPV!( zyI+nW&F6D?EeAcQvNnigW{W4eWs923T3XM#_ts1tF9458!pB4VCxO{jS@SMFCEN4* zb=!rB9plu|0f#RLl9^Lt>g2|}S&SM<%-M)le{g%g%cNsAmh6?A=$M>U8K&u;qj#%y zG#f_#DBgNK-}Gn6)rnJegNvdUFkF#V;JInfQBWC~{sOgsKt!}%r$7Epq)WLuibv;B z%lbb4(b${_Qt1~ggCNyzJe0CywLBC7{HvH4T7DQpAs%Q=<+(GFx?aG&N&I0sK4;va zjgY-RWlZz#T_5_sx-nE$tpm$%(I>zqZip+}xzS~J0nhL+^EKn$JA8rTtNEEqqmb%A zdV^%GM;VJ*h1cT*OG;pIXfRky**J1j4kfNumNF8*XsXD(*1MT+1S7_Vve)c61d)3) zniA;$R>7kkV`L+~b#>sZBz8k9hn3AByzo`b-|7yCx>RKOW`3G*byk?PeOT%I#&KX!`|1xqr*?yN?{8@U znxo=1q3xo2Hkz`=>!awdUUco}$+Z{2{%`8bO?f+uw_K)5rXJi()TaY+FeZlIw)^sA zVE3{jGx-*#;z5lIPxc(5t+9ThKrLNEo$Q#W?adu_s6zaklZ4;w5sx;%N!SMswFbBc zT=a=9E%l5hVIrjPGa-gpDV(riw z_$f5LP4Qj%bk1b)DgWvh8*0R^bU!{J?UqzG&Mpwt2`8g{AJ4>{0ET2FVcdD%Rj?IV z$a?&$OVgH7QE8w4URf4VW<`^UubF3O#W;{)MrOMhi=z;D3LFATUDWYG+B+Y1 zm75goz@1tp+(fe#BcW8krVTXU9g>QdC_Oq<;^Ay*Mp1&jndXKMz1lMzKe9Cmmq$f> zXEQ2R%ml-+6(S95#>Anf;A3maeB=>G!HuHuMaJG3SQ$&E=-BaYE+Ds&sKond1K|^_ zYbaZ;{Q;KL;yK(>Hd{5p4>6bR*Gm?$IpOQ`J~nZT=IF&h<(pw?SdB+Yw?UAE{`?@J zj-Zasa1q1pj?u*F$l%h1@NHoH1>niS!80vkrjaNwul*rdU0vPPAmX@$izEdV6y}=B z>YxyDRlCdeg|#^SgG=4c1{`p1_~dg3GqZQw8rukkft+DdkI|m#`h>P~ zqUa%@yFvI?gw>*SItO9hL^q^DuIp1>r_g1*{Wtn8LhgrrZYMVT9964MvR39_T930` zLe>v{U#gizW{QPW=@_?Y)G9TyKB6g|M;+oTFRvk%b*OX*7IN3{%L?{F5RH%-{P^={aI1)`bdr{Ccq1t_i_(v_Q74ipelTxwj`Nk14Bx>`v9ytdRWC&gomI`(2 zBhmid-es1rVeu9>ZDrZ=f50jg^X{L183XOcx*5^1eYTk_*gJ4rMQROedFsW|e&O3I z{HLL8e?Q*WEm4LSsVtpk<4Wf6@&OJ!C3;C~c8HbFzUpw46JL0;)LM(cMFoX@-K8yT zVa0c{$9P(%NOW8)ngPeiFnh4$x+t5{d3#Vg9y=TXC{^vKNH>NJ4TZnVB28qhui4x0 z#SZc$tuu63BR=2fScyi9r;&^60k#6SMS|C$zrLq^XIeZp^)$X|?V zb%-g>uxY+T=)LZ%kLUl3vE$#Y9@>>$fx`h5e?m2+1w&f=Vkb#@^?5@os4w`<8tErF zh!o|PKW0-1RGE}t&Z|%iv6tHXfEo!rp>{Pr9Hjw?;?lfmf+4#dXgS&fLh*9FDHP=| zfMI}ya`Tg@xS851^HuRdVQ$P(7JQ4hQj6OC6CTz#ad%c@>29&koG~fNWiP<@EB7aV z=4&52r-$a`7O%<5k*lXs>YOXrduIEx*G=F5b5b+*^#bF0#tK2Cc+9pqyuGmrFMz-oFgq*!|$xJRBh_i%dwkio5$xCYmrSFjZm*fKMgotAtVhEw5e@kpmxnu5czY zccpfLK7nBJrc))#EXx*>|GRy+O|qFLFgDWhDja3Bgh>^i>FPUM;G7O`(`78|v+1wP z{_xrpog<@xk;r&@gKJFE320d47+niuQ{RddzD>4;Ql^|YX}4eM3P)eL$AKiLx7oDk z;c+eJQt}-a%z%*1fh72qhbu&g3%wohCu9+{EpvCm=R9dt^3zD7K!G7BUPf*3bNxI#(l1w@~g z4#(h@SYrI_F=B6G`OFG%JqGDah|xgZ6VpM zw>SHY#E9v7p!H>BxIg*3{JIB`fY_MYea5U1Q)$;Fa*fN#;4X` z?M5$$OOs@p$jNpA9bg}!gEnvJO=$2TdY>5)GZ>8uI$k&jMG1@%Ic$9>WBA^@Mg3_- zYDJO|cRP$F$R;)9hFn;RwV_v6FmOad^cT>xSvoxy10pK%}F+e zH@m=C$xyrTKcG$q&(ah>HOJ0ZI+e1oWknT1mv@((_eV+S_`ns<&rcW$o=dLYIdLj6 ze#7SFrCVNXe@ii~j#SyCLM(=NOGu8v-A+hLq!LrK87u$?D2jSNt}VBm`ynf5TV^AH zzU>6(aHo3}1x}gY$OA32jWGk_tyJ2REo3q#NL^yH-J7IZZtIV`yS0hj!i-{zv*MT^ zZ_ZLy7}&WU|BL_Z({KJBwl6&**P)eof9YY>O}hM745niNiUMtikF5PFXt$)cx9+DR zH8n7Squ6ix0b32}Fh3M|LlXrO9i~C@2St|?#$r~e;e-ayG}Er&`Dl{1)(FjLN**qa zf)h&D1RY(ggbDPdglU#CDLR*!!fpP_-O1gqXT3v=#(FMBx#�f&{<2R2@xG#H!%Dg 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 z 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 NL3wZAVb$-czX0bvclZDR literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFPreto.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e07f122bfa5192693896576690b7e3069b42bee5 GIT binary patch literal 20695 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�&Nj1^t)*Dflnou#SaRN7(Jjp8 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoPretoFVermelho.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..63656dbf3b88c3775b2905f7df0ed9ef62b6ec26 GIT binary patch literal 38207 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 z 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFAzul.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c614554e5caa809c5e89d794ee3e13839d0bce64 GIT binary patch literal 42560 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%0Dh|0E_bfU!oQHm7#DS|L{%@$O)`s&k%poudUyl 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFLaranja.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..6d38f851735bacc3ec4d8f17a0788d7b3d6353d1 GIT binary patch literal 42118 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFTerra.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..22a86207d34f141ec7c4eafa89dbfdca7024a123 GIT binary patch literal 41951 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base b/app/webroot/img/botoes/.svn/text-base/btnCalcularFreteCaminhaoVerdeFVermelho.jpg.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..417feeb7a992e4a98fbfffddceaf2bc6a3a3819a GIT binary patch literal 40833 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

    yk)oLGzI?Nbz?0>P?!J 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/Thumbs.db b/app/webroot/img/botoes/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..9601d451e4df56a75ea30096c1f06ebe3912a431 GIT binary patch literal 6144 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 F@DIT_g$w`y literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFAzul.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFAzul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69403532a8c3a992cc98e32f8901988cb4564ebb GIT binary patch literal 40546 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�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

    ;ND~t7ALXKw;0} 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 V8)@}{a6?LV6QvG0xJ&-c{~OyR)^Pv; literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFPreto.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoCinzaFPreto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de02ea65d794a88b5611f33c01e85f006368387a GIT binary patch literal 21963 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�+9%uz^_f2p!)Pc6jJ{)LfnvKdH^ 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 bOX?!MqpI{de8>1+N9q*jG*nkdolO1*%`I!V literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFAzul.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFAzul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c838bd72287f679945e99fc50619ee84421a454e GIT binary patch literal 40860 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFLaranja.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e3a150ea636c0de2f7e7c68098c7f7a000d9362 GIT binary patch literal 39803 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

    4VqbSvi&^}LT6)6E0U-)t;4bG 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFPreto.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFPreto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2ff5e77bd855a8031d7c35c85d3d1affc5e86dd GIT binary patch literal 23525 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 F{tHcECg}hG literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFTerra.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFTerra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13a41895ef159b0fabc5542fe5f3bc013dc20502 GIT binary patch literal 39577 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaFVermelho.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc59924e121bbd4b4e248f91f5156215a62e33de GIT binary patch literal 39841 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 I#;^Im0f--OhyVZp literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFLaranja.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6c47f443cd3fa48c21b279a31848f9315a35a9e GIT binary patch literal 40202 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFTerra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1df479d89eeab03d1b717f4a5ef8ee31cb1166c GIT binary patch literal 39943 zcmeFYbyQrt%Yl>$IPK>=jmet_3CfcRgj|5o@5 z*SK-%Q044&!2`U-}3KIa02?c`*_1X_01wa9y;QrzR{t@6|;oc!2!azeIz41xj z7=Ppcg9`w_K*Pepze9jRd|d^gz(4_@F<>wN0I2ire-rr!MNw;bJ(TNaqx6mg06?GW z7WRF563+GW74h}?hsfLYU4O&Lx!8dKDEml|_&Tn|^u^(X%n;x!>2dzVYLu*zc#d$S0jy7 zRTMQ=XDnq2NmrkUe42I>_~!7edzfu#*(Smqw8MFCX+3w3dLUwYOEjCK-ZUV{i=5rt z=6l{Dlp8$VBSJ0Mc!IY7DBiOyuDIzTe@Le1A~Hv+{5u0x_CP4M&)jc5SN>jF_1@5U zMJa6DXj$(?ch&icy!f2WTi8j^ZWVtpI9=)9ITqPa33ps4<%| zc^u-No}-06UL*3LF2*0aQR})ss`}#<@c#Pfl<1wHR}7QKPb+5&dba5IF7j7nYYQ27 zV}|y3JCZoFYg!W^hm^@Zp;QimoO5aYNr?#~%BIigHQfyRk>xVg>T5mh1g*vD=&={A zPs!O!MlI3nd(0sv`O0!-?dv+bK5kYm6ZU*##eZ{XzXE7tZiOh$OYB?UPjuD)jx~CN;h<4RU5gXuxAGb3C^7_LKa%$0BIQokbImM;p62bO-(XsX|SXJ^{YAj|K~i z&T*StL;997Gsprl-@bQUR#CgJqgU$TEX>XYcnL?6s?L4n z5sP3$*Pe{nTe_ysk+zo^`dNPF)iKJ4hc|?O1oV#1sT=bj$~2Zw#c`ER%SK2R{oDh8 zf=ED*lhx<^zUG5l*O6P4so=Uyva8PS=8^q%-ytCC)Q^7vyj`Jgb?uwbd@^cW;&HgY zE>fas!Q-?xEj$W5RX(?rSZ)uh& zV!LrZAz=ViC4wQAHeukqJuNTp^WZ=}rFBwOzmZe@dv$ zv=m!Zi>w-z-hIAWi3iT^S5V}4H&dBf9hJ#>$O* zU^6qGO=Eif;GJuk+l2dg#RlV`xo#JuJY+$0y+NayS&JZd%&7*^GC1p<*D?@lp>)91TB~v8#LgbTKG+K2bO%+0~fVPF8 zD#TF*osh~bm zd}=_S$_d4>%d0q`DEQYxO3mH-zkZ^fN52A;Z|}q6{nyjYkoOMABM=y`Icxm(Hhf#Y7-ucSpnB44fb*;&?BZ!&CZMO|#t&O)*F27H9t+6i?%jl@S zv7N!^Frqrs4qRQ`nhH02%B(gfR`;c>*Ew!|`ua$^QFk4QMCsi_!a=;Zyw<~XL`k%U(jh=$& zZOJ?robE7!bnh=AJD7%5Tdm$beAs5UdDJcV!`l}m{F)2ae^*Gsw=OXG{*X_=Bpo(^1RxXFY;kqiMvn91BG013CZ?te zH46)nr69-cQPMdIYCUUz4o~ZdwX$WYOv*~Kw_K?&nmu-I(`QMQe5jc#~ z$&|Y*4f3sXXl-suKi>9y=Iiw$4Ev!#jkz+pG-@rbAm?B&g~k$%*9#*A6mV)|LyLxs z+wyJh;9u+UzaY4KAAm2_P~V|RFEiaHhQIFaI<_wF-Ls8GfGCO!YOy|8UCc^Z&jnh1 zK87V8RrmEcOM z(^BgfQd8c*qzW{4OfJHqR11jDtHr>jqU97*H-R`MB-YJ{OPE>Y_YBMl_%cn-US4 zaTlIl@<#e?nt)|Aw*ceXgt$r?g}faos5-_7~Wh)89F7=$-%j=>K2T@c)+>k}s&|U&~{eBw3-E zBQS+kI|)mERGGXWUrM3FBr}H|>B70K8_^SiDXPT>)7jtcm7k3#AqG=_k{-( zJ0fSqdKeN>BddHPld^ayq;ibv1IcR4Z^Y38k<=0meP3?t^{wFyL!s zA7fMWMV683W}wME)|kZFL-W=Vn5+p<2x+*7BL?1E8zMA^IZ45VzW-iIIQGntVfkV| zpmxc9X5a<7;;PwfxEvXWG{(8emJVpSl{VZ1sdzl9+GPfCJ1LuvT6TtzD; zG0K9s>|ZzL#aC0vjNxDkgXxAh<2a6eYR`kFR(xzOVYboH;wrW-4bLhs50AK9A~L-= zdHE*dL*=ikCJiO|Q5Hc%eYPV)4;vqFA3;{-+VfusYc zRrSEZ!NJ=rbEF(`B=-2qA^K@N1P_AAV#rX1Nx|BmE2b&~b)Z9kiXK|B zYXffKp3FwWFwbd)q{n`Azjhz2jis&EV<~;|D*QNpLS)NVIY{;OD&7vZntz9YkE@dUN)r*o0sR)B{JQ+tF}hc32;~{ZV*Afa<^27-nG}U zwWFU>I9*^g-C(rm?XMrD@9r4M($QDsb_}t{`|wqVPKzt2TE?uGNJS5-SyoE6JVh;k z|L8Xb)hV9x|FSE-s3huPY#Hozk90X5u30BZ`<7@txG-yeL;%q^irH~UUWw_VS}yJ+ zZ_-lKpC-mOJ^_akX1>G7@^hSb3c$2vYGvDx>YN?G4H-TaOM>5vgWo_UgOA3?a+PI8 znxi&F!!X+M0+AP@hLi%h6a~tWQO2DfRy*m4| z{w@?vvb4A*+BQQ)r=oOtY4a%E+(D{ODoVv&FYra$`T@7G$f4D*ed{uaj})eVoM)>^ zOy&^?j#v^%kn(6Yr~5s@QD@o!*u~-ixBZAMsOX0J9i^^9W9-$Qcm|fS2Ul2H^WX^N zWn)Pb0PRh-OFDni&Z!Yu$T4vDZf_E8FQIYzK{%H}Yrg1a-H3CV9}zVf_#4dcDX=Uo zej!dwG+C9QRn1xz)!BBa+kTk1|5frhYwp0+ZA)di?`D|Ch+4BYD)tKCzcjoXu#xK= zY@XOb#~5r|?;LJ!kGOn?-*Rb5<7g&(9gP>oQM#A0E^5pq<&AUosmu*UlF!gRZ6;rona?Er2L_LX-D551( z7PSs5k8kWOQ))bnKtG89nYAX-6xI|QbPhC4NXKQKD`1wdny^jE*1_V>Q59260f zr9I6{dRxfQjK<~}6aN%oF~|Iw^dA6Giy0e$bSQaw)IPfm-DH4fC*^;4UQ#>ovh3iI zJZ4*`Qs^fip85V@;MsHB3L{D7OCA_5mWa=$2O)mrm^e&Om0T)1;x^dRJ-i4DH`TW@ z*w@|Y{}U9g=U$)4S4VX}h&+(4;W%OUfqT8isYd5FMPsN#EDV#lnXVs#p0AA-AH=lx zVKb8~<|EEU;n1;PZT50i&LK9r1imaQcyLzjuyr)9KpO7}tkXeYzmu}c zV_#Vz+EItK5~hZ>A#PFQXbRudE+k!Gkgda=lXW$(*NBed;CsUtC%1zaDd)fjb73`P_pvt|J~nd~NdeOmW)p*g60Zy#aV+a!ZwQ8kJ$zK3a9K}{6H{&9%5;p}@- zL?L-XIuuKTLZjK|B8H=qnP(gILKL68^l$()0VV?lLX?$+M8$A;=7LsYN^LXp5}n&e z*KrX-!f2pWtn>UAYo#BO4m#11gHtB*brYw>W^m_LAAwWErkNQv1l;ChM1ZAO;y2uT33~2&jxEH}jR^eqL)v`)zWJ#JOLttJ!GL z(aLgjUm;1S`p%%!SLZ`MA^WeTn&Q7(N9j8OfmcA_U-r>+h~pIyyc7=IO|!&Zk&6dA z|LcTjJp2kOUh*spkT~dk&WVfI^d*ZO>$^9zj>9CL#Rw$G!Bqk#y?+#6n#Ryh{!AX* zW2lhJHbcf|ni@A7+Z-^bdbnXEj9II=DEy(_FfG#EcMRTnE@Rz}3yxbucu_dIRqn3p@G?l1BYhNMdItxhnu6mET8D&s@96E6r(tuE2 zZdQ@%q)M~-%|ax?wR_;Vu(6(|&qzFcL}QSP<4l(7TI^1p_%~mv??l{EIkwV{jR_9J zyEFp4A61NWk=??`sjH{>EJw7?7j$0%-AhPpmOC9j@9|)W+#xhN)vC(AL$Rx&Y^`v6 zXGwa(G#u|C(fjn;uM9Ffv}U2iQ2?L4MyCZrLvCs zVWT;rIxA*FBHiDT8Td#2>|17xTLgQ>`kJ>UDV!Y!%8$NtG$HD3mlnusCKE9`4Td2e zRGn1-8yPZgG;2uUgfQH|u|rmxs^*6wx+{3`A}Y)y{Vyv+R31x2LQH~z!%;yE9GZy% zL}snp8Q@c0@(?8K(1@qblj3on8z~a`bOz2Q_Z#b#4-K)PwdOL`_=_W?RNeLB9A7~u zLKJ&sEvxwORyE{qQuGNd4|NVhMqL|5tCYGms3Jo9#wBESSX@;36`7Im z6>iQRr>U=jy^9a^pW-K~KM3-J4EzoDZONV3*7 zGmS&3c&VDa5Y=Rt6qdmak^pQ_pOBS_e+TMv(F$8%&6HKaaQg(k|5&)#4{>;13!asF z%$3Yw)(*P#!@f$aYU_MK22%HT7%$f7kFz)q(m@W3G|l>3U2E>YYKy4EVbH#2SGLC3cS`E^D3Ks=Z0mc#@l`S66p;;K@rVK3iugZnN&tm5N z=&p1?kQS%t(9#eXjalsYr(LnA$tjcFWn;~bAwgNsZD2UB%&ck64H4IBozjrX1R-v! zK9r^(nS%;ECCJF)$rW&?pmcj{wR95t7;o^{!N|h69ZJ2r`CNl!NT~;}E{^pH#11-= zH>1fvBzK1>dR<#x9ee_gwnz$INKw54XvrQ1fB9pLM62JgNuTIdgf&i{8@*-Az5+mU z&08&`*08wM_;PnocRPcKHBAP0H{ZJo zR}?yb+6ICM)u4s@y_~9b1L|j=3eVhY9LgVqKNZHflu@8vppO`?GVB=5JNQy+P~*th z+T&HUfx>8Fq@i_lsK65^Klcj zC$XW}G;2SXaW*9a589r3X*j#fdJ24CM26S2@q9aCpi7X zV^%FC6Dq|nKji?Aw;{O;=DcE#%r1F}bNW28dHH;7QT2*lQ^5nyegGO5my7N~fz80G zJ*eQb)k03TWGch_FXq@EKf0ajb?jJ!tcE-Jx6pL+r{goYScJzyWAa+e{G*BxCLrS} zg*#6ITmvg9L`=<4O)Gd*tJ_^BW3olX!P!O;M7CZjJ$N!SI}&mabG_b6eK|!d#a2=ANaqqdF`*9QyuBKFLS}K~_0ohsnPxN_ zR&$<2G)#G1vfG+B2isN7cR0OuB(ynwDYPVT?z zPQv%7gJC4$@fnKD($RCaY_k>>iC``YKzez#7=0(uT8gB%x^3_3+Y71VJsQzuC&dDo z*TAJ$-DQaw!k-ySkP!d&9$>JwG!nk zh1b+5+rmrR^uRql6PT)a6q1|ajYMcW+6j_>QW%l3)`Y-(6I}q|v7n5f=8{!ljPuRS zWU|PX@8lpYC}ap|k-z!M?qF-XOhGcMFWzD>j)Sq4vbKn8K9u+q75gg3k3`GDepzm$ zeX-!o83wqv6>Au~6}tetce1F{0a${f4l^8L?6GTBW)ZE}^%{x`^x^es5T@msLrFI( zSFYlWFMZ)up#oC+ShhE55j1&v;VOxq)S}J0%%b2m=4s~d$K-7o6w={ngfucz>}z0@ zcwUMW>xj0Lp0H6vGDe)VlG9l&5?wQ#)IpWI2+HURB5)gDxYb!_KAB5}(9In|9~Ozr z?~8+w-&+ow9!FKUMAn{4tr%Sd!gl0X61i%x$*{lU8E+HJ$D=QfB^Df zn{`#6k*-9;2nqSCe$F)Rp7J)#R5n;oDdmqPTl?fsxO{*dfg0Bp^Hi*kdLo!IarEXz z3%Pdv%g;54SvS>9s(HMu%2AnY&^z)2Kwu2xOsQn({*s!JV6vQXLDx@hwB zzIERDTrU(7x_FX`>dbSqKBro}GlRvSSpC!BH}5JdeDsntWO__|7jSTJuGW;?P*ntG z1nJ7HYR>*kf=q;!z;pz+-I{U$s-&uxXhQt+nsz*gr&)VbhmkoKL#{J!x-yOftBvZ#C{&8rx?4{Pj??D;!G?DJj_c6!(J$jNN!-nWkw$mkP}HQ4ss;|kDhXpJ z{H;84NVCNzduHH$yS$Vsj9uPZUf7e#lv4G~R>?5Feih6S%xpuS*^hw4lSEd&4Lt8?x#)qwQsd^SrW#r1{=Pb)qI>N!Y?KSUC8 z#oS*3M@RWDwaZxdjD-R^%(__N@#^B!l@1vwQih`2jS7t;h@ zel+qYraZgGy4Zdo+#jy;!naQJS7=|*>MifW(b=AuwZ!}6B$z2hbDDaI%l`G~6>wVj z=eP`d`;a<;YE%qe43ie}AODso1iZeP;*5CD#wc8KU z<_kGyJ4Tvr%7!_tp%iCu1C=;2Xo#rL7_j(a_{D2I3Iw%!QTs54vaJ{6bT(U~f7o?m zw$!IZ3rHe+_4d_pn2g|42nQ>Zj>xQ2xmnEXLXB)kEE?e}r0vJKW?3+P{q2m-6DzGx zRncs{xyrZiEa4T6^vz$%ZJo>^%%*oSLUSzX^BJZR#1u^oo>)x!vvEGC-&33rK{iH4 zwo*n>RRvq>_BpmuFJfN(`R_H=fS-YeghxV4!+B|j>if-$l#x=%1EGxpfLt!C_Q z)7US|-Tsl~zfkdi)_pnJpJ-3?XV4M?8gdG;=mpk$HHZD9RjPfS$;Gn-$&37h40Zjh z2fC0rORzvNpcP|Me^(6$fK>M%PQ&IUB4+J{kZz--3O97f;7 z+9X&exHD*2Ijw46=MSd!mSfe^hnjH}3Il4hxx{6x-@zFS0xe^Ru-8MPX|~ z0T>~Wq55`&w}zP{fBdAOSBGq5puZRPx_hF?M0BO#8!38RvqlM78J4@qQ zs)}|eSoCb{6cg;%#A0Y^0WP>H@u$0XC&hY|5C{ZY>-3C1r-@j)t>tba?LYR0z5-XAkd zx(|gTQ>Ouxkl1XE1*x1gd$8E91^zjvT2zK&Ti$QKrd9D}Cz1ZsXxmfC@%5l*lWY5Y zxp}>IZ#dbjSzTm;MmJoRPBhh_q(9ZOL>E&6R;+cKcP)LW5ziH6jtYtJl z@+Yjra6euuJJv>qJ9Z-jq*z|H>au{s%GS-J439B`jsDr6ltLWg_V+aL1Fu)aoOmPYPX>YOq4L(XEr_`%Q^Rh5>7nE?dyrd4ndX%b3^ zcu@KWqR~}Mg!~!*76$nAw__?=ila9#$~9esi(wz3SwFR>+poc}sQw-R6_pTmO|f*h zY6`Qipb|Z)H458YtGO@AYLVy4VU-_+q15rD37tuJGTf8{oQPkNrk++UiFT5{?eeL8 zE3kBL?GGO)_wts=Xlj}7YzUjP$JlSM80v`Za|}a{Uy|+iDmChyD@?cCJUZH}xUs)^ zmiL+XWw)SXEzqt{aQZ!tnXqoIu#f51{$OA3;m4aNN@25a-qtyGTD7$wRugMcSa-*~ zo*zGp9FMKwnPF%cTUV6-oFK=RwnAp#vdCWJq~WRc+fIRCK+v<6NKr+7DAg4_`mNqe zO7$du;xN9*g42UeJD-X2hwWDYaPs*7ne5wY6gc&NWk39{^`M<6d}P@ho$9~Zq$sA$ zZ{3Dvc`R8e8SO~Q;D~nXYK0gKY0dVv*%yD!^Qi{F+fe- zF=2iIhtfD8zE(`!#3?Zk6@AR zyJrCO-#r5gb395<6KnXGn*{guw$2SHXmKuqTXl9s4Sb41)K%g;P(q1YVpp!Z2@e#1 z8hIFRv|Pt&k3I2NL;l-D2mLYs-*B=Rk7|CL86s7m^65?)&a8Lg=&ydO$(?TXW@vBR zQGVMODS`X}y4m*nCg%MMk@|m$Uf+MO1kROQBta{L3#6KufwbXgi|5wjxnEorN)(No zqG-ha%%C(1eEimfRhK%N^|2q!h6%Z~D>j59##`~HXBBpYq;}AkpkOttEV7+KLj0y( zM^N#CG$j|miW=~*Fagx!1{$~kry>`(3@UVeJgdOBKN}lmdRQY9$ZNKz*J8YZ!$jy? zDDVFChj*LIvXcm6I&SUq7#e zvg=*}`*H@-e`J1mu2R34kPzz5a2^0evgWsL!nwc{tZ4RFC9zEpw>oRT7HsTmfK^?c zn*T?Vl>)xmVV1l!oMGRJ1&evAZ>J@Xh?hRNd#t%|kQ*SCBZ)O3&*91IfvhhW($M`T z+8CgXe$pN^nN-|+CNd03*zJB^?Z(9v^^wOZ(JDS>1}|=ar=?K&H`r{wtFe%LijsY2 zND-`m-V@qRiKv>z+#C}t4@em54w65FIf*pVfBfW2r05IoSUPo7vtfe@B=kc0d2750!Xgmi4g=0h_PJ4Q)j-E1zrbTSZk?)Y^TC#Va z4+V^GS|oO#Bbvgy!6d6ro7jQaSGg9L`}?8!oX30Hy9|mZ8-rLT&_UUq-A;Qd05}hn})U zwp4UMu#}B5RlTM8bW6SXSAf|0kE!Pj&15`kNl7JV1HZNe z#<2lH7ghKCuXv;}Oj?PN4L>OyfhsH{g#TO-?h&#ZmX|lT&6UE~V~g;W@;K;WS%@LU z#m;{Liu_v>#buEhoZrBa;Ix$TK*BoMRn_qv@r}w! z$v*eE%f9kKD(%+P*sqv3-1@XHaZ`J(Y%k|?la?cIa~;1T*s;K~bP9AjD;Na(TMjGg zT?6+;@9wUD_<)r6hzdFgq$trNM0wFyU1acXK*}4mqt7p9VVHh!dQ|8}5VROenNH8! zM|!*(gYNQp(A%Y}T=c%lk7Mf^tDVreB`pdoh_iwBJ*e}r^QlZmaU&Ghc&4L%4t%VA$R6EUA zSnh+_-^bHv_q+my!`$W#%1~25Tve_0Tyn zm2uE?J0V^&W>>wTq2qi%g2iZ*5(IC2DZ<7+Vb|^HXEK%ka*dW4wVunamd*buY5SYH zhf2u|n?*a=FSxqy;~(zjY>w|+M{ca0jM4@;%e^Dkb;g#C!Gn?`N}P^qHK%!umI`Bwk&Rfio7=G}rNwi5-`J{ohXlVxeU7L1vH;gAL8`lT+4Q}#AO%wA!w!wD3 z1Xy;eIH)4xw&OFGK7KIFuHz-IP;c@GLoE{n{1SCTmVK}DX($oYjNKExPKy%&*1w;S z)lUu+baXY`uIm1=+_+-Q`F-p~3;eiP3+=mCN&B49XZW*xW+_C6N+}}1R(Z|HyNtV1 zz;roalqjmJ0u4XGzAX|euaTFp#HT>ak*ZQWl09F$`d9!4!WX-CAnj{77EiXnL!A)U zS-0l7KGR+ybC8>)9%=Qfx1DJDRNDv+p=a@`ZXa=oD zhz@P?rFrl4@*>X3SN!6u6#6^O0&WL8nIVn%(H_@jUL~%k4f9$D5+f4D9tlY<+!X$( za`2r>AKS$Xg>quL)Q9!_=*4B&k<#-szWLD43QIJNfUXbeFuIS-2o1|fuAIcR10jAP z=`S(q+9~(p%&bz#JouhZYZK{$zaTR)L0A&F^R6Vod7-O!- z*Tq8)MvjbgDH1&;kyW- z`)<16tN|BmH?GTTq$P8!Z)V$*hLFg9n|5jYeVO95xO(Q_x(5zK2^3j*wb6Cs-yxud zSPm|0D~<-4?Dx>ixlP~i)oip~hiYMxc=3ERiP@>PT(Dupt?e9@9;JeJWwpbwO(kme zXIs+X zU6%7bH@xiH7-f3b?JL+ni>*twiW0SZ-o$ni)-4peI2|ilr-s+|sTDR7L0zSt%6PO~ z`5FXo(U}pGgP!Y970&_@e;80!P#;$6^D8c4=^u`VexXjPieQ`Bi67YvUKVrg+?T+^ zLE=9Y%K&;4&rw&B^`WhGs)=VcVEO=YH!1(c|D9Gl^7^W!~ah@Iz*arJMY(c|u zK6k!w5tW4A4CkI&z7D$qVzO=B@WBi`l9>N7Q6Pw86*Y<7dke}1*&~HFya#76I;zKs z`$Uaw-H3O*f@fQ}as;bA%J3ENi-`4@)+^bSKON~g&};|dWucB~r+E+6=a!%sDHc2! z6o~PTQ4=q+v~6h;B(1C7w-JU|7Dr0$N}MJ$=HJJ2j}_nNef7zGJU#BK4)O3O?A!Jd z9Y&M-mM8*5}F^od-gK7ymaPi zru)AF{Jtt&X@I2tYjBis+)mUz>vb*k$+E3o(iH9a)@WIsLvY@ISi*QGEX*PCV2zBY zbwQFHMOVhC$x{}bIL zcJVuviYlJWLWEDIR`vR%v@pWvdi7P^`QNZx+*4tMLMNr>n?6i5ju3}AHc{K7fWW+E zyhOO00H9vIPr>^U1dVToCXYp77}D+QMQamjl;qlW1jCL)*&ac$0-3dY1>kT&JBwhm zYCvc9qy4W>PQM3Zp~YpqRqJnHnUVp4(2kQtZ{N#{Fkx>;+TM|1pprto&6Q0>LR zR$mUw2Yz!`d>kLV~Ns=|>ysr0{dhFznQ zC(hK__k2jaKq)Sinq^GQ*S0)!vPIu8&p&aFaZfnu47v|m;Pq<)7RslnQ*jT-tPpN0 zer(Z$CXnv-9rb&x6p6g#nq(qnwq3RRikzCI`lqP`=u2Z_AEEDuqlOEuW`yx=Xx8=` zM{)U%eG(99izr(x;i4-3piK_Ms1^CApNZAbv*6_6Wujn>W+ zTk`Gb@GN&SKtDuXvHJGKknEvTsqRi4Vmm}`;w8=&s}U4F5@};i&o9?!`JC_61)n6* zE*k6(IAe&CXQ)GU0)bu`lNS*!uUfDa7IXtHjb~d~sc#aXS zQ#kAuP$i-%Dt3~M%#J0Qv;-}oVR)+Jl)o4NhHLt+3&6&(g@Xl1`}+g-DJZgFRXHTK zBa$gBWpIjoGc1KBg_TJJ_r@};hn+MO86tY{2Fq^DbEAF~J4vrTZ9m^e2|OvgkzK5i z&Eha}DIP4(i>GejMqZ9d$cA z#+21{yZ0p({7osg%|&3Fxf*-#DXC7%3MHL}Snm;)vn4Ml>xr&kkiZebHbwDl8cws_ z@W__0V_zApKR_3kl}W&H4y&bgZka$g<6gT)ukhJ@VRuX!eqYT}LaYkjk#y`mk6!Ac z-j%D+uiLdhk9>RuWKR8#jQw>@BDaM<2@ip+65G9JOK2=n5e`@&f>xf`S5}NT$PNF-)Po zi_(@v43&cgj~ow9oq{;a1!G1PLbcbI6JJCbk#?2f4OEccj3V#2d($%8wP%QE1OIA7tce6;kvcn2$-Jz-8V?JmMJZEo zO%iw1wxkFHsoMI3a(Zcg4UWVJXX)8+=!I)uui5s^lMis3~rG7ASUu!wE%QXdgB+g0F{r8w8P7qmDw z`Ho1H&9D%NTfEMq#oXAkPOGfx0%lsVms?#bG1$D%iSd-y%xVM?-zVg)pEd2UHLq7= zK=q0_kWa*8E5yIKBp81eqf$bs$T;|SEjQsNy@ohFfh?7JLLh;v!@lD%0Jl%Kx{Lq> zg+V+5!NgQTNDk%G-hRk^sk`<5Y3klTl4(~px<~byr>l8uLbXj^iliCXei9ZxcplBS)yBL(0x((YbnHd95u@E zGy1S5{k0BoECqb!<$mv?oS@J@!S}m;_5LQX2B~jr`E4C8JFs+T+(2J7>>9k`2$Su` z!U?Nw7Q(quOq}v$btc=NfvFF(9p)}9eB(|_rluJ=qr)g^RfUt^@ORQ^(A3zLaH1D- zO0`6oOLetSXxY)Pt+(!ahszlpwf#P}CZ(PE^Nm9DW+u)Ybz=~FEiZpo=A}<^Nj3$ql`{CwdrP?Js*wL-LDsIKPe3|E&I- z*+Zls?-g(x^G^@^cam74a(eEE*F#^!nCE2&dhxlXQWjTZlL_BNF zZ2yn%h+{ix6^$w-!MD*GUb>{x_yTn7^L_s1OC>?;p66)yNZFv4;$LXPOVD&Gsw|0D zmrZtgyig%md~?@{qsZDe-?~jtIGgr(jN8Uhy6p|I?O1*)(TTrpIG*CyVDcC@?XvD% z$bAyU#=yqJ{`9xF9Uh*AiTN>}k&GwKxXd`kqDFF6c}%)T>lGjm$uj-~p&D&^1~&h! z>IQ-zD(n|@eaqKwHMh$Dk@*=c>DuC2Z04PF!~|<@_T58bq0biz zi$yn(w(Td+6HpBsxbfyRt~n49%_cp2v0=--Sr+T4~*?b3@f1@L5-~^2CJc> zMTD~f>LLCZnD?11%yG6#kI-M0nrA-fZDO<}M!Yz(xay2E{~l;5$3+xQfl&1eqPVSn zlD1Y4n?C?AEcecg2kcfn^TUTz;y#ro!(XtQyRLmyh7^sv2Mr^WxQ+6riMP)#JcNA736eZU#lQg@v9YwqIW#C-Sb&#TAS9Pe2w zb*Xn@{6gF%P~J38vSID8M)C|zH{tdsh$i{%OUdu@kM=$_^N^!{@*YtfCBI3(F3bd0 z>I6iD377-(~KvAG)BSQa5ioQ5lb;%Ao|EUj4ZSXDYblqj<*6!PLLEKUQyp zRrpU4oZowbAHQ~z3=uf1B+8oYnNelL1M#SLqY~!JIB5w#@@SOBBK*Lk7Cs5Wn2;BH zUo01t&TuR_#tpojw@F?k@?vMvLa00}Y9usEA)4G9*06n0G7ebMmAL+wBN1 zjU93s)En`b(>0?`_%kQW)%^HSny_gX`Bg?dYlVS7#7Ri(Q4-G^y~gqSA!@ef29 zqUytR5o#py%nP3C=OgZQlCI*hfr_yV@(>6*uT&j*Nr+scsgiR`qKR6HYw3O6nz;ZDcQlN6jHgrn1c z?`{SASRU}n$PHX`1#U1L?DRy^y<8vU|E#)S9tw{TmYAxL)#F6^887bej;j$<-xhOL zk<6O;Cfv&v3Yv!G8yfckRW?j|lY0;`(MkCd^S$e)$|Q%^LUJyth+0xLv5Hbtv9aj? zQc?3_j*h+=FndBIhmQOT60+tEQEXYET4AS^$BIp;DEl%fyj!KfEbtyDjDSxC=Vo81 zf;!20N`fAR=%Zq}S5Ajumi~OZe;@M)pv)OZgwSkpC>`gHC3RUQFQ{#11U)Ub`EFzx zUiK@4bkylZNe`b+C4@nguwDxH!hq?)W(&R97H}pBld3w|)f->cPS;U1Cxl{+&I@bW zUhWtW%LEmX5|lFAhkUKwrC0lIdSJ2fj&u9l)6Hy(`k*F(*bV*S$5)_&ZpnxP`ns

    M|!;QF1O(~^nb0{^Y@y1|5CH&?={u_8#Vv$xB36Jnzlb5sjca+ zig5O2$5}qc)PgpYp1JKYnov9O87#KJGL%&sNBtJwvGv2y^0`kCteS|C9F@iN>f*qg zk;?g6Bx3uo(+hZN6#Xz5%GO{`tHs1?)Lm9 zgzvJ|L+d_e{^XR_s zWrpOFBEI~-lrh|;J=Ag=-GAis<|20f{_awo@&^##oc#wdEb01m!8#K2T8HiQkexD%Q3LDUf|8#lwF7a9~A2xG6)@cV*mf1Qt#$%ci@><-k&ezrt& zu=o!kpgQ^M&hxLM{LmJiP*{e1>xfkG;=>yGiVpKZN92HMxwwCbRc;dYuC>nE`0fFH zcY|!dd_6r5Q#Y%36yBc@`fii<&hy1)&LYP!Ljsom0I)VMKGm=wV8r&`@ZL-a`8>$6 zd;G9c&i1!nquyiJ@ryFdUYLiwNI-7KWPMbp{{VP?S`Y8Qf;Gv7^n(|W)7 z+!sAUhE|x2!v_x%Rs!Z&vj#vIxWv5gj^6P25l@fTku<%dSt#Oi(w)OTkcW0b2w!$2 zjqX3K-+bTvl&hBO< zj0+1yX6B>NYaZ{p?Y-%b4gL`vl$T)Prkp`MxBbWDKL9kJt9^+}#^bQNn}0@gsJ2*I z&NUVI`nC0=sAn+etu+-j^YTIyQa0gEZgTjN_LJrhU~?z|85z$tdwxhpMSGCuBBGGL z&`^DCab)~v;^n#E%SZIH!zhLi&zp@<#$L{*9N75$IhZ``Nwg#O$+$`iq@a1IPm>KB z@R&W#13GOxhi62y-tu-fd|%W{Ou(?l@ftO{ zQmuK>FlUL7h?iqeR|}&*ZAvMv{YdvMrEE9FgyTW^reW!KZJvX`c$EY}ytZIDBPqC2 zgZ;g`5Y(3Pl|J}z`;4Y;6H0!Shf0`N{wRb0FFI8Qb&6LcrUdhZF;s2CYvuz(p<(CS z=u}vI7RtW-DEk0HWO5wdMUT*&7>M}!9t>L(u_VN5ve|*FFpUQ~d5X|W5U_pyv?s-d z=$>z(A1{fYu5WP1R%5|yhD<+AhvhuVjO-f>q*cu6{fAx68Yf6hdIzb@%x~OFm<>~e zuojpLTFMg92VO`e=Xh9zxW*};CjE2B1OgBgcpRY_2u;+3cj=nrZG1uEzs3KGBR6NA zol`Pi)>B0$Yc1Eh?%0nUexWgYtuH}-yF-7!8+7{vKz-5rhfG5^`}bVM3kIfWyN(QF#SP zhmdmqbOhunVKmn=+5&|-Ty=|>vLTTykdm%Qy;Y2(3hIdo73{+@#4KyhqNQ~nV!M;- zVU!=l8q^IgDnyw+UWAo*IX!Bdlp z*mnOzqo{F6Zx0Yf6hqwann|N?vV?N~#P2&jy#ML+y4f`E`SLsn*b5=Oirt`$Z)0`W zMY9qc)p&b)j@dYEIb4o*7#qt&jyr=eg#_jnBc$Y{P=nrUKK^Ny0tgL zShDj>2;0;fuAuNH_PxZTg`D$Izj3a?&1lzqmi2te*xueeaA*$; zn{%?%E2B$fHV_LDy%4Bn78Y9tU}jlBA$~< zOQV7{)H$T8(?1DTKxm~PxnCn__qe);Gj>2hT;n}P^Jx+`>Gipcah-IVLSs2rzvw_Zr0J}AX0{oA z>@Zo@;ykv3btP>0u#S-WA(e^?m|tRLTIuM>j0O9{%gKkjZXE9X!k2h83_9- zEwMnDj|gGU4^@f!s!j0Afn7^hiaMX97h9Bd>{nu{ny7}u`@WFEeq+yAx;xy~p0tMe zUu@mH$OaWcbmO6hhAeuDvEWx<3ScArkVqsq_caPr%yFEKovPKVz?6VonS?jZ?fx2A zh&P>V1+l(oqgYX;3*~dnwbr`croYHM~-lY9l2- zyb+oH#9;;4MN(o8bWM!iN=-;1OX}eWQuJwCbi=GUqBD@8xPV)8mmEeE3(?{BZA;JM z&(>cBVDZ1Hnk24VpLx8pF1}qLEgfosa>3gGi+*=qj>MCrH5%Ni9cNg+kByqiq;0I( zs-UHes!)%KZ(Wv=Qe1L9EQ-7C)2?0}S3RYPFUH~3oXpOp@1eg&D_6qdUfLhS|FukJ$Wvx8g6S|JKN!B7EU$H}KIYT5Wn9x3 z(DjhD|M=@!DY+oML3c})Mx>#LZcRXc(0NYj3LeEMQUnYip zC3iOyVO{aq!*YaSB}zo)_f{HjmWjG`NKQ!U$GP!)EW$4F0b8UcxU%LgR;Uv5`sXS# z;Ugil=e3sg^L1hi&2OykqW3?r4orwp)V4Sd&stwivsx}b>gE;o^PVe{grWktk1)~9 zG?KYS~c(wLhnXb3F@9a{V-)nELm(QU+sN1^>bv^}aY zr6Wz8dRwIM=v&+UEyLUa};F@BQW(vs zDAtD4&kpM$fE^HkcXD7E!f^=?*DASI2#^;>bb2sgejSk&wC$_$y>Jv^os`0Dq*#(D=)hjpPOi zHtoS3HF)GuFt+vyGG^FJNT#}W!=%DS1qPCo?w}9OfWpb%Z%dMv?UP} zgUDFS>^qP`>8D+nleId@Ip-ve(xc_tGQwE8jClUu4Nw7YNmit|?0FvAH0>`oY!Jpj zhR|hlUS0Z}sJ?bc9A?_hZ;s64=F094+}i#V&(alRY&+Z=O{j#mlZCHf_t23#@#1tu zcC+1OSLOVUk0HMu4N?#}eUy??G8o8Gv3~$~sWub<2t~y3!w8Lrv_7gfVoe>v!23bQ zudk2?39~vASkO4|n0m=Wx5y1&W>=2B+w=@BzJM z2W7C$nNz0}=KOXo`^CJ=?D8ZIqif}q8b)&>wh(@7n>dC&mH>lQlbs3T8c9=X^oFPP zkzR>I&y6PVjH4`$F;@SEPq7se9c*srFNu`K9Ilw=B15P(QH3*jXh4AG9K}GiW#hS4B0r z@4s}Ep=A1;1)S1OA2oz>*f|Bh~t5p3l`96B6*FG1ZupM%PWf>=Xoie2Rji-%-T8nVAjX zD~IoT;#%|u&h39Q)3b=HGj$0U1nSnGyVNK>4Gwa3qr(;R!1Z`Mg$x|#iqs3TTI@&3`i02)8&JIa zJRiSRwOMy*UeBu+BB|D-*f?XM8Z14YK6%k)iaBsZnfaHDWp=L1EgN2$!W$O8&(06e z8e!c~K6BTonvGH|c}T(UG8vEG#*F1G^VKg-njBdL%Pih5XB6VgxOuQr7?CSn&;Blv zIAVTN;JmxL2|02KyssgtQwtR&0N>P^E;e;PlW9`lYK>w+-7o0z=4+uw8QPK^B5GD# zjH*S`;FJw%TPfo33sLOEO;5T&2#f5fuugUd4t}CNVqisFEIy~wX#6qXp(8C{UvR#{ ze>RIIl-t?V2$b$`Vzl5*mx-{S71|a%41|bNT~#F3Y0E1e+~r%RV{AHvln6RcCLxE) z_v{|?u#p4AxA#Q$2cX?&Z|XCM_a#Euc#k{YE`R9o7=Rp)Q1Qu%x}qIcs#oZwliF5> zs1vver(UC~HPv~bZK_+HhS`Ksq(!suJF;92{PZP4XyQwvW*w2+{q1u!jRkxu+ih@0 zHsbArKKDM`?8A<@SGSAZIW*z6;7`vpz}1>(>O<#mQYk!P$;e}L|I}s8Mr_;AvgIM| zO!B_=Qlh?V70lSRGH>PbfUyqC4a;=u|4Y$I)(Lak$TP| zXtooR74!m)t3LV;%*+G#Js4~7Jpcs;v)&u6Rmg*)P!!vsP*bimc8Q)n35RXX#;MGI z!!+_|NP(7RZr&$~$=3OnVk05hU<%2oS(8FzQwob`yh8U*QwLWt8&Y%xE^|*Vt;L4V z*skD^A(?X|3_o2%)o$^_01cr$MI&swG|R9tY|0gm%(|8+ zn#oZ4#+0TE%XJn&LlyWYoM@U7KtzKj(1|K%n!!L(S%F}+zA4DK0><|h4s|ObTFses zWQmr5qY9WcReaZkc2iUkakR7n) z4g?k^;!ddV5@A_n90jzAFmS4!S9N>Mk3*~?SBErID8atAi$9P1Ca;qLLgQTuQjO%Y%}3h-PI$16c|fR^N_BVd!S_ICO5xjN0b$dV}}6 zN&l%W+dRr_67kCr2qYH}8Y(O-hV8uk$ln&(<%nxzCy!RT>MTVFg9+m6<)|eJLnfRL zJ%*W@y#W^4twfmQzC5c{uV%evP6ZK-0#iSfTH}^x9k$*Y?zChU0~vlqbHrACYZg3w zSTkR=I~Z4cX#{D0Eb2?A-#^jT zkvgWRKjS~K9lKS(K}wb4G%fLVLy^Psc-iluu@3E3s8A!|P#ENVAJ=aDDs@X(*Dm{{dAiRC}pj^(dxv((tfq|M4#wtWEXX z!#Ki*82H#z%7EYJci>>p$I{bN?|h1P&Tr>%^3&N)F+60Mx~qJznQ#`Enrq&8dhy&$ zd_A;q=|5xA@1=8Mp9Dbcof+wXPZloL79M0Tc?LVDjCRp6V!luk3e?ct5{Ng>$;8FRFEeZ?1UrUK^`m!#@zKP9X$EJdQ#1D{qUPj>ljgleC#}5HXn2aba^>~1 z`C;vsdAu^~EE5{^v-fb<^-R!!*fg5C1*_`hnCD0Q5?(mGnH-vwY48abwb7=WQdb7) zI_r&tomfY0ba$`pe|=0z1U4Q00pPkABtKB?s%^zHshq#92oE(F52j;HK#0j@yW*uW zxJ(sn85?@LV&3|wA+p8%e97nfZ5%!jPNBa!+Yryh6Ky&HgTYQ|t+q!ftWZYQN~?n64%6g3SO{!Qv72NaqChim zcSZP23jSSQ8pT`)`S^wVaZej9yL$fGI@J998Hx=>Y=8Ui6Am@(NE!{AT?Ptj7u^EK zKRFLIde6qQu`R=pHMTyAM$xTR$r(C<8VWnz)GN(Ina-qD!{8MV0n)DW#fH*{tCohs$;?znt>S1vBc+L~Y$#49pFv zrO1dCvQZTqlu&;!V7ssX+UgI&N^*AY_^~YRoN*+Rdh3F=hu5n#-9b9(ELV%B6x6y}}a!2yfFr>OQ1K<)YY*R+q+-uIfDn~?0!lmRcj{e5`e5Bkv8 zp5Y-pk5@g!2cMWoo~Qe6;X%jjQv?I$$F*5NbTu8{E=PbbZ4fVtA`<-Kv!1fT2_ z3DuVPQw3FL?MIc>c@*MF zmO&8&{#lZ$z(L;#*ahE`D7-<F;rD7d9CE9J1G`K_eoO@TUOuf&ef;B;4HGrr*NO zv41>Thwi}pvNlDEDPY$xl$@00*vMg6Fbe$CbHsRhA&n_|=xr?BhH@YmPd6hs@ z??FG6dhD8rlac?-*j8hXEj>FEqUh(uksALmmp;yq(qVOP&|-Fc(>kGN~mL)kCW7hN%W@xn5Qvw&yz7MGE@U z1lQ_lR0w{=#laOr)3hTExCWM?%Cg7D!lv;I^sCOQQFN=+{chOr!HGLY$4a3&uXYF#YEcf?V=er__LsUOro3%M4o zDeX;!7t>MNTjXxg8&5bSS#hs%L_`s8s}es}q(5Kvx+^nFyOm|FKSdZVM4Pth=k?3yeOu`FjDCg%#_L0N z+%Rk->YP7PY}q{x)fnq9faFd1RCBa+>Bml#btrO@vCvKKOtfwA4UQrg%#f;50RpyF zWU6ODjmU8b6Kn9Un{x1^aZNQ{Uu7m#1t*&w0kdeMvxD+ASAGF(EK#H_$eg_{7Svh~Ia!~Pf}n_GjLieU1?dC}SrN|4pwMsBl)=;wp4D#{ zCR^%F1uJ1>3Syz=9i+IfTd^Z7@go*(kd#t(SP4~zhJyA9nZc?!;1=fXf}8o;fL{8e zX@PkK1=&>}(a2M=sw+NDOy-iHb_ZB2VFOQ0tZ6ysi;`tX=18yBx_0qtjiB-3VJCQ+ z_ep^DDc8!nzOO}uS8i;T^rjX@SKBu?YIx^e|9-mmA-8?{o#nCJw%oPneC?JfOijGc z_{o)O(r7580;~fS7yi3{HF$&6zx^qN`T*ko+bT&H1AgRIDV$0;Lc+6Adi`jE*yO1qM5@%*YdrjX-Qf-v6)m+*&|5b=^pHh%;qEy)wIbeN#ZQX6$dJVUMv zIucS$j{jPo?<|m800332_pMKGpLb_h(AB>-)9VkQlpP>Vt_i%#>|UZa_-lER0y%m+ zs=;3qX9c6&+r$FKo;eOE&RM!RNYzG6Re95#A2BwI7f9g{rv5j=k$sji`+yUADg%(R zCwwOg9rG3(3VA3s6A5W^A4T2zG@IU2UV*bB5Sg} z2BbpeZ5E+1rN#7OlhSL>$p!eqrTq<_TJFbuuSi3;n=hB;6s>aEMh;dM2<1#zq*-jF z#GVE$Q;Gnt0KSjMdYO;M(;cqImN(qyAHc;%kE?SfxX}|RCFw6|)$rdiZIK;MYElBH zT2KHh*l#KJEY?S)>bq5;CV>pp6HcYLmEY+of0t6}Xi;$i_rv`>1t zH3tv%#Q=R4Mj@+Af&~zSVgYZX)9(;Gj@!#S0H>+OdQ^XVw#-)Zjn=R+TS-@r%Pj`@ zw3}8oLI=<+4qsIXjTELxQPW6S7>pK~u{$v2D`>APfnn>QY{jX~Tk`B{jLb~cbK+7b zJIA7#P{S>y|^+aIs$GpD#)+eG~VqECD(5 zm~+bU-!{^&D(65==y;t^;tpuhA5Ce#PFO?SNI?i-8B&MhQLn8~M)hN}FK?E*=Idup zXC2M#9x?ko|B*)YaB3n=&CkO5E3;nP+Fw|u=%p_aA^PdBBZYDI1! z?=l5_A?opQIFNe;X6cj@K>qnd2&23s)7(0L00=@WLQpEpeo#X(BW7#OQ?E`&G!M^-b}e+drB*M%4;uI!%2baH zwrjUu^_SV}&(r^5s4@>jChBE|6b2}peZ|a$Qy6~aw`Ha7pX+cv7d3v<)>O9c`JOyi)ph?a{c3l7*w1pA67 zKrFHK*7_Ci4in2*%vS9E$1w;&$+=(vSv4s1mEDyMz#zw*6aD7f0dzQ0J4@+nBrp`J z}Cb+l~V3V^N6T#migLWYQmZl9CG<~#xe(Pb5#W#>dXNMmA!X81fFiv`Y$r04ks2qVFERNDWO1zYMnzUzIhC?Q)5 zV8@z8KQ0fMtofY`JI_^vSh}dnAQ!f6{72BW=Td4CF*n*0a0%63zN9z>%}fX1#Sdqp z&%jb48QNB0;p_!Az*ku7B~6KxLs~Zs>N?KUP*ut|^eY2h7@}JgzeM=+7Rse3d%3XM zBlH(AK|$Qeo`AE<^%C374wuXImjArFx?sf8nYQ_`3ye?)ql-HCTrnmQY@muCRAok9 zpbdVYYVoy%+)0w-MY>3ZTD7IfvI45QW*Suzbd*P&02EoR?vOns}9FMV6bSbIql(HR_7a z$}$A0o=PC zXMZJyD!#;Uge*oE{AcQEp1XgRe(w^KWW~bmKbjDHYqgj5@6R1Rhdi6(V3=9m;E=_9 z;4oX*%~48$tl)Dj_sS_NA-?}27H2n1o#H11OQet8PDv7%WQo{OA#xTwNivSKrB+) zwfK}A;w$jU*!(MQ@~?E9u|*VqlbtEF7cl>bn~jPZd-!Y~S{mKvBc!0vQS;b71lle1oqhEN2vRn$eIN((%I?MLql%Hb zGSiMdaE)OzbYWM}HP%1)=UkI;}2bz zYB6NRzJeWGCH6_(EgW~``IbfGNr+f3PA3!B@uuAeu;Y_5B8FD!f#p;Ib9y4CR47BC83m9 z$%Dgufb4j!Qf2lv7ugl$G+P~uu<=tm9yGH);K!Ncy0hfsj0ub-wd>-CG+hj#L#FD_ z^%n|!2t(QVW+nv1BN)Ket2#^({+|g$Q^;l|0dyS}ese`W5R~QZfZLi9fDldmhRa-O zdUZYZG5m!vU>-0KI?*~H1Rk30n%BbK&m zrWppAz;C~U%otU3R^3rGFB{!*!B3p~0h`I-X1!&E;ETho4*ELWo{i}T6Ok;0c{;y&XyO!!lznZaeRUcP-++gCGbnfy zHJbn$;`}N_VT-*tnJ!*D$8T(i>wq#_URHBIQw8hMLhRJ5vPuXLst_Tf zjXn(#;0IwcIw~8c-50J<#gvWA6Fnx8u<&chIQ*HH#xEl$tufA2S70f~ajey-v{XwD zl2Enk0cQrs)D=7GT!wVtwkKXfS9^ZcMnVcSj^Q;OcgZUiCK_7^HCREzz2bQ~{DjgV zO0UtWpgR)v)UvG(yQL%#KI5Coo^oDP`)7*Z^gyf(w-_9nikH3I9{nZFsg=eM&8gDd zG~I2=RsMHkMCG&5wa>?r`(Up)?$=AEK$bW(%UYc$^VxIxen`|-jI3(Tsw`^iehy81 zX%QWp+YjfoG>cRC2Om6t09mlaO;b6?UNo6szz=3;`jW>lUg1ktcW>`bODZ`f)!Qg{ zeB`AsxXArOCtBL;N!Kt>kn|$60E86)9e*Dps_Wo{2&6~9L$-flV_XH=*%l~W>?aa} zMEHp0DFF%^q6G)gBBl0|uP=Gp3$Kj)`*-(9EeW!vKC%i*t4iM)&B4xbx*!zqlZX`q z)Atc@hAyL{TlZ6bk}@eE90*Z@G$4RV+znhoivJ1Io&^a(J&7=)fB}8uTQJaaU9e#! zPGK|nLeWO0VuOhlpfNVhua`kFl!eqzMpvN{s1&R)Z~_jDb}ba z3y_N?F1S!vM}vRX=S#jsL>u=VLV%bDn2o627_}ePkPQGG%OEVG%jjr{txw-sq5qPZ_LcjNR#QW&@_Fd(Q z=+M}D`h0RfR50=uda|fHsSpqU06LBBRH>{omt-@Hf_65XM0ArTAMoS!Is;6>Dw0-BveBBVw;5Sn-hcLbs*wVLp!6jasWT+p4+Za7 zC+AFQD<{XerGxKV<^P80KU$hP7H>F@s%_UiuVz-i#@E1US|D6_og$NgFt7ZK8DvRR z{?2I2hij=1Vq~osR)l+o7l4c3ruP1wB&VCXg5G}U7JyXu3rEW0L4t3e6 z)7=cU81N15$5Xn+yG}isni=Yf!D|E;7z&LUr3v_Kd2@Te2vB%K-AvnQ?zwy%#X^m1 z(iU~6nrroq&R)mh&+u#1zZEAmD+JBQl!V8|+Dyj}>}p-5l%?#7020(F4K)UovXU%b zg8nbu3Nr=dNkwD|F{n26t-ded3`u)MKEG_E5wIyQa?#ae&67bSoVS{uc}@P6@PBBB zT5HsCj3WhQu^rtfZ2m`|ZLu6&+Pe@g$Zk@a(6jeLj6_sSbhoqpjos>U3Z2XTcOzCQ zepE_jv}L^{q@5qin;4i%`Y%olVlDHF%w&b9ZT{T$$`mVW;YnUtr&gv#A!-_f?REqJ z@rlR4Wy8KGif9^Y5{j0*#oI}9m=o}-&wU7FU2yfCp-q3NG2n7iYe~x!lCrv)<{H({ zf7)f}B>3ihb5vGXgMpjDhGOu|=1 zBySPO4YZUG21#(mt6kY__XuLAP@RP`XO$t{NiRX(eC)HCAAbNVc8=BD`!*XsT9R2Z z?iZ{&OkZYC+RFI6r_WDz)+3alV?lCS)wQeXFp1dx;HY59d9xeB87|l@iifIa$TM6p zfFU@)d5bL}aPOISk6#)BY<jTp#etpNWpv*Eo18~!mQ-}8A3>y}zht(sIL>P-Dc7PRdYghY%S971K9 z9cm?s1Zb|gB(1949V=CsM#P08tlMc-Ma^yqF7_PAb8ZqqcVU#>4bP#s4R zPspMpZ?zw6!Q-$fJ@lVg)~hYWlNoH*s|}|AdADZEo5%;4PC7%14s)y@9)%R}gs z-z8wU`MW^yS0GY^Pw_jN?r#9PV$df4B{W^Q70Y(>KLE+Ui36FQ^wS|RKlQxi9N)kF zB_8~fwD7*O{ha?pZrU8)7)?3LX-m7(#UQRp`nDJpaDiA zdAO4QN&+NFEJ~>eWoKM^^5?reKR^h?9tk1^nFR^J z->akI3%2;z)l+?SMSeanL>vikAdNo!uQN@Ify8`~boKl&C?=e$W$gQ&5x!o~{Aq}> znOG122z^^30i-=se|`uI=<-@Xduy&QAQ*g)1d)!+2N=hSz~KgBk=PWQhYuK;ngD_a zG4`$^S-T+0sn-=yHX+@KgEhhnkJ|F`Lu?GEQeOkl^mz(3!85-WOo`IiVyBFBbz+U9 zn+M$_3M4A>)~Cw$8maPAXCk(@@_#Tksb#E@HeWyH!(Y;eJA#o~eUm z#wR^`-mA>$QiSJ2TY^^%Z4nJi)YQRTQ7!`Km!KL61seA2aU#K-+6Lk0FPuQuB&p4B zfCPt1Qmm0I>?KXE4O8Wl$H2!#Ys$c26WM2a+W0uA2F_Of;oNEv3aVz+-hng)MA7!> zc{Z#V1}?w0q-Du`?|jVBhcrw{2v6!otC`enDu86JX^c}Cs53*T<`?R!MN1adoxMbu zWegr%*8w&_uc((Zfo|p|<608A2-pB2lM7thBBA=b2)Qy%H(CTS>vL4NERg>>lWHWN zPHJ6X|6mOmd@!gpuS*o;*HhV5(7oQhe=qi=_?@vX~f zONFWTE%~X6mp_-j*Nj_6Q`o<$SlV-+1*2QYM1FNI*%7en5aB6Nc7>WlTG6RV8Q05%pX@;53?+Yw6*fyRB>bHV` zp$*a~w$BKexjf-cJ~6|3M`^5yys;RK+>zCY*d8(xJgZ# z38(LMh~x}f1~h!12(1sV4{6BsRhdDrCl|OE(HEi$WeC>FDi}RGZi;rwf4BTM}AT!Q_EV^4Ea#!<`r@^C0Q-II58TJ3TW z;Rok6@*Vr(NHvdl4t!x!#QrLW*dV)yo9+>;yV-;HBF(YvPfH#OOTj)0YhpvRNW@HX7RX6bcAbDk((r*n&VQ4YtbH!sB z>d>Xf6?Ub$W6Hw!b_oE2!0wU8hzElF7*LQ^sP^{ihzwvAW6PRZztD_O@O)s^?vh&p zl;=>C{afV_iV&7|XrzcPz0FkC>Wa`sp(c<)rB1&&;wj}xk5%_f^=qX~C{_Y!)-VTo zYktg$zGW7S!O0rQ-($nlNt85QzKU-v!G0Zd^>1fWQBJ>B#h)FOf_F0LPYHopX)_T8J0$>9B)(<+Dj1LU# z{V?#9*y@Tr{oI8aq&IeSpsdEBySl#DDOkLnqb*~-H^pz=xV>QtM7~{nK^Yu2EE@BX z|3dlVk9y{`RYqeJ<9&}k%Ik_ZV*>K6^)wINzgs1pyi}_d9JT4j zr2p4No7rMpO0*=IB6bbbaYD9$m*7TU9(yiDypl3tiy;<))Cr+MPF9gK>jz8}tF>qH ztXJ~YO%9xL-iXD!|6U9K(tefy6)W;qzM+`~?+<}SNF$;+sFhar&ci}`ubKOd7R$XG zNy#%0uSqf5*iol>#GgQs@|CiF>2^An0`pd^p>$#%gh8$P{6?!o2nKRg3YDGD2M$@Qq*P}Kr-C>F&jTHDkK_D&Lee`Is#4k!f5u+TCv3b@QcY3^~L=)~Hd2n!v`qfk=A$arYieLf&i0tvxu zbpXyf3?v;&qES z^1M{Ea=439X9?uuo_j9>n`z%gaoHZkA8090Ee@eeqkBiG)csfxfE2%0QnsmV`F?^h3GNnOjnS`0jz z_kaBQzg^5EsA_yZ;tGpgW>ScZ3!HvO5vBiz&ms4^N|VLG%>jpn0RZHdO&(-!NlYF@ zvGV3z%qblKw&0K+tJz9k44Wq??l?Q8gU-9 zZa_pMM6#l)f)RPMit-+%6x6xqD`$R46E%miDbId-vbQM|zWR5OWdrdiadswTjQ&q; za-u4B2A|TIWuR$QB=;z;DwSQk)sV7D@{9aSDGf!v8|vJpy-pDOy)2bU=uN0^$b)==UmXGJsi&*y8V4 z*f?<|^|!b0sQF8C)>Uy0C0e5<-D7+qK5GsrpgJk^RutJY2HOv;032FrQ2SjNh0AE zC~L7HexlPeqsfOtiBy5!O+9MmyyraGi}3-r72D8Kean9dJo{&iu1hD#@M`XTL=utm z8u!|n61d<7YN{)v$!iAzWQJcv(Ie$~4<8uMpqVkrt!Q6?pxyFPr#F&aT^#G`I118u zZMA;nDj$`CHQPUa6I7ud7+mO&pzo`e`-kp1&0^3VOR?e0XiSCH-fFP1x#a^U(u+Ws zI~uqQm!l7nOe?KpNrVRi_^on$gaenHjjY3=)5 z!lE4>N|&6Ww7pW3U@r7ASgz0At-!!0^CLtK%g#|_R`Xwxd)jBFW41{5rR)$2b15vk z8Qd~F2pa9Y1itX0kG6r%hBgVJD=kttAsz_{xjv3#*mxczKiQ9T&~M+)u}<6Qmknog zE`Eao>0}5ur`f}7cev0i{9%N{|1N6EPq1Cw@eutpQ7$bs0e#Gr;kzi)WY5cU@5AU* z$78q|PXpEs6@R2@ArJwMbfi{{GvHBhlMo@HFV@XF4Ofjtq0dIfgpA^`vNV~>hLNnbK;eXO+VpO$f?Vi!yoR9Hi`4S7De#^;i5Om2;aL0<6JIx3p$1r6=s>VT$#7 zL;N~0`F@Wm8d`F(+5QJH(D|RTUZ2*JAM6pZpS_|gVu$}y@)wR>2xWv$Vm5XU7@-?V z-9t9beNmKp>a7a}{#0pb=QC}LlpkY9GO)`GfHG3T!ssOr77&PV%57QQ#r;w#iT$&+9 zcQB70Ey_Z#b=ljp4U#9=mK>!IPv0Vw z6W{-F= zO=5-&zS1CmXkGyGv&~MSZ{=K;+rco4X#4LFd>TjKJCjDwuf}pV5cMhohCs<}4pvpI zuKFhF_rmBqO6ntrA*H%SOv>CI3kvTr4JNquN@;=j=a6bM^B0jbnP_&+$JR_%msv?X zB{}X6=a9*LKUfk{Un&W*2Fh~xRw-6TRb2~_+*Leyu8Mrq?>a3a9#Z&6!HVa=+t_Sw z$hf%Wnj?@_bk@NRFGV^EPi;y&`TF=KaJM&del&VAzu+ML*{mRE3#;6r5zLu1YVxDx zKAUOaM`@%gFECwRA72j*iB}Ky#V$!wH0XlIep%!vNXB8qhONM-J1ss<7tuVV_9<^B zx(eUUsFl8%ou+d=;MVyONbe!5VtFbv97P%B^Ox4S+5RQPe2|@BRID@D=}oi`zxG(= z^Z3~LIt7e>tpUh;Q7g?S<@;;@()Awb%tb3Mhs}w^Y|&R&8o9PrCz07-$eywJdyG=3 zC*$y&lbY!_C68A2MrV_>75e>xiqqc_i>y|#1Y}lAZPh~4*7vt>30vE+w_U$ay|;AT ztgG?KRZPOE9G1PAm8#1sJ#p%Hh|)(L-Y^5NOtWYQj>?Mt$3?kTanmQVTdQ(5jWJE_ zGTYrqsj#s8MY2s;1afihx9P^~99+#=%X(W*bpbu<@WcnyR{Fq&kc=wcZz(M9p0z|s zn`8;pVq@$QCbA)C+fTkr}=v61D+w01yrUa>V8VO=a}O5 zmY1WY`hxA#Mz6*3S;6nTmxUyIc?V37-E7zaBiRg1Eb!{gF-=8i#8Cb7-*5dNC^hz5 z|3OBNbZ%~CF`ogvrGi_B-dOD0B+J_8NK^2J$N&xJ>os0`|)9x1_XDYI`-ii z5O|Tgn4c5^@#T?RK}}_XWKm-hrm({I#YwFyqU6aNX>I_O@{`-n(Aav%Yz;m!^~GQ9 z4cuhe3l%@$`N7rBZ_8Nr4h7RH+*b5gzcLB8pTC-0J7+Gz-=FfNPjUc-!-k)@$Y5~1 zTfEv^nnW~+)c8zDGgaIK6 zM`k7-*!GDzitmpZ&5!B%Mt zzD@Ky&>C3*qQp8g6z#%M+2Atei9^ z#E^Z(*s^v4Yn%_YtTq4NppQ_%-h1{k;FMyHM_!d<`&p@)x+AZ}zoKX}`<;PpwTdLH zU-z+YDi{tZPy*GpDZkX8?*CzGWpI(+{eUD zi0L#4C2ey3R$j1(6G7*POCI@Qc3h72a(MGmi!|u{Wp|Foda3=nZQI04^P$(8?0*5; hFxr&}zaGt(4`&rhQ190!Cj?J)pYEL~S(W~p`x`Q7HXHx| literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVerde.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07800372a1ae8bc82b4b513902200f4b4b900dce GIT binary patch literal 39991 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

    7JPv{8kJ3Ve-KgA9-+zDl{V&^i9Bz@q?l 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�hD4 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoLaranjaLongoFVermelho.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d033e8aa16606ffab66699283ca5ef1b9f53ca84 GIT binary patch literal 38815 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFAzul.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFAzul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4b15088816cb767fb1afcad333ab284965dee8b GIT binary patch literal 40725 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�f&{<2R2@xG#H!%Dg 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 z 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 NL3wZAVb$-czX0bvclZDR literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFPreto.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFPreto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e07f122bfa5192693896576690b7e3069b42bee5 GIT binary patch literal 20695 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�&Nj1^t)*Dflnou#SaRN7(Jjp8 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFVermelho.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoPretoFVermelho.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63656dbf3b88c3775b2905f7df0ed9ef62b6ec26 GIT binary patch literal 38207 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 z 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFAzul.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFAzul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c614554e5caa809c5e89d794ee3e13839d0bce64 GIT binary patch literal 42560 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%0Dh|0E_bfU!oQHm7#DS|L{%@$O)`s&k%poudUyl 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFLaranja.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFLaranja.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d38f851735bacc3ec4d8f17a0788d7b3d6353d1 GIT binary patch literal 42118 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFTerra.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFTerra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22a86207d34f141ec7c4eafa89dbfdca7024a123 GIT binary patch literal 41951 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFVermelho.jpg b/app/webroot/img/botoes/btnCalcularFreteCaminhaoVerdeFVermelho.jpg new file mode 100644 index 0000000000000000000000000000000000000000..417feeb7a992e4a98fbfffddceaf2bc6a3a3819a GIT binary patch literal 40833 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

    yk)oLGzI?Nbz?0>P?!J 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/cake.icon.gif b/app/webroot/img/cake.icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f29f72ebef20ce39a1e3721d31b76d9054b1dc90 GIT binary patch literal 233 zcmVOrfx~(a*Br=IF!2lMFyj!pzT(o0Foa zdn-*>Om~4(V_pR~MF2EGA^8La000jFEC2ui02BZe000D*@X1N5t>>`K@|6NJ6h&YL z1u`%~wUB3glC5+ga)976a!3oFOhFu(2DMubr5G5VhQ{x4NGt;hD1iW&9tgW!0iZB! z6O)6HG-waF&;)>@C@r&FLW6?XF3Wfe6jmrIZUbdo27(g_16K`ZTZ}-3IRcmfa});+ jCL}5ZNSK%y0t-u|r5FwZRfnys7YD7i0<9mpxe)+6uKiOz literal 0 HcmV?d00001 diff --git a/app/webroot/img/cake.power.gif b/app/webroot/img/cake.power.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f8d570a2e24d86f0ad7730ee8f2435fd49f152c GIT binary patch literal 201 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/entries b/app/webroot/img/icons/.svn/entries new file mode 100644 index 0000000..3b510ce --- /dev/null +++ b/app/webroot/img/icons/.svn/entries @@ -0,0 +1,708 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/img/icons +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +bullet_arrow_right.png +file + + + + +2010-09-04T08:55:28.000000Z +d42b83dffd5a6513167eb897a12d388c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1024 + +page_white_compressed.png +file + + + + +2010-09-04T08:55:28.000000Z +2334bac71ad516aaa9175fcf7d3a2a3d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +724 + +comment.png +file + + + + +2010-09-04T08:55:28.000000Z +a22ab82fb3a33ece38c3ab5e0844154d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +413 + +Thumbs.db +file + + + + +2010-11-16T21:00:01.171000Z +d513f10a5c2f4a804d6f3ec3af189e85 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +25600 + +feed.png +file + + + + +2010-09-04T08:55:28.000000Z +55bc1130d360583e2aecbcebfbf6eda7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +691 + +exclamation.png +file + + + + +2010-09-04T08:55:28.000000Z +e4dd51f46566ed3ceacdc900bf2fdf01 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +701 + +html.png +file + + + + +2010-09-04T08:55:28.000000Z +97d0ea08bfa5531671fe6e17ee9d1c09 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +578 + +folder.png +file + + + + +2010-09-04T08:55:28.000000Z +fbd3929a893b147ae0940d48d533e023 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +537 + +picture.png +file + + + + +2010-09-04T08:55:28.000000Z +d2040c34ba1ffd8fa5b72ab37be11eca +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +606 + +page_white.png +file + + + + +2010-09-04T08:55:28.000000Z +a3112ba7e266938321394347e2a6e107 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +294 + +tick_disabled.png +file + + + + +2010-09-04T08:55:28.000000Z +3668c319f4d607f5611ecafdaaa48e16 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +1154 + +page_white_php.png +file + + + + +2010-09-04T08:55:28.000000Z +48cda2a2a54a31f7a666547c862c12e7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +538 + +cancel.png +file + + + + +2010-09-04T08:55:28.000000Z +757aa607cbcd1616ced5a336e56b0e6c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +587 + +information.png +file + + + + +2010-09-04T08:55:28.000000Z +3750c701d2ec35a45d289b9b9c1a0667 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +778 + +index.html +file + + + + +2010-09-04T08:55:28.000000Z +1c7b413c3fa39d0fed40556d2658ac73 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +44 + +css.png +file + + + + +2010-09-04T08:55:28.000000Z +0999808b3c3ec19f2466371b96ddb69d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +524 + +bullet_arrow_down.png +file + + + + +2010-09-04T08:55:28.000000Z +6817b10435d889646ce9b3b22b9c16cb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +201 + +cross.png +file + + + + +2010-09-04T08:55:28.000000Z +42492684e24356a4081134894eabeb9e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +655 + +tipsy.gif +file + + + + +2010-09-04T08:55:28.000000Z +84c683bb61e04eed786306a59ae8cbf5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +58 + +tick.png +file + + + + +2010-09-04T08:55:28.000000Z +c9b528b9541e127967eda62f79118ef0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +537 + diff --git a/app/webroot/img/icons/.svn/prop-base/Thumbs.db.svn-base b/app/webroot/img/icons/.svn/prop-base/Thumbs.db.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/Thumbs.db.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/bullet_arrow_down.png.svn-base b/app/webroot/img/icons/.svn/prop-base/bullet_arrow_down.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/bullet_arrow_down.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/bullet_arrow_right.png.svn-base b/app/webroot/img/icons/.svn/prop-base/bullet_arrow_right.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/bullet_arrow_right.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/cancel.png.svn-base b/app/webroot/img/icons/.svn/prop-base/cancel.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/cancel.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/comment.png.svn-base b/app/webroot/img/icons/.svn/prop-base/comment.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/comment.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/cross.png.svn-base b/app/webroot/img/icons/.svn/prop-base/cross.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/cross.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/css.png.svn-base b/app/webroot/img/icons/.svn/prop-base/css.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/css.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/exclamation.png.svn-base b/app/webroot/img/icons/.svn/prop-base/exclamation.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/exclamation.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/feed.png.svn-base b/app/webroot/img/icons/.svn/prop-base/feed.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/feed.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/folder.png.svn-base b/app/webroot/img/icons/.svn/prop-base/folder.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/folder.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/html.png.svn-base b/app/webroot/img/icons/.svn/prop-base/html.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/html.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/information.png.svn-base b/app/webroot/img/icons/.svn/prop-base/information.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/information.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/page_white.png.svn-base b/app/webroot/img/icons/.svn/prop-base/page_white.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/page_white.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/page_white_compressed.png.svn-base b/app/webroot/img/icons/.svn/prop-base/page_white_compressed.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/page_white_compressed.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/page_white_php.png.svn-base b/app/webroot/img/icons/.svn/prop-base/page_white_php.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/page_white_php.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/picture.png.svn-base b/app/webroot/img/icons/.svn/prop-base/picture.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/picture.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/tick.png.svn-base b/app/webroot/img/icons/.svn/prop-base/tick.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/tick.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/tick_disabled.png.svn-base b/app/webroot/img/icons/.svn/prop-base/tick_disabled.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/tick_disabled.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/prop-base/tipsy.gif.svn-base b/app/webroot/img/icons/.svn/prop-base/tipsy.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/app/webroot/img/icons/.svn/prop-base/tipsy.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/app/webroot/img/icons/.svn/text-base/Thumbs.db.svn-base b/app/webroot/img/icons/.svn/text-base/Thumbs.db.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9e5fd0f291945bf302ab5a2ac851e9819915877b GIT binary patch literal 25600 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%0A~OToCI6| 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 literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/bullet_arrow_down.png.svn-base b/app/webroot/img/icons/.svn/text-base/bullet_arrow_down.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9b23c06d7b4f4689dc8c9fd4e9d4d1f199fe376f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM-`@i?U z_W%6<>VNmY^FQu?=k0EK8(;qS{{MRQfQxhfe|^4DBSLrMi_=~IrT?G*6aRH>fZ%Fr xHSdzT`JeW`iC!n;=N{%MvhUm!=_W-^hCUIl<$=usRzPbQJYD@<);T3K0RSKzPZ9tC literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/bullet_arrow_right.png.svn-base b/app/webroot/img/icons/.svn/text-base/bullet_arrow_right.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..646b9bfa3d203bb5484655096d0b950e3bd8c239 GIT binary patch literal 1024 zcmV+b1poVqP)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+Vo5|nRCwBA_|JeJG7L5aec$TO7b@aW zFysH6|5e{|*Q1P%qe u{_py~=*wgYoNhSqfBVI$di06l8}0000FS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz4%P)i2vikyMR~)n*keF9=!Gc_n*K2@qsNT?}H4v4a974 z1ArVJApZ0B-@pGKzWw|E^3%Wn&p!V9|K$C@{}12&`+x7vzyG&i{r!LE6~yrB1;;^# zm?0Y=moxPMSn>r>N00000NkvXX Hu0mjf$^yWL literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/cross.png.svn-base b/app/webroot/img/icons/.svn/text-base/cross.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#`ZKMgf6%T?Ed*Cat6T(z(gze_Vj!CM zy6@eO?#%UBLOT}?40F9R=iD>%#+We%%UB#s+R_AGvw8Yw4_Zs>2F6fS)&oeXpp>-P z(4Hm2FoZ|N+3e;VNHZ};&)gBvnMk6jHRTlU@9U0$Oo&egxTGs^ATns~z)sFnC~aG*pjzb8G=xt@DLRNB;YZL<4tG!V^NUq+~Mv ztN7=;N57-Juq!r;ZvU(T-}ZaSebaUsBWyIhc|_vmN(Q*NXt96)H+}<~rjN#0$9Ug7g~-`rQ^qx~m@y2OU8A z#zh~=7n#Z$Z*fx-GOtDf07cgx0suCz_W(2~Y(0tf@FX@P6EPuM_dgn$vj9LucO)%W zw%HgMW>=#oL>nZ>M&NEf08>)#)k<{$fCT_r>rPi=BV=hFh6WS^qqze>C6Ek}o{M5% za|@JGowu0t{&hgNzySHZxy@LTNh);YzZ2zSp_ zl$^T&Dnc|NLb&RD_!4>pt@VHdP)ZGER%5ZmWEe$lryR&y;2u^3cOkO4#6c%-(EY6a{600000NkvXXu0mjfxS2AI literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/feed.png.svn-base b/app/webroot/img/icons/.svn/text-base/feed.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..315c4f4fa62cb720326ba3f54259666ba3999e42 GIT binary patch literal 691 zcmV;k0!;mhP)bpQb1=l6TxbDZwj&S={?7%qx-u`rsG(Zp`-rh=e^=%((1yvsuf5d=&62Zj)Y zH&JviNS_F4_Hj|T(1j4$p-!}kixP9&dB4uv^MveG?dGf%sUCoc2!IFxD6wHRA2^dX zXRVk!-qSfk(jcaUKn#RP48(whfPlJUpApdrA!TQi_4D+fVoM;3I0gZ8{=Xv~Po;geVA+Em9@0Wq2 zr>OTZEGR05L=gf1T;ucCxq6Q6EgJiH@@-lVaAlQyw`jIF^c=&IVnj|95hHbE_cnt| zTzZQ?F4Ne@(bH(~&3nM%m)I@ID{@jJ2qZPjr)jhpe9hViOwH5k&|T#EmmL3(vHeUQ zq^!t^Al6JD;=mHq^Bg?J-8-zG2Od7gZbknG;K9czYjPqG*xjPo0k(c4%lPXTpw(qq z@aGMnxtFS(np+2kC} z7P02O874ZkJH$v#nCUVx$({yDN`IX@o2wyvTD#e`qN`_w5<}$3F+_x(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWdis)>+`f+#3Rv=dSV4I&~|Vk?LiBG~#L1X~NSQGbAyogj#ie_$n8 z*oYwUieR#5zw>=_v)By?+NE%sVPM|5yzfjE5$wfk_Go)9(A<0e{hvFiJ0eb2MFf%t zDJxl&RDw>Nl#~WweRba-&_F#fn|ifCG!S=00#QfIDe64k{5mZFusu=CnSq>Qvt$j5 zI$4b(K~|@Tvozn3#yaJ|Be;BKfh@+AwFR!7UF7D*61OfavvGQ!VN-Ga+zO*%#qEoS z8E0dX4NpRyRS|XCrXq{e4r(61{zg^7gBPDUwmjg}k(Q%NLkD6fm6*tZ=)6^ARRw9CNHr!!-b)EovamKwdDMpr>=!|-tf?S+boQE&JP}G_9P5@nR zSOjlBPI$jHA&U_KsTjQko(uJ_ROpKn!K^ckXTHmZd+_Mh7C&~BUYvvb=Xi2w6%i+L zP+hwJF0QUE^66)$h?CXHvdjEbu3a_69GS^`e5Gac*$0~K9VHcGVKhe>RE(rT+Ca5J zv_?D-3(OpKFrQAl`$E;pyKkaTN=V?@iK2u!kqwFy=F?aM-2b}R>c4;EZ`t2+*gqpJ QK>z>%07*qoM6N<$f@8}2CIA2c literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/index.html.svn-base b/app/webroot/img/icons/.svn/text-base/index.html.svn-base new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/icons/.svn/text-base/index.html.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/icons/.svn/text-base/information.png.svn-base b/app/webroot/img/icons/.svn/text-base/information.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267 GIT binary patch literal 778 zcmV+l1NHogP)BVme|mWaqy4$_pJm?y9KM{-*hp?1+Ey3e-CEDooTa!B;e(Q>TSF?bj>5At13y1p zriN3w3x~5SfZj{@J4M{kp{?=M_Lh2bV+5LH)Q)5W!-ePA$RgE1@5f1cyHki0Y}JyVEYZF(LD$xXlt$7A5CgE@ zpV-&l%vf;=5kZ2-2gi@Y6J&=cuwt>!vJ^#(&n|LcZyUzi6Duj$$hJ1s*HD-#;k-w@ zpdrwAuoDG_N2bvb07G$Zk*?Hc)JLtW4yqOnic_$zO7NZ#l>Fm){;fE?b$IbOaX2fe z0la4g0Dfw2xk7Wi7NapVD8YMPCZu?A1QCK*67dgsvRKBLFtrM>?$%&_lD1882mzdO zWPdw5KWw6IT`m1b_8=lS5jt8D3=RDa=&jWzR-)S@56WMslZ~mKu1)-wpXB>rNBQ>N zU#K`#1B&v|_AQK;7I~B}OdGiUT9LX>f0xm6<;LeP!=vFjPsUQF*wCJ*dO)4YBypgdiuF!=i@6Zyi7F|q#K zz?tlSZULa@t1D?$e;f@b36&N!V2mjOHw|*C#5QQ<|d}62BjvZR2H60wE-&H;pyTSqH(@-Vl>|&1p(LP>kg~E zYiz5X^`c$+%8#zC{u)yfe-5 zmgid={Z3k(ERKCKrE7DF;=x4^O+ pzO8rLO8p|Ip=x)jHOtWj`bJBmKdh_V<`47(gQu&X%Q~loCIFbEay|e6 literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/page_white_compressed.png.svn-base b/app/webroot/img/icons/.svn/text-base/page_white_compressed.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..2b6b1007f33dceb8fefd5ef0aa8fb5aeba0ea3a5 GIT binary patch literal 724 zcmV;_0xSKAP) zJ3A|*qoWOonz+4ZQ0KNhDB07SX1?#FrNy8%K)_l}y&kh`*KYdy`Y99&tgNgMLSSrc z?B?+B@HO@P-jS~z2Rgc6yy~Y~%>oJpBxsb$5<&nRLqiuR7K=@0SZj~jTs|sv_jWVX zGe?WflejOaq|Vec=s9+ahmXbyJ|T)Sl*?s82sr2H?Ce~HD5WI+Sz&tmWrN()wI2}+ zKqg92t*l^-#ae~;9%KFlWkmwnY=-UK`_|%ICZ#P1gdjK<2n38VXsuC7{WiU!fZFmm zW~Sda9(Qi@pxO}$ARY+;t##Ao27usOqNt7Hwq6K7G1il@xitj=LIM&{N&#SuX;x4x zmG6FhCg-$PI;hQ=;1iZ>F>^~@)IPi;l}fX?SZ!QiO=X<|pSVkNpJuLHzW(FT_~W-v z?vFpkyE>8ee4d=7wKauH5~dd_M7d2Aa=ICC{Nj7Blqv&DQEP#j_VeWV&WXL>c=LLK zsmYg^_JiDb;%U!UxO%qjFAvsDFj-kzT2$GbV(ZopPM$i$z`!7jvEk07BcC=6FMt4` z*0u3Sy`0b~%#(0000K literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/page_white_php.png.svn-base b/app/webroot/img/icons/.svn/text-base/page_white_php.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7868a25945cd5e5cb7daaca9591927511ca65c0f GIT binary patch literal 538 zcmV+#0_FXQP)vYep8SaFV10Q$h+;hIUPX_=v5b}%>Tm<(&j1&5;I!55C)oN0s(P%ZB zP3Q#ahfpXKWF@S?jm4U#fv)QovMhrriclyNs6-G12#3R##4PSZ0VY(dRWJ;Lwuq{# zAW0Gwi$yA^R4RZ!;W+L`f&%x{=D^VK#BBWL4Ys{;*!A7Q;!=dN<&D8*GzGaF4`hV4 zDbY0{NrMX>ZqF=0((gR5-zL$kC*b)!fwu{Euru|XrG<$^n#@)7i_>rCmRxnDq>$Y%gJaCkRd|tE*a2x05Pe!I^e13o69#&RQZ36s0 zB=O|K2Yi(jsMqThn}9t?f5E-)L^naZ+db$&%M$!bCdm=jv7?t_lB?3&%Ltq(>ESw? c;MI421LCcoDG!2@;{X5v07*qoM6N<$f`UZt7XSbN literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/picture.png.svn-base b/app/webroot/img/icons/.svn/text-base/picture.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbHs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1pU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+Eemp{fKy-VV*#8n=x@M8uHexS|k2UJtzA5AIrj zc+7+eHjTKf5JX;b?mS@1AnvxVoiQOHHuboq{@--74)6RB@PvoY7kz5WHAV!v)ixdx zApt%;s!368gu2mJ+!OGLMI|{>TS{K)bNX16lY-ij`cyY5Eee^GEs8py*<;Ps0EPh; Um%50t@&Et;07*qoM6N<$f&vTjoB#j- literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/.svn/text-base/tipsy.gif.svn-base b/app/webroot/img/icons/.svn/text-base/tipsy.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..74eebae2d556220c31f8a255a93b0a8f091a0b70 GIT binary patch literal 58 zcmZ?wbhEHbkiMH{6k);cGnd{85pbq D1PBXP literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/Thumbs.db b/app/webroot/img/icons/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..9e5fd0f291945bf302ab5a2ac851e9819915877b GIT binary patch literal 25600 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%0A~OToCI6| zSHKN$2Rr~z08Qr&u@B%2_yPVv01yb^fKvbqDE+8*fA}jXVEg7%fkP>aU?cvLGzW`r~I^^)IhK&KExK^$OX{q{#QMw;@`%z#^oEbtnDy z#LSbAs$)gF&rW5@^wN&f;XhIxH)&6u3k>I1Y#YTq8ms9 zB>Uj98FP8>Rb!@3qZ)PL1*Vs|E7hFKl};VK6g)^ZrXBILemz0ysg=N@u(y>(Bes}d zSJi5VF;Cp$Q{K0y5`^~4oNuQo&wi0PfhPtzPVsW@7R*05k@g%n5Y{?9;-C7#+Lqa4 zkE-Xff4aad>Gv`}=s#$``A5Q!+<#$)0#)I7(SY{ZeB$pxQA#@*!)UDooO@g_qU7I8%)LEJzlIzX98#VX9lW=D;88t4 zNwa}ud)-lkw_%f)m-Jl$#{Pk_oXLY>Oau|@L%En=d%C&f8#$3 z^!EwX=cgHj9|rNQ*nd5#^B$EDdyBzkd3nEM3C7wNip7XY<-Y!{2Q+WqxuH{=?OZLQ zsebbrt^Ly~<`XTJVVCeuO8U8{{Y51wI(lOC^S6bB7#Q8FaZOlr=7GNx+#)=mDAVA4 z*W&3%*2}w|)wrFIeG&3-pg%v$LRgGPEg|kxVRXhFr!;A-_M%peMAAPEE#NBg`(ep{ z_?P`>dHuj|EsXd-T0g*ARMPD6#Ld!l`ok!1>z*PDvE-)Se9)j8dZMqjA3v(H;RGTp zo08?gx8{Ix!}OE&o+SZy&ELLb*qAxJGV>u5M^;uSqugc9kfUo#&-i*|hVy!}I2u?U zvX|eJ?wCWZ>9H!=#UX)3sj%YdQQL!~t5Q!=;5R$&9N*v8RepOoHZx;5!g<2tIZHXJr?4=o{s1O~bU2nU=RjVbZ%2=7)xtE;j#*J1zN-{j&co`_F&Yf96(K zC2l6fR(-sXDEewjpS`B%!j$Oayhe9b^<937ug&S+ZM00gaJeYN+K#^3LHZTNi*O?~ z9s+HZ6;+^=_kr@bj~A^fR|^O^>N%NgfBZVV$Z2!>HR}s4W@a-w#SZt4R4u(ISFDdr zAqIDs2>LS;uk~K@D-YzraUFCV^>Ryf^o(<#4ZW!_nfoAPCvS1h>N;D-a>uO3l@$@q znBWrTq5uNEckrCro?a|n!C7fFWhd#)PR<|pCN@kPpYezhF-t44pD*g{EFp3}Dj5^ao%mLyUGl#X5T*W( z<3Cg<{UhN==D$0jK;mZ+@E48tkCu;W)~GK1z4PCFU_1Avd{iI)BjHEte-H{>(m!NB zE7(7N1S??vPY=n_cKp5dw+CCTFZ2K9^^f1Nu=D?D{Gv)=zT}=we^=D7P_fME-Jx|} zQUyFcn$sMKs|kToc-4(rQ+_F4SjMV%+Hz`sM-evJZh;V$p*p210hT6`OR|2NgPzdE zz59<_oVfS!{rfk{N2Y`(RtjA{LG&wc$DLDfw3OJDucyan+rh6_|42B|>_Uz3gs$-9 zR>A)n>o4_xV}H~BZ@K;d_uBs!0`8(z5l_#DOzSbeOPBmyPv6Mf*QhvX$W48^IXEyH z6I`@C-8)+=zu7$_wdnps%ZA#d2x@`tlq=C@J|Qm1MfCR0D4#Vqiy!HA4X$e|u{Sa1 zKYDCzu1Rfe_rj*qxh+G5h608=Up#o$S=7ky98vG7EVvcDFG;cF0ZZ-wNA>e%{d9T# z`){o5|Go9^^X0u(6*zW(1wv)sbRV5Z&&Jm~`CY_#l%Mz4zrAwgJoTt8zbki0QZSBH z?FhlD*TQP(jyoBlHD!xRz0M(&WhAdbs*AR!XulMe8ai0f6%@Fcm`+e+(wK3-H@@=$ zUE~1mfm2#*wh2B_^)KB-c|Kh&Dlcb|$6ty7D|>O5CQXN0S%(FX$69fY8Nmk8R4a?k zCkp62Z`)F=QRzN)ySKoipuEk~?&@pAOzm&+ zT7mg|6wz_t>kZA4O$J+z2K8SmRJmNqf2$&<-OAyL^_zDq)g5K<%;ij8T7ddJ<{y)`xcw7 ze!LOMBNB0Ra($3+)NK5Yc(cTfu0=mG3s|~-G5?_d$^8lQ4|LwK6uzepUSP!cW&R=mCzOw_O@g1VefRw564>tj zQvRktq5P$~qcLRtyCDuNmhS&5{0Zfw>#@+aSl?TII@n^q)c-VWp8&9e^Tcpw3|1|$MWz;z%QxB;X9 zsX!WV6F}45g7`LY2gm^K0+~P-kPX}e?gI~i8~{y|2XQ`706YX90foS0pa^&Z6aytd zDS)OagSZ^104jkhpc;4v)Bv@>bKnJl+P{Rj9(W5h0F6Ks@ET|aT7XvI4bTR(106so zfTo{?xC`h8dVpR45A*^3zyL4^ya$E=G|dNyM}Sda4EP9)0|a0Km;|PPXHg?UN-J_0&Mfx{ID$^1}{XBRI3xC#ka&f-(T%;mWhFLtR5U=J@ zXFZfCK-e+&h}!|A70cFJ#ja1m_?RZ*rZf{%~gYJUc;fix?>|F zxsxS_TGac4l9eB+?DTK=&Wq}CST*ScD=Vd8HKp^HUw{jP|4;!-YZUEZRi-Vh&ivYD z9qgw5%Eks(V7h%{Ar5-Rxke?N-Bz1)s7V(1Zqn~5vZ%Ww;DOY}1YFES_&IEd9zCOwgke2SN^fsSM`*p45 z!GiuPD_g`HYH|XO&IxdboUu^1uk%G~&+t_WJFqwbHL!*JzqUhjX8g*|9`dpK{0X{# zbQ^qOe@Fd(S-<+P=~wd%y;hY02h0iCGpmwtF6m|gkLR~=Jn#zBO=a`Ju740XNl`Ag ze?4FYI4A+OvL#xtnDqdH3gn!}{X)5C5e=9AtZ()G(9Bagc*0`3e zW(L8lC-{7k6u!K7ji^?XMbjR zH0r<0>qnNKKk=In*7(1<|1z&yeMr6d)pQL-oX>i%Lbt_u4*^O`J+?dN`;8EB8Rx1T z4FUhXui=kGWEf_P`qz-L3IV}EC- zte(ZjtEPOnj~cJKTwvsqAlsWkr0Us4+-@G^sMMTwG|unjkc*AH7V;=a%k?9D#A%-S zm)`h9vHjW8i&(!m6YVX=B>^9?nCS2|W!XwfN|uGA3qDD|J(yYYpH0ixzh(XHKdZmN zkE0JRTxT~fZvN;m*PVgmHeG9SW^QtSe%@-TIz1yDqo4A5jbiN&pRSd)tVX5;nHR;| zyc2uJXc~pbvoE@T@Nw>MD$tZXuq|Z2=D?1QgA&Qx6XfN1s7eHT>)Wnrw6|k}{R3!E zyT@-lP;<{op66O=(rCo}h*T|G-L!z~eaOSb89$koB)JBEK9^o8Pke=O-0TGp3Ek1= zQT)Yr?nrHWbFm}aTne>1btPZ8MDFozHfCK(k z{3qy7Uuz8L<^K0VE*L0$o?s#Hi!r(1Gyj+SVg1AB=h3l)6?z>1()i2Hrx1@*{_;lY zkC*>%KY#2M6une`~v_l8L{S$i^x>*_0Rv@mTlpi?dKG&oItiBDFn{HLGp zbx&xj`wm7B>d$NrP(2t_Up{y4E=xt1LSfX_v>o>BWh(6zt7&wRg?9lnfn511$^Ki4 z#}^9(;+@r^8Bh>RtPY zlev3B<}NbgHoaIpTL0}>WU2q`gZA`y>_308y_c)c z^L|@j9bi&n#g==GuS`+zR-4*cwY?ARyQ%4<&B#c9h;Bq~M2s*aTWwx60oQH!WJA$r z<`wPRZ)x6sQR8Os=GJ#f$t~u}{r+xY+Z3L|TifrhVs8%Q@|S8VUj06snvHM4eB^Fi zScW)FHjqdm3A53CG;gO-3(FL-M?@SZvV%AI^ z#KhFT>ie|ft+C+iY@*Jh68y|cjff*7=lW;K$i`a)LDDr$dHp=Q8a!V!t)0_16Zw^^ zd~Wf-{Henk@BjAoN99kLf1>kFbUOLH^Uq?l&d;CL)MvBbf2hkWE7|Fv#vgh0)o(2-lGt-YS3hmpc-yo_w4Nc0 zx0ms>$a4(o{sno(NIL7SNQ}|lq>vDVkBSu mV`=(#HU(7q`g)XsjzrKE0QNB2I0Da>Le~d;yLRF0jQ<}*0N&vM literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/bullet_arrow_down.png b/app/webroot/img/icons/bullet_arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..9b23c06d7b4f4689dc8c9fd4e9d4d1f199fe376f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM-`@i?U z_W%6<>VNmY^FQu?=k0EK8(;qS{{MRQfQxhfe|^4DBSLrMi_=~IrT?G*6aRH>fZ%Fr xHSdzT`JeW`iC!n;=N{%MvhUm!=_W-^hCUIl<$=usRzPbQJYD@<);T3K0RSKzPZ9tC literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/bullet_arrow_right.png b/app/webroot/img/icons/bullet_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..646b9bfa3d203bb5484655096d0b950e3bd8c239 GIT binary patch literal 1024 zcmV+b1poVqP)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+Vo5|nRCwBA_|JeJG7L5aec$TO7b@aW zFysH6|5e{|*Q1P%qe u{_py~=*wgYoNhSqfBVI$di06l8}0000FS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz4%P)i2vikyMR~)n*keF9=!Gc_n*K2@qsNT?}H4v4a974 z1ArVJApZ0B-@pGKzWw|E^3%Wn&p!V9|K$C@{}12&`+x7vzyG&i{r!LE6~yrB1;;^# zm?0Y=moxPMSn>r>N00000NkvXX Hu0mjf$^yWL literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/cross.png b/app/webroot/img/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#`ZKMgf6%T?Ed*Cat6T(z(gze_Vj!CM zy6@eO?#%UBLOT}?40F9R=iD>%#+We%%UB#s+R_AGvw8Yw4_Zs>2F6fS)&oeXpp>-P z(4Hm2FoZ|N+3e;VNHZ};&)gBvnMk6jHRTlU@9U0$Oo&egxTGs^ATns~z)sFnC~aG*pjzb8G=xt@DLRNB;YZL<4tG!V^NUq+~Mv ztN7=;N57-Juq!r;ZvU(T-}ZaSebaUsBWyIhc|_vmN(Q*NXt96)H+}<~rjN#0$9Ug7g~-`rQ^qx~m@y2OU8A z#zh~=7n#Z$Z*fx-GOtDf07cgx0suCz_W(2~Y(0tf@FX@P6EPuM_dgn$vj9LucO)%W zw%HgMW>=#oL>nZ>M&NEf08>)#)k<{$fCT_r>rPi=BV=hFh6WS^qqze>C6Ek}o{M5% za|@JGowu0t{&hgNzySHZxy@LTNh);YzZ2zSp_ zl$^T&Dnc|NLb&RD_!4>pt@VHdP)ZGER%5ZmWEe$lryR&y;2u^3cOkO4#6c%-(EY6a{600000NkvXXu0mjfxS2AI literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/feed.png b/app/webroot/img/icons/feed.png new file mode 100644 index 0000000000000000000000000000000000000000..315c4f4fa62cb720326ba3f54259666ba3999e42 GIT binary patch literal 691 zcmV;k0!;mhP)bpQb1=l6TxbDZwj&S={?7%qx-u`rsG(Zp`-rh=e^=%((1yvsuf5d=&62Zj)Y zH&JviNS_F4_Hj|T(1j4$p-!}kixP9&dB4uv^MveG?dGf%sUCoc2!IFxD6wHRA2^dX zXRVk!-qSfk(jcaUKn#RP48(whfPlJUpApdrA!TQi_4D+fVoM;3I0gZ8{=Xv~Po;geVA+Em9@0Wq2 zr>OTZEGR05L=gf1T;ucCxq6Q6EgJiH@@-lVaAlQyw`jIF^c=&IVnj|95hHbE_cnt| zTzZQ?F4Ne@(bH(~&3nM%m)I@ID{@jJ2qZPjr)jhpe9hViOwH5k&|T#EmmL3(vHeUQ zq^!t^Al6JD;=mHq^Bg?J-8-zG2Od7gZbknG;K9czYjPqG*xjPo0k(c4%lPXTpw(qq z@aGMnxtFS(np+2kC} z7P02O874ZkJH$v#nCUVx$({yDN`IX@o2wyvTD#e`qN`_w5<}$3F+_x(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWdis)>+`f+#3Rv=dSV4I&~|Vk?LiBG~#L1X~NSQGbAyogj#ie_$n8 z*oYwUieR#5zw>=_v)By?+NE%sVPM|5yzfjE5$wfk_Go)9(A<0e{hvFiJ0eb2MFf%t zDJxl&RDw>Nl#~WweRba-&_F#fn|ifCG!S=00#QfIDe64k{5mZFusu=CnSq>Qvt$j5 zI$4b(K~|@Tvozn3#yaJ|Be;BKfh@+AwFR!7UF7D*61OfavvGQ!VN-Ga+zO*%#qEoS z8E0dX4NpRyRS|XCrXq{e4r(61{zg^7gBPDUwmjg}k(Q%NLkD6fm6*tZ=)6^ARRw9CNHr!!-b)EovamKwdDMpr>=!|-tf?S+boQE&JP}G_9P5@nR zSOjlBPI$jHA&U_KsTjQko(uJ_ROpKn!K^ckXTHmZd+_Mh7C&~BUYvvb=Xi2w6%i+L zP+hwJF0QUE^66)$h?CXHvdjEbu3a_69GS^`e5Gac*$0~K9VHcGVKhe>RE(rT+Ca5J zv_?D-3(OpKFrQAl`$E;pyKkaTN=V?@iK2u!kqwFy=F?aM-2b}R>c4;EZ`t2+*gqpJ QK>z>%07*qoM6N<$f@8}2CIA2c literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/index.html b/app/webroot/img/icons/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/icons/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/icons/information.png b/app/webroot/img/icons/information.png new file mode 100644 index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267 GIT binary patch literal 778 zcmV+l1NHogP)BVme|mWaqy4$_pJm?y9KM{-*hp?1+Ey3e-CEDooTa!B;e(Q>TSF?bj>5At13y1p zriN3w3x~5SfZj{@J4M{kp{?=M_Lh2bV+5LH)Q)5W!-ePA$RgE1@5f1cyHki0Y}JyVEYZF(LD$xXlt$7A5CgE@ zpV-&l%vf;=5kZ2-2gi@Y6J&=cuwt>!vJ^#(&n|LcZyUzi6Duj$$hJ1s*HD-#;k-w@ zpdrwAuoDG_N2bvb07G$Zk*?Hc)JLtW4yqOnic_$zO7NZ#l>Fm){;fE?b$IbOaX2fe z0la4g0Dfw2xk7Wi7NapVD8YMPCZu?A1QCK*67dgsvRKBLFtrM>?$%&_lD1882mzdO zWPdw5KWw6IT`m1b_8=lS5jt8D3=RDa=&jWzR-)S@56WMslZ~mKu1)-wpXB>rNBQ>N zU#K`#1B&v|_AQK;7I~B}OdGiUT9LX>f0xm6<;LeP!=vFjPsUQF*wCJ*dO)4YBypgdiuF!=i@6Zyi7F|q#K zz?tlSZULa@t1D?$e;f@b36&N!V2mjOHw|*C#5QQ<|d}62BjvZR2H60wE-&H;pyTSqH(@-Vl>|&1p(LP>kg~E zYiz5X^`c$+%8#zC{u)yfe-5 zmgid={Z3k(ERKCKrE7DF;=x4^O+ pzO8rLO8p|Ip=x)jHOtWj`bJBmKdh_V<`47(gQu&X%Q~loCIFbEay|e6 literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/page_white_compressed.png b/app/webroot/img/icons/page_white_compressed.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6b1007f33dceb8fefd5ef0aa8fb5aeba0ea3a5 GIT binary patch literal 724 zcmV;_0xSKAP) zJ3A|*qoWOonz+4ZQ0KNhDB07SX1?#FrNy8%K)_l}y&kh`*KYdy`Y99&tgNgMLSSrc z?B?+B@HO@P-jS~z2Rgc6yy~Y~%>oJpBxsb$5<&nRLqiuR7K=@0SZj~jTs|sv_jWVX zGe?WflejOaq|Vec=s9+ahmXbyJ|T)Sl*?s82sr2H?Ce~HD5WI+Sz&tmWrN()wI2}+ zKqg92t*l^-#ae~;9%KFlWkmwnY=-UK`_|%ICZ#P1gdjK<2n38VXsuC7{WiU!fZFmm zW~Sda9(Qi@pxO}$ARY+;t##Ao27usOqNt7Hwq6K7G1il@xitj=LIM&{N&#SuX;x4x zmG6FhCg-$PI;hQ=;1iZ>F>^~@)IPi;l}fX?SZ!QiO=X<|pSVkNpJuLHzW(FT_~W-v z?vFpkyE>8ee4d=7wKauH5~dd_M7d2Aa=ICC{Nj7Blqv&DQEP#j_VeWV&WXL>c=LLK zsmYg^_JiDb;%U!UxO%qjFAvsDFj-kzT2$GbV(ZopPM$i$z`!7jvEk07BcC=6FMt4` z*0u3Sy`0b~%#(0000K literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/page_white_php.png b/app/webroot/img/icons/page_white_php.png new file mode 100644 index 0000000000000000000000000000000000000000..7868a25945cd5e5cb7daaca9591927511ca65c0f GIT binary patch literal 538 zcmV+#0_FXQP)vYep8SaFV10Q$h+;hIUPX_=v5b}%>Tm<(&j1&5;I!55C)oN0s(P%ZB zP3Q#ahfpXKWF@S?jm4U#fv)QovMhrriclyNs6-G12#3R##4PSZ0VY(dRWJ;Lwuq{# zAW0Gwi$yA^R4RZ!;W+L`f&%x{=D^VK#BBWL4Ys{;*!A7Q;!=dN<&D8*GzGaF4`hV4 zDbY0{NrMX>ZqF=0((gR5-zL$kC*b)!fwu{Euru|XrG<$^n#@)7i_>rCmRxnDq>$Y%gJaCkRd|tE*a2x05Pe!I^e13o69#&RQZ36s0 zB=O|K2Yi(jsMqThn}9t?f5E-)L^naZ+db$&%M$!bCdm=jv7?t_lB?3&%Ltq(>ESw? c;MI421LCcoDG!2@;{X5v07*qoM6N<$f`UZt7XSbN literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/picture.png b/app/webroot/img/icons/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbHs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1pU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+Eemp{fKy-VV*#8n=x@M8uHexS|k2UJtzA5AIrj zc+7+eHjTKf5JX;b?mS@1AnvxVoiQOHHuboq{@--74)6RB@PvoY7kz5WHAV!v)ixdx zApt%;s!368gu2mJ+!OGLMI|{>TS{K)bNX16lY-ij`cyY5Eee^GEs8py*<;Ps0EPh; Um%50t@&Et;07*qoM6N<$f&vTjoB#j- literal 0 HcmV?d00001 diff --git a/app/webroot/img/icons/tipsy.gif b/app/webroot/img/icons/tipsy.gif new file mode 100644 index 0000000000000000000000000000000000000000..74eebae2d556220c31f8a255a93b0a8f091a0b70 GIT binary patch literal 58 zcmZ?wbhEHbkiMH{6k);cGnd{85pbq D1PBXP literal 0 HcmV?d00001 diff --git a/app/webroot/img/index.html b/app/webroot/img/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/img/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/img/screenshot.png b/app/webroot/img/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0942475c1a3da5034208f29922af4e7d9364e9 GIT binary patch literal 31398 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 + } + if (Configure::read() > 0) { + echo ""; + } +?> \ No newline at end of file diff --git a/app/webroot/js/.svn/entries b/app/webroot/js/.svn/entries new file mode 100644 index 0000000..87f2b58 --- /dev/null +++ b/app/webroot/js/.svn/entries @@ -0,0 +1,303 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +jquery +dir + +admin.js +file + + + + +2010-09-04T08:55:28.000000Z +41354bcfcbfdc8ad354014198002149b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2513 + +croogo.js +file + + + + +2010-09-04T08:55:28.000000Z +8080c1c43e723f55017d61890b0fb09d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +101 + +nodes.js +file + + + + +2010-09-04T08:55:28.000000Z +1b955c51e47055b04d694742f9374ff9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2864 + +terms.js +file + + + + +2010-09-04T08:55:28.000000Z +f68f410d3a409123f311603751273bc1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +627 + +vendors.php +file + + + + +2010-09-04T08:55:28.000000Z +83fa759136ccba430ae4a2d52cf9fc7f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1397 + +index.html +file + + + + +2010-09-04T08:55:28.000000Z +1c7b413c3fa39d0fed40556d2658ac73 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +44 + +vocabularies.js +file + + + + +2010-09-04T08:55:28.000000Z +d0c03706116552d37760f392f769a1f3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +697 + +theme.js +file + + + + +2010-09-04T08:55:28.000000Z +3a0568e971ca5d75e278448763725edc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +868 + diff --git a/app/webroot/js/.svn/text-base/admin.js.svn-base b/app/webroot/js/.svn/text-base/admin.js.svn-base new file mode 100644 index 0000000..46fe77e --- /dev/null +++ b/app/webroot/js/.svn/text-base/admin.js.svn-base @@ -0,0 +1,92 @@ +/** + * Admin + * + * for admin pages + */ +var Admin = {}; + +/** + * Navigation + * + * @return void + */ +Admin.navigation = function() { + $('ul.sf-menu').supersubs({ + minWidth: 12, // minimum width of sub-menus in em units + maxWidth: 27, // maximum width of sub-menus in em units + extraWidth: 1 // extra width can ensure lines don't sometimes turn over + }).superfish({ + delay: 200, // delay on mouseout + animation: {opacity:'show',height:'show'}, // fade-in and slide-down animation + speed: 'fast', // faster animation speed + autoArrows: false, // disable generation of arrow mark-up + dropShadows: false // disable drop shadows + }); + + $('#nav ul li:has(ul)').children(0).addClass('has-ul'); +} + +/** + * Forms + * + * @return void + */ +Admin.form = function() { + $("form input[type=submit]").not('.filter input[type=submit]').addClass("ui-state-default ui-corner-all").hover( + function(){ + $(this).addClass("ui-state-hover"); + }, + function(){ + $(this).removeClass("ui-state-hover"); + } + ) + + $("input[type=text][rel], select[rel]").not(":hidden").each(function() { + var sd = $(this).attr('rel'); + $(this).after(""+sd+""); + }); + $("textarea[rel]").not(":hidden").each(function() { + var sd = $(this).attr('rel'); + if (sd != '') { + $(this).after("
    "+sd+""); + } + }); +} + +/** + * Extra stuff + * + * rounded corners, striped table rows, etc + * + * @return void + */ +Admin.extra = function() { + $("table tr:nth-child(even)").not('.controller-row').addClass("striped"); + $("div.message").addClass("notice"); + $('#loading p').addClass('ui-corner-bl ui-corner-br'); +} + +/** + * Rounded corners + * + * @return void + */ +Admin.roundedCorners = function() { + $("#navigation ul li, #navigation ul li ul, table, .notice, .success, .error, input, select, textarea, div.actions ul li a, div.meta, div.filter").addClass('ui-corner-all'); +} + +/** + * Document ready + * + * @return void + */ +$(document).ready(function() { + Admin.navigation(); + Admin.form(); + Admin.extra(); + Admin.roundedCorners(); + + $('.tabs').tabs(); + $('a.tooltip').tipsy({gravity: 's', html: false}); + $('textarea').not('.content').elastic(); +}); diff --git a/app/webroot/js/.svn/text-base/croogo.js.svn-base b/app/webroot/js/.svn/text-base/croogo.js.svn-base new file mode 100644 index 0000000..4b93e63 --- /dev/null +++ b/app/webroot/js/.svn/text-base/croogo.js.svn-base @@ -0,0 +1,9 @@ +/** + * Croogo + * + * available throughout the app + */ +var Croogo = { + params: {}, + locale: {} +}; \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/index.html.svn-base b/app/webroot/js/.svn/text-base/index.html.svn-base new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/js/.svn/text-base/index.html.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/nodes.js.svn-base b/app/webroot/js/.svn/text-base/nodes.js.svn-base new file mode 100644 index 0000000..6274355 --- /dev/null +++ b/app/webroot/js/.svn/text-base/nodes.js.svn-base @@ -0,0 +1,133 @@ +/** + * Nodes + * + * for NodesController + */ +var Nodes = {}; + +/** + * functions to execute when document is ready + * + * only for NodesController + * + * @return void + */ +Nodes.documentReady = function() { + Nodes.filter(); + Nodes.addMeta(); + Nodes.removeMeta(); +} + +/** + * Submits form for filtering Nodes + * + * @return void + */ +Nodes.filter = function() { + if (typeof(window['filter']) == 'undefined') { + $('.nodes div.filter').hide(); + } + + $('.nodes div.actions a.filter').click(function() { + $('.nodes div.filter').slideToggle(); + return false; + }); + + $('#FilterAddForm div.submit input').click(function() { + $('#FilterAddForm').submit(); + return false; + }); + + $('#FilterAdminIndexForm').submit(function() { + var filter = ''; + + // type + if ($('#FilterType').val() != '') { + filter += 'type:' + $('#FilterType').val() + ';'; + } + + // status + if ($('#FilterStatus').val() != '') { + filter += 'status:' + $('#FilterStatus').val() + ';'; + } + + // promoted + if ($('#FilterPromote').val() != '') { + filter += 'promote:' + $('#FilterPromote').val() + ';'; + } + + var loadUrl = Croogo.basePath + 'admin/nodes/index/'; + if (filter != '') { + loadUrl += 'filter:' + filter; + } + + window.location = loadUrl; + return false; + }); +} + +/** + * add meta field + * + * @return void + */ +Nodes.addMeta = function() { + $('a.add-meta').click(function() { + $.get(Croogo.basePath+'admin/nodes/add_meta/', function(data) { + $('#meta-fields div.clear').before(data); + $('div.meta a.remove-meta').unbind(); + Admin.roundedCorners(); + Nodes.removeMeta(); + }); + return false; + }); +} + +/** + * remove meta field + * + * @return void + */ +Nodes.removeMeta = function() { + $('div.meta a.remove-meta').click(function() { + var aRemoveMeta = $(this); + if (aRemoveMeta.attr('rel') != '') { + $.getJSON(Croogo.basePath+'admin/nodes/delete_meta/'+$(this).attr('rel')+'.json', function(data) { + if (data.success) { + aRemoveMeta.parents('.meta').remove(); + } else { + // error + } + }); + } else { + aRemoveMeta.parents('.meta').remove(); + } + return false; + }); +} + +/** + * Create slugs based on title field + * + * @return void + */ +Nodes.slug = function() { + $("#NodeTitle").slug({ + slug:'slug', + hide: false + }); +} + +/** + * document ready + * + * @return void + */ +$(document).ready(function() { + if (Croogo.params.controller == 'nodes') { + Nodes.documentReady(); + if (Croogo.params.action == 'admin_add') { + Nodes.slug(); + } + } +}); \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/terms.js.svn-base b/app/webroot/js/.svn/text-base/terms.js.svn-base new file mode 100644 index 0000000..b85cf3d --- /dev/null +++ b/app/webroot/js/.svn/text-base/terms.js.svn-base @@ -0,0 +1,43 @@ +/** + * Terms + * + * for TermsController + */ +var Terms = {}; + +/** + * functions to execute when document is ready + * + * only for TermsController + * + * @return void + */ +Terms.documentReady = function() { + +} + +/** + * Create slugs based on title field + * + * @return void + */ +Terms.slug = function() { + $("#TermTitle").slug({ + slug:'slug', + hide: false + }); +} + +/** + * document ready + * + * @return void + */ +$(document).ready(function() { + if (Croogo.params.controller == 'terms') { + Terms.documentReady(); + if (Croogo.params.action == 'admin_add') { + Terms.slug(); + } + } +}); \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/theme.js.svn-base b/app/webroot/js/.svn/text-base/theme.js.svn-base new file mode 100644 index 0000000..f6421c3 --- /dev/null +++ b/app/webroot/js/.svn/text-base/theme.js.svn-base @@ -0,0 +1,16 @@ +/** + * Javascript for Default Theme + */ +$(document).ready(function(){ + $("ul.sf-menu").supersubs({ + minWidth: 12, // minimum width of sub-menus in em units + maxWidth: 27, // maximum width of sub-menus in em units + extraWidth: 1 // extra width can ensure lines don't sometimes turn over + }).superfish({ + delay: 400, // delay on mouseout + animation: {opacity:'show',height:'show'}, // fade-in and slide-down animation + speed: 'fast', // faster animation speed + autoArrows: false, // disable generation of arrow mark-up + dropShadows: false // disable drop shadows + }); +}); \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/vendors.php.svn-base b/app/webroot/js/.svn/text-base/vendors.php.svn-base new file mode 100644 index 0000000..a6fcf32 --- /dev/null +++ b/app/webroot/js/.svn/text-base/vendors.php.svn-base @@ -0,0 +1,42 @@ + \ No newline at end of file diff --git a/app/webroot/js/.svn/text-base/vocabularies.js.svn-base b/app/webroot/js/.svn/text-base/vocabularies.js.svn-base new file mode 100644 index 0000000..38ff502 --- /dev/null +++ b/app/webroot/js/.svn/text-base/vocabularies.js.svn-base @@ -0,0 +1,43 @@ +/** + * Vocabularies + * + * for VocabulariesController + */ +var Vocabularies = {}; + +/** + * functions to execute when document is ready + * + * only for VocabulariesController + * + * @return void + */ +Vocabularies.documentReady = function() { + +} + +/** + * Create slugs based on title field + * + * @return void + */ +Vocabularies.slug = function() { + $("#VocabularyTitle").slug({ + slug:'alias', + hide: false + }); +} + +/** + * document ready + * + * @return void + */ +$(document).ready(function() { + if (Croogo.params.controller == 'vocabularies') { + Vocabularies.documentReady(); + if (Croogo.params.action == 'admin_add') { + Vocabularies.slug(); + } + } +}); \ No newline at end of file diff --git a/app/webroot/js/admin.js b/app/webroot/js/admin.js new file mode 100644 index 0000000..46fe77e --- /dev/null +++ b/app/webroot/js/admin.js @@ -0,0 +1,92 @@ +/** + * Admin + * + * for admin pages + */ +var Admin = {}; + +/** + * Navigation + * + * @return void + */ +Admin.navigation = function() { + $('ul.sf-menu').supersubs({ + minWidth: 12, // minimum width of sub-menus in em units + maxWidth: 27, // maximum width of sub-menus in em units + extraWidth: 1 // extra width can ensure lines don't sometimes turn over + }).superfish({ + delay: 200, // delay on mouseout + animation: {opacity:'show',height:'show'}, // fade-in and slide-down animation + speed: 'fast', // faster animation speed + autoArrows: false, // disable generation of arrow mark-up + dropShadows: false // disable drop shadows + }); + + $('#nav ul li:has(ul)').children(0).addClass('has-ul'); +} + +/** + * Forms + * + * @return void + */ +Admin.form = function() { + $("form input[type=submit]").not('.filter input[type=submit]').addClass("ui-state-default ui-corner-all").hover( + function(){ + $(this).addClass("ui-state-hover"); + }, + function(){ + $(this).removeClass("ui-state-hover"); + } + ) + + $("input[type=text][rel], select[rel]").not(":hidden").each(function() { + var sd = $(this).attr('rel'); + $(this).after(""+sd+""); + }); + $("textarea[rel]").not(":hidden").each(function() { + var sd = $(this).attr('rel'); + if (sd != '') { + $(this).after("
    "+sd+""); + } + }); +} + +/** + * Extra stuff + * + * rounded corners, striped table rows, etc + * + * @return void + */ +Admin.extra = function() { + $("table tr:nth-child(even)").not('.controller-row').addClass("striped"); + $("div.message").addClass("notice"); + $('#loading p').addClass('ui-corner-bl ui-corner-br'); +} + +/** + * Rounded corners + * + * @return void + */ +Admin.roundedCorners = function() { + $("#navigation ul li, #navigation ul li ul, table, .notice, .success, .error, input, select, textarea, div.actions ul li a, div.meta, div.filter").addClass('ui-corner-all'); +} + +/** + * Document ready + * + * @return void + */ +$(document).ready(function() { + Admin.navigation(); + Admin.form(); + Admin.extra(); + Admin.roundedCorners(); + + $('.tabs').tabs(); + $('a.tooltip').tipsy({gravity: 's', html: false}); + $('textarea').not('.content').elastic(); +}); diff --git a/app/webroot/js/croogo.js b/app/webroot/js/croogo.js new file mode 100644 index 0000000..4b93e63 --- /dev/null +++ b/app/webroot/js/croogo.js @@ -0,0 +1,9 @@ +/** + * Croogo + * + * available throughout the app + */ +var Croogo = { + params: {}, + locale: {} +}; \ No newline at end of file diff --git a/app/webroot/js/index.html b/app/webroot/js/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/entries b/app/webroot/js/jquery/.svn/entries new file mode 100644 index 0000000..de1952d --- /dev/null +++ b/app/webroot/js/jquery/.svn/entries @@ -0,0 +1,470 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/app/webroot/js/jquery +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +jquery.uuid.js +file + + + + +2010-09-04T08:55:28.000000Z +7c5c578ee9111a4c9e0e0e84055b2b84 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +974 + +jquery.hoverIntent.minified.js +file + + + + +2010-09-04T08:55:28.000000Z +015bbbd01da16828e415247b665a3cb7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1609 + +jquery.tipsy.js +file + + + + +2010-09-04T08:55:28.000000Z +64f8379ec5a03b6020c81583a358636d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7129 + +jquery.cookie.js +file + + + + +2010-09-04T08:55:28.000000Z +384772142d1907d7d3aea3ac11fad9d0 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4246 + +jquery.slug.js +file + + + + +2010-09-04T08:55:28.000000Z +2e754eb66ae7a3dc357c20aa82d667e2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1114 + +superfish.js +file + + + + +2010-09-04T08:55:28.000000Z +8c8070ba6a911bae7047f29e383da334 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3714 + +supersubs.js +file + + + + +2010-09-04T08:55:28.000000Z +4841b3d4b5eca1c3130933be83fbde4c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3298 + +jquery-ui.min.js +file + + + + +2010-09-04T08:55:28.000000Z +7d548d4eda7021964680ab00f18fbd7a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +202203 + +thickbox-compressed.js +file + + + + +2010-09-04T08:55:28.000000Z +3454946fcc2da6ede354630d7cacc691 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5993 + +index.html +file + + + + +2010-09-04T08:55:28.000000Z +1c7b413c3fa39d0fed40556d2658ac73 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +44 + +jquery.min.js +file + + + + +2010-09-04T08:55:28.000000Z +10092eee563dec2dca82b77d2cf5a1ae +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +72174 + +jquery.elastic-1.6.1.js +file + + + + +2010-09-04T08:55:28.000000Z +8d01410cf55ce5994638ee95d122522d +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1445 + +jquery.field.min.js +file + + + + +2010-09-04T08:55:28.000000Z +4ec4dda5194a4aeb802e671b3ace91a5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6388 + diff --git a/app/webroot/js/jquery/.svn/text-base/index.html.svn-base b/app/webroot/js/jquery/.svn/text-base/index.html.svn-base new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/index.html.svn-base @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/jquery-ui.min.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery-ui.min.js.svn-base new file mode 100644 index 0000000..b1cac98 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery-ui.min.js.svn-base @@ -0,0 +1,763 @@ +/*! + * 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 Mouse 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/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&& +this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault(); +return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&& +this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX- +a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(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 Draggable 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/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- +this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); +d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| +this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element, +b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| +0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== +"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&& +a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"), +10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft(): +f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options; +if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!= +"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= +i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), +d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: +this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", +b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; +f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", +b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top= +a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, +k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ +a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this, +arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable, +{version:"1.8.4"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize, +function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n= +(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition= +false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left- +a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize", +b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top", +"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset, +f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left= +a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+ +a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&& +e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative", +height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width= +d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 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/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("

    ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this, +arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem= +c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset, +{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment(); +if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start", +a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); +if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a, +c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]== +document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate", +null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem): +d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute|| +"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")}, +_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!= +this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a= +this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable"); +if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h= +0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width= +this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f}, +update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b= +null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this)); +this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])? +g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive", +g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over= +0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var f=d.closest(".ui-accordion-header");a.active=f.length?f:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",function(g){return a._keydown(g)}).next().attr("role", +"tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(g){a._clickHandler.call(a,g,this);g.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers); +this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,f=this.headers.index(a.target),g=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:g=this.headers[(f+1)%d];break;case b.LEFT:case b.UP:g=this.headers[(f-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(g){c(a.target).attr("tabIndex",-1);c(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected); +a.next().addClass("ui-accordion-content-active")}h=a.next();f=this.active.next();g={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):h,oldContent:f};d=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(h,f,g,b,d)}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +this.active.next().addClass("ui-accordion-content-active");var f=this.active.next(),g={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:f},h=this.active=c([]);this._toggle(h,f,g)}},_toggle:function(a,b,d,f,g){var h=this,e=h.options;h.toShow=a;h.toHide=b;h.data=d;var j=function(){if(h)return h._completed.apply(h,arguments)};h._trigger("changestart",null,h.data);h.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&f?{toShow:c([]),toHide:b,complete:j, +down:g,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:g,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;f=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!f[k]&&!c.easing[k])k="slide";f[k]||(f[k]=function(l){this.slide(l,{easing:k,duration:i||700})}); +f[k](d)}else{if(e.collapsible&&f)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.4",animations:{slide:function(a, +b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),f=0,g={},h={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){h[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);g[i]={value:j[1], +unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(h,{step:function(j,i){if(i.prop=="height")f=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=f*g[i.prop].value+g[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide", +paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 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/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(e){e.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},_create:function(){var a=this,b=this.element[0].ownerDocument;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!a.options.disabled){var d=e.ui.keyCode;switch(c.keyCode){case d.PAGE_UP:a._move("previousPage", +c);break;case d.PAGE_DOWN:a._move("nextPage",c);break;case d.UP:a._move("previous",c);c.preventDefault();break;case d.DOWN:a._move("next",c);c.preventDefault();break;case d.ENTER:case d.NUMPAD_ENTER:a.menu.element.is(":visible")&&c.preventDefault();case d.TAB:if(!a.menu.active)return;a.menu.select(c);break;case d.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay); +break}}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=e("
      ").addClass("ui-autocomplete").appendTo(e(this.options.appendTo||"body",b)[0]).mousedown(function(c){var d=a.menu.element[0]; +c.target===d&&setTimeout(function(){e(document).one("mousedown",function(f){f.target!==a.element[0]&&f.target!==d&&!e.ui.contains(d,f.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",null,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");var f=a.previous;if(a.element[0]!==b.activeElement){a.element.focus(); +a.previous=f}false!==a._trigger("select",c,{item:d})&&a.element.val(d.value);a.close(c);a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove(); +e.Widget.prototype.destroy.call(this)},_setOption:function(a,b){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(e(b||"body",this.element[0].ownerDocument)[0])},_initSource:function(){var a,b;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(c,d){d(e.ui.autocomplete.filter(a,c.term))}}else if(typeof this.options.source==="string"){b=this.options.source;this.source=function(c,d){e.getJSON(b, +c,d)}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete",b).append(e("
      ").text(b.label)).appendTo(a)},_move:function(a, +b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,b){var c=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(d){return c.test(d.label||d.value|| +d)})}})})(jQuery); +(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(b){a.activate(b, +e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.attr("scrollTop"),f=this.element.height();if(c<0)this.element.attr("scrollTop",d+c);else c>f&&this.element.attr("scrollTop",d+c-f+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(c,a):this.activate(c,this.element.children(b))}else this.activate(c, +this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(":first"));else{var b=this.active.offset().top,c=this.element.height(),d=this.element.children("li").filter(function(){var f=e(this).offset().top-b-c+e(this).height();return f<10&&f>-10});d.length||(d=this.element.children(":last"));this.activate(a,d)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active|| +this.first())this.activate(a,this.element.children(":last"));else{var b=this.active.offset().top,c=this.element.height();result=this.element.children("li").filter(function(){var d=e(this).offset().top-b+c-e(this).height();return d<10&&d>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary"); +this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, +destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.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");if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}else this.range=d("
      ");this.range.appendTo(this.element).addClass("ui-slider-range");if(b.range==="min"||b.range==="max")this.range.addClass("ui-slider-range-"+b.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("").appendTo(this.element).addClass("ui-slider-handle"); +if(b.values&&b.values.length)for(;d(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur(); +else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!a.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e= +false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");h=a._start(c,f);if(h===false)return}break}i=a.options.step;h=a.options.values&&a.options.values.length?(g=a.values(f)):(g=a.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=a._valueMin();break;case d.ui.keyCode.END:g=a._valueMax();break;case d.ui.keyCode.PAGE_UP:g=a._trimAlignValue(h+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=a._trimAlignValue(h-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h=== +a._valueMax())return;g=a._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===a._valueMin())return;g=a._trimAlignValue(h-i);break}a._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(c,e);a._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); +this._mouseDestroy();return this},_mouseCapture:function(a){var b=this.options,c,e,f,h,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(b.range===true&&this.values(1)===b.min){g+=1;f=d(this.handles[g])}if(this._start(a, +g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();b=f.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-f.width()/2,top:a.pageY-b.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= +this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= +this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b); +c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var e;if(this.options.values&&this.options.values.length){e=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>e||b===1&&c1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;fthis._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=a%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= +this.options.range,b=this.options,c=this,e=!this._animateOff?b.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({width:f- +g+"%"},{queue:false,duration:b.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:b.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"}, +b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.4"})})(jQuery); +;/* + * jQuery UI Tabs 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/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
    • #{label}
    • "},_create:function(){this._tabify(true)},_setOption:function(a,e){if(a=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[a]=e;this._tabify()}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[a].concat(d.makeArray(arguments)))},_ui:function(a,e){return{tab:a,panel:e,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a= +d(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(a){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var b=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| +(q=d("base")[0])&&l===q.href)){j=f.hash;f.href=j}if(h.test(j))b.panels=b.panels.add(b._sanitizeSelector(j));else if(j!=="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=b._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(c.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(b.panels[g-1]||b.list);f.data("destroy.tabs",true)}b.panels=b.panels.add(f)}else c.disabled.push(g)});if(a){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(b._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return b.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(c.selected>=0&&this.anchors.length){this.panels.eq(c.selected).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");b.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[c.selected],b.panels[c.selected]))});this.load(c.selected)}d(window).bind("unload",function(){b.lis.add(b.anchors).unbind(".tabs");b.lis=b.anchors=b.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[c.collapsible?"addClass": +"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);a=0;for(var i;i=this.lis[a];a++)d(i)[d.inArray(a,c.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", +function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);b._trigger("show", +null,b._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");b._trigger("show",null,b._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);b.element.dequeue("tabs")})}:function(g,f){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");b.element.dequeue("tabs")};this.anchors.bind(c.event+".tabs", +function(){var g=this,f=d(g).closest("li"),j=b.panels.filter(":not(.ui-tabs-hide)"),l=d(b._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||b._trigger("select",null,b._ui(this,l[0]))===false){this.blur();return false}c.selected=b.anchors.index(this);b.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=-1;c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",function(){s(g, +j)}).dequeue("tabs");this.blur();return false}else if(!j.length){c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this));this.blur();return false}c.cookie&&b._cookie(c.selected,c.cookie);if(l.length){j.length&&b.element.queue("tabs",function(){s(g,j)});b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", +function(){return false})},_getIndex:function(a){if(typeof a=="string")a=this.anchors.index(this.anchors.filter("[href$="+a+"]"));return a},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href= +e;var b=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){b.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(a,e,b){if(b===p)b=this.anchors.length; +var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,a).replace(/#\{label\}/g,e));a=!a.indexOf("#")?a.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var i=d("#"+a);i.length||(i=d(h.panelTemplate).attr("id",a).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(b>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[b]); +i.insertBefore(this.panels[b])}h.disabled=d.map(h.disabled,function(k){return k>=b?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[b],this.panels[b]));return this},remove:function(a){a=this._getIndex(a);var e=this.options,b=this.lis.eq(a).remove(),c=this.panels.eq(a).remove(); +if(b.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(a+(a+1=a?--h:h});this._tabify();this._trigger("remove",null,this._ui(b.find("a")[0],c[0]));return this},enable:function(a){a=this._getIndex(a);var e=this.options;if(d.inArray(a,e.disabled)!=-1){this.lis.eq(a).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(b){return b!=a});this._trigger("enable",null, +this._ui(this.anchors[a],this.panels[a]));return this}},disable:function(a){a=this._getIndex(a);var e=this.options;if(a!=e.selected){this.lis.eq(a).addClass("ui-state-disabled");e.disabled.push(a);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))}return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this}, +load:function(a){a=this._getIndex(a);var e=this,b=this.options,c=this.anchors.eq(a)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(b.spinner){var i=d("span",c);i.data("label.tabs",i.html()).html(b.spinner)}this.xhr=d.ajax(d.extend({},b.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(c.hash)).html(k);e._cleanup();b.cache&&d.data(c,"cache.tabs", +true);e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.error(k,n,a,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(a, +e){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.4"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(a,e){var b=this,c=this.options,h=b._rotate||(b._rotate=function(i){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var k=c.selected;b.select(++k')}function E(a,b){d.extend(a, +b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.4"}});var y=(new Date).getTime();d.extend(L.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]= +f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
      ')}}, +_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& +b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== +""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, +c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), +true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor== +Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]); +d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}}, +_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b= +d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target|| +a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a); +d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&& +d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f, +h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover"); +this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover"); +this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(), +k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"]; +a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val(): +"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&& +!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth; +b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b= +this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a= +d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a, +"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b== +"object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1-1){k=1;l=u;do{e=this._getDaysInMonth(c, +k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return""; +var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| +a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, +g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
      '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
      ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),I="",C=0;C1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
      '+(/all|left/.test(t)&&C==0?c? +f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'
      ';var A=k?'":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=A+"";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!k?"":'";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,K=B&&!H||!F[0]||j&&qo;P+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+""}g++;if(g>11){g=0;m++}x+="
      '+this._get(a,"weekHeader")+"
      '+this._get(a,"calculateWeek")(q)+""+(B&&!w?" ":K?''+q.getDate()+ +"":''+q.getDate()+"")+"
      "+(l?""+(i[0]>0&&D==i[1]-1?'
      ':""):"");N+=x}I+=N}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='
      ',o="";if(h||!k)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(j+=o+(h||!(k&&l)?" ":""));if(h||!l)j+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b, +i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?" ":"")+o;j+="
      ";return j},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b)); +return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new L;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.4";window["DP_jQuery_"+y]=d})(jQuery); +;/* + * jQuery UI Progressbar 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/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("
      ").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a=this.value();this.valueDiv.toggleClass("ui-corner-right", +a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.4"})})(jQuery); +;/* + * jQuery UI Effects 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/Effects/ + */ +jQuery.effects||function(f,j){function l(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return m.transparent;return m[f.trim(c).toLowerCase()]}function r(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return l(b)}function n(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function o(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in s||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function t(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:f.fx.speeds[b]||f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=r(b.elem,a);b.end=l(b.end);b.colorInit= +true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var m={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189, +183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255, +165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},p=["add","remove","toggle"],s={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,d){if(f.isFunction(b)){d=b;b=null}return this.each(function(){var e=f(this),g=e.attr("style")||" ",h=o(n.call(this)),q,u=e.attr("className");f.each(p,function(v, +i){c[i]&&e[i+"Class"](c[i])});q=o(n.call(this));e.attr("className",u);e.animate(t(h,q),a,b,function(){f.each(p,function(v,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)})})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a? +f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.4",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); +c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| +typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, +arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ +b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, +10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* +a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fold 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/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","left"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],10)/100* +f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 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/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 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/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.cookie.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.cookie.js.svn-base new file mode 100644 index 0000000..6df1fac --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.cookie.js.svn-base @@ -0,0 +1,96 @@ +/** + * Cookie plugin + * + * Copyright (c) 2006 Klaus Hartl (stilbuero.de) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + */ + +/** + * Create a cookie with the given name and value and other optional parameters. + * + * @example $.cookie('the_cookie', 'the_value'); + * @desc Set the value of a cookie. + * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); + * @desc Create a cookie with all available options. + * @example $.cookie('the_cookie', 'the_value'); + * @desc Create a session cookie. + * @example $.cookie('the_cookie', null); + * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain + * used when the cookie was set. + * + * @param String name The name of the cookie. + * @param String value The value of the cookie. + * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. + * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. + * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. + * If set to null or omitted, the cookie will be a session cookie and will not be retained + * when the the browser exits. + * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). + * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). + * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will + * require a secure protocol (like HTTPS). + * @type undefined + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ + +/** + * Get the value of a cookie with the given name. + * + * @example $.cookie('the_cookie'); + * @desc Get the value of a cookie. + * + * @param String name The name of the cookie. + * @return The value of the cookie. + * @type String + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ +jQuery.cookie = function(name, value, options) { + if (typeof value != 'undefined') { // name and value given, set cookie + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE + } + // CAUTION: Needed to parenthesize options.path and options.domain + // in the following expressions, otherwise they evaluate to undefined + // in the packed version for some reason... + var path = options.path ? '; path=' + (options.path) : ''; + var domain = options.domain ? '; domain=' + (options.domain) : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); + } else { // only name given, get cookie + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } +}; \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.elastic-1.6.1.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.elastic-1.6.1.js.svn-base new file mode 100644 index 0000000..4a61a71 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.elastic-1.6.1.js.svn-base @@ -0,0 +1 @@ +(function(f){f.fn.extend({elastic:function(){var d=['paddingTop','paddingRight','paddingBottom','paddingLeft','fontSize','lineHeight','fontFamily','width','fontWeight'];return this.each(function(){if(this.type!='textarea'){return false}var $textarea=f(this),$twin=f('
      ').css({'position':'absolute','display':'none'}),lineHeight=parseInt($textarea.css('line-height'),10)||parseInt($textarea.css('font-size'),'10'),minheight=parseInt($textarea.css('height'),10)||lineHeight*3,maxheight=parseInt($textarea.css('max-height'),10)||Number.MAX_VALUE,goalheight=0,i=0;$twin.appendTo($textarea.parent());var i=d.length;while(i--){$twin.css(d[i].toString(),$textarea.css(d[i].toString()))}function setHeightAndOverflow(a,b){curratedHeight=Math.floor(parseInt(a,10));if($textarea.height()!=curratedHeight){$textarea.css({'height':curratedHeight+'px','overflow':b})}}function update(){var a=$textarea.val().replace(/<|>/g,' ').replace(/\n/g,'
      ').replace(/&/g,"&");var b=$twin.html();if(a+' '!=b){$twin.html(a+' ');if(Math.abs($twin.height()+lineHeight-$textarea.height())>3){var c=$twin.height()+lineHeight;if(c>=maxheight){setHeightAndOverflow(maxheight,'auto')}else if(c<=minheight){setHeightAndOverflow(minheight,'hidden')}else{setHeightAndOverflow(c,'hidden')}}}}$textarea.css({'overflow':'hidden'});$textarea.keyup(function(){update()});$textarea.live('input paste',function(e){setTimeout(update,250)});update()})}})})(jQuery); \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.field.min.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.field.min.js.svn-base new file mode 100644 index 0000000..d5da845 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.field.min.js.svn-base @@ -0,0 +1,13 @@ +/* + * jQuery Field Plug-in + * + * Copyright (c) 2007 Dan G. Switzer, II + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: 14 + * Version: 0.9.2 +*/ +(function($){var defaults={delimiter:",",checkboxRangeKeyBinding:"shiftKey",useArray:false};$.Field={version:"0.9.2",setDefaults:function(options){$.extend(defaults,options)},setProperty:function(prop,value){defaults[prop]=value},getProperty:function(prop){return defaults[prop]}};$.fn.fieldArray=function(v){var t=$type(v);if(t=="undefined")return getValue(this);if(t=="string"||t=="number"){v=v.toString().split(defaults.delimiter);t="array"}if(t=="array")return setValue(this,v);return this};$.fn.getValue=function(){return getValue(this).join(defaults.delimiter)};var getValue=function(jq){var v=[];jq.each(function(lc){var t=getType(this);switch(t){case"checkbox":case"radio":if(this.checked)v.push(this.value);break;case"select":if(this.type=="select-one"){v.push((this.selectedIndex==-1)?"":getOptionVal(this[this.selectedIndex]))}else{for(var i=0;i-1))return true;if($field.getValue().length>=$field.attr("maxlength")){var $next=$field.moveNext().select();if($.isFunction(callback))callback.apply($field,[$next])}})};$.fn.moveNext=function(){return this.moveIndex("next")};$.fn.movePrev=function(){return this.moveIndex("prev")};$.fn.moveIndex=function(i){var aPos=getFieldPosition(this);if(i=="next")i=aPos[0]+1;else if(i=="prev")i=aPos[0]-1;if(i<0)i=aPos[1].length-1;else if(i>=aPos[1].length)i=0;return $(aPos[1][i]).trigger("focus")};$.fn.getTabIndex=function(){return getFieldPosition(this)[0]};var getFieldPosition=function(jq){var $field=jq.filter("input, select, textarea").get(0),aTabIndex=[],aPosIndex=[];if(!$field)return[-1,[]];$.each($field.form.elements,function(i,o){if(o.tagName!="FIELDSET"&&!o.disabled){if(o.tabIndex>0){aTabIndex.push(o)}else{aPosIndex.push(o)}}});aTabIndex.sort(function(a,b){return a.tabIndex-b.tabIndex});aTabIndex=$.merge(aTabIndex,aPosIndex);for(var i=0;iopt.limit){return(this.type=="select-multiple")?undoSelect():opt.onfailure.apply(self,[opt.limit])}opt.onsuccess.apply(self,[opt.limit]);return true})};$.fn.createCheckboxRange=function(callback){var opt=jQuery.extend((callback&&callback.constructor==Object?callback:{bind:defaults.checkboxRangeKeyBinding,onclick:callback}),callback);var iLastSelection=0,self=this,bCallback=$.isFunction(opt.onclick);if(bCallback)this.each(function(){opt.onclick.apply(this,[$(this).is(":checked")])});return this.each(function(){if(this.type!="checkbox")return false;var el=this;var updateLastCheckbox=function(e){iLastSelection=self.index(e.target)};var checkboxClicked=function(e){var bSetChecked=this.checked,current=self.index(e.target),low=Math.min(iLastSelection,current),high=Math.max(iLastSelection+1,current);if(bCallback)$(this).each(function(){opt.onclick.apply(this,[bSetChecked])});if(!e[opt.bind])return;for(var i=low;i-1)};var $type=function(o){var t=(typeof o).toLowerCase();if(t=="object"){if(o instanceof Array)t="array";else if(o instanceof Date)t="date"}return t};var $isType=function(o,v){return($type(o)==String(v).toLowerCase())}})(jQuery); \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.hoverIntent.minified.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.hoverIntent.minified.js.svn-base new file mode 100644 index 0000000..f86ad87 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.hoverIntent.minified.js.svn-base @@ -0,0 +1,9 @@ +/** +* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+ +* +* +* @param f onMouseOver function || An object with configuration options +* @param g onMouseOut function || Nothing (use configuration options object) +* @author Brian Cherne +*/ +(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY)))[^>]*$|^#([\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/app/webroot/js/jquery/.svn/text-base/jquery.slug.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.slug.js.svn-base new file mode 100644 index 0000000..a19382b --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.slug.js.svn-base @@ -0,0 +1,36 @@ +// +// jQuery Slug Generation Plugin by Perry Trinier (perrytrinier@gmail.com) +// Licensed under the GPL: http://www.gnu.org/copyleft/gpl.html + +jQuery.fn.slug = function(options) { + var settings = { + slug: 'slug', // Class used for slug destination input and span. The span is created on $(document).ready() + hide: true // Boolean - By default the slug input field is hidden, set to false to show the input field and hide the span. + }; + + if(options) { + jQuery.extend(settings, options); + } + + $this = jQuery(this); + + jQuery(document).ready( function() { + if (settings.hide) { + jQuery('input.' + settings.slug).after(""); + jQuery('input.' + settings.slug).hide(); + } + }); + + makeSlug = function() { + var slugcontent = $this.val(); + var slugcontent_hyphens = slugcontent.replace(/\s/g,'-'); + var finishedslug = slugcontent_hyphens.replace(/[^a-zA-Z0-9\-]/g,''); + jQuery('input.' + settings.slug).val(finishedslug.toLowerCase()); + jQuery('span.' + settings.slug).text(finishedslug.toLowerCase()); + + } + + jQuery(this).keyup(makeSlug); + + return $this; +}; diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.tipsy.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.tipsy.js.svn-base new file mode 100644 index 0000000..9b458ca --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.tipsy.js.svn-base @@ -0,0 +1,198 @@ +// tipsy, facebook style tooltips for jquery +// version 1.0.0a +// (c) 2008-2010 jason frame [jason@onehackoranother.com] +// releated under the MIT license + +(function($) { + + function fixTitle($ele) { + if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') { + $ele.attr('original-title', $ele.attr('title') || '').removeAttr('title'); + } + } + + function Tipsy(element, options) { + this.$element = $(element); + this.options = options; + this.enabled = true; + fixTitle(this.$element); + } + + Tipsy.prototype = { + show: function() { + var title = this.getTitle(); + if (title && this.enabled) { + var $tip = this.tip(); + + $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); + $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity + $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body); + + var pos = $.extend({}, this.$element.offset(), { + width: this.$element[0].offsetWidth, + height: this.$element[0].offsetHeight + }); + + var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight; + var gravity = (typeof this.options.gravity == 'function') + ? this.options.gravity.call(this.$element[0]) + : this.options.gravity; + + var tp; + switch (gravity.charAt(0)) { + case 'n': + tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 's': + tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; + break; + case 'e': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; + break; + case 'w': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; + break; + } + + if (gravity.length == 2) { + if (gravity.charAt(1) == 'w') { + tp.left = pos.left + pos.width / 2 - 15; + } else { + tp.left = pos.left + pos.width / 2 - actualWidth + 15; + } + } + + $tip.css(tp).addClass('tipsy-' + gravity); + + if (this.options.fade) { + $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}); + } else { + $tip.css({visibility: 'visible', opacity: this.options.opacity}); + } + } + }, + + hide: function() { + if (this.options.fade) { + this.tip().stop().fadeOut(function() { $(this).remove(); }); + } else { + this.tip().remove(); + } + }, + + getTitle: function() { + var title, $e = this.$element, o = this.options; + fixTitle($e); + var title, o = this.options; + if (typeof o.title == 'string') { + title = $e.attr(o.title == 'title' ? 'original-title' : o.title); + } else if (typeof o.title == 'function') { + title = o.title.call($e[0]); + } + title = ('' + title).replace(/(^\s*|\s*$)/, ""); + return title || o.fallback; + }, + + tip: function() { + if (!this.$tip) { + this.$tip = $('
      ').html('
      '); + } + return this.$tip; + }, + + validate: function() { + if (!this.$element[0].parentNode) { + this.hide(); + this.$element = null; + this.options = null; + } + }, + + enable: function() { this.enabled = true; }, + disable: function() { this.enabled = false; }, + toggleEnabled: function() { this.enabled = !this.enabled; } + }; + + $.fn.tipsy = function(options) { + + if (options === true) { + return this.data('tipsy'); + } else if (typeof options == 'string') { + return this.data('tipsy')[options](); + } + + options = $.extend({}, $.fn.tipsy.defaults, options); + + function get(ele) { + var tipsy = $.data(ele, 'tipsy'); + if (!tipsy) { + tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); + $.data(ele, 'tipsy', tipsy); + } + return tipsy; + } + + function enter() { + var tipsy = get(this); + tipsy.hoverState = 'in'; + if (options.delayIn == 0) { + tipsy.show(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); + } + }; + + function leave() { + var tipsy = get(this); + tipsy.hoverState = 'out'; + if (options.delayOut == 0) { + tipsy.hide(); + } else { + setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut); + } + }; + + if (!options.live) this.each(function() { get(this); }); + + if (options.trigger != 'manual') { + var binder = options.live ? 'live' : 'bind', + eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', + eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; + this[binder](eventIn, enter)[binder](eventOut, leave); + } + + return this; + + }; + + $.fn.tipsy.defaults = { + delayIn: 0, + delayOut: 0, + fade: false, + fallback: '', + gravity: 'n', + html: false, + live: false, + offset: 0, + opacity: 0.8, + title: 'title', + trigger: 'hover' + }; + + // Overwrite this method to provide options on a per-element basis. + // For example, you could store the gravity in a 'tipsy-gravity' attribute: + // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); + // (remember - do not modify 'options' in place!) + $.fn.tipsy.elementOptions = function(ele, options) { + return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; + }; + + $.fn.tipsy.autoNS = function() { + return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; + }; + + $.fn.tipsy.autoWE = function() { + return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; + }; + +})(jQuery); diff --git a/app/webroot/js/jquery/.svn/text-base/jquery.uuid.js.svn-base b/app/webroot/js/jquery/.svn/text-base/jquery.uuid.js.svn-base new file mode 100644 index 0000000..f22bf2d --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/jquery.uuid.js.svn-base @@ -0,0 +1,24 @@ +/* +Usage 1: define the default prefix by using an object with the property prefix as a parameter which contains a string value; {prefix: 'id'} +Usage 2: call the function jQuery.uuid() with a string parameter p to be used as a prefix to generate a random uuid; +Usage 3: call the function jQuery.uuid() with no parameters to generate a uuid with the default prefix; defaul prefix: '' (empty string) +*/ + +/* +Generate fragment of random numbers +*/ +jQuery._uuid_default_prefix = ''; +jQuery._uuidlet = function () { + return(((1+Math.random())*0x10000)|0).toString(16).substring(1); +}; +/* +Generates random uuid +*/ +jQuery.uuid = function (p) { + if (typeof(p) == 'object' && typeof(p.prefix) == 'string') { + jQuery._uuid_default_prefix = p.prefix; + } else { + p = p || jQuery._uuid_default_prefix || ''; + return(p+jQuery._uuidlet()+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+jQuery._uuidlet()+jQuery._uuidlet()); + }; +}; \ No newline at end of file diff --git a/app/webroot/js/jquery/.svn/text-base/superfish.js.svn-base b/app/webroot/js/jquery/.svn/text-base/superfish.js.svn-base new file mode 100644 index 0000000..c6a9c7d --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/superfish.js.svn-base @@ -0,0 +1,121 @@ + +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt + */ + +;(function($){ + $.fn.superfish = function(op){ + + var sf = $.fn.superfish, + c = sf.c, + $arrow = $([' »'].join('')), + over = function(){ + var $$ = $(this), menu = getMenu($$); + clearTimeout(menu.sfTimer); + $$.showSuperfishUl().siblings().hideSuperfishUl(); + }, + out = function(){ + var $$ = $(this), menu = getMenu($$), o = sf.op; + clearTimeout(menu.sfTimer); + menu.sfTimer=setTimeout(function(){ + o.retainPath=($.inArray($$[0],o.$path)>-1); + $$.hideSuperfishUl(); + if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} + },o.delay); + }, + getMenu = function($menu){ + var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; + sf.op = sf.o[menu.serial]; + return menu; + }, + addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; + + return this.each(function() { + var s = this.serial = sf.o.length; + var o = $.extend({},sf.defaults,op); + o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){ + $(this).addClass([o.hoverClass,c.bcClass].join(' ')) + .filter('li:has(ul)').removeClass(o.pathClass); + }); + sf.o[s] = sf.op = o; + + $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() { + if (o.autoArrows) addArrow( $('>a:first-child',this) ); + }) + .not('.'+c.bcClass) + .hideSuperfishUl(); + + var $a = $('a',this); + $a.each(function(i){ + var $li = $a.eq(i).parents('li'); + $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);}); + }); + o.onInit.call(this); + + }).each(function() { + var menuClasses = [c.menuClass]; + if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass); + $(this).addClass(menuClasses.join(' ')); + }); + }; + + var sf = $.fn.superfish; + sf.o = []; + sf.op = {}; + sf.IE7fix = function(){ + var o = sf.op; + if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined) + this.toggleClass(sf.c.shadowClass+'-off'); + }; + sf.c = { + bcClass : 'sf-breadcrumb', + menuClass : 'sf-js-enabled', + anchorClass : 'sf-with-ul', + arrowClass : 'sf-sub-indicator', + shadowClass : 'sf-shadow' + }; + sf.defaults = { + hoverClass : 'sfHover', + pathClass : 'overideThisToUse', + pathLevels : 1, + delay : 800, + animation : {opacity:'show'}, + speed : 'normal', + autoArrows : true, + dropShadows : true, + disableHI : false, // true disables hoverIntent detection + onInit : function(){}, // callback functions + onBeforeShow: function(){}, + onShow : function(){}, + onHide : function(){} + }; + $.fn.extend({ + hideSuperfishUl : function(){ + var o = sf.op, + not = (o.retainPath===true) ? o.$path : ''; + o.retainPath = false; + var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass) + .find('>ul').hide().css('visibility','hidden'); + o.onHide.call($ul); + return this; + }, + showSuperfishUl : function(){ + var o = sf.op, + sh = sf.c.shadowClass+'-off', + $ul = this.addClass(o.hoverClass) + .find('>ul:hidden').css('visibility','visible'); + sf.IE7fix.call($ul); + o.onBeforeShow.call($ul); + $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); }); + return this; + } + }); + +})(jQuery); diff --git a/app/webroot/js/jquery/.svn/text-base/supersubs.js.svn-base b/app/webroot/js/jquery/.svn/text-base/supersubs.js.svn-base new file mode 100644 index 0000000..4522151 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/supersubs.js.svn-base @@ -0,0 +1,90 @@ + +/* + * Supersubs v0.2b - jQuery plugin + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * + * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of + * their longest list item children. If you use this, please expect bugs and report them + * to the jQuery Google Group with the word 'Superfish' in the subject line. + * + */ + +;(function($){ // $ will refer to jQuery within this closure + + $.fn.supersubs = function(options){ + var opts = $.extend({}, $.fn.supersubs.defaults, options); + // return original object to support chaining + return this.each(function() { + // cache selections + var $$ = $(this); + // support metadata + var o = $.meta ? $.extend({}, opts, $$.data()) : opts; + // get the font size of menu. + // .css('fontSize') returns various results cross-browser, so measure an em dash instead + var fontsize = $('').css({ + 'padding' : 0, + 'position' : 'absolute', + 'top' : '-999em', + 'width' : 'auto' + }).appendTo($$).width(); //clientWidth is faster, but was incorrect here + // remove em dash + $('#menu-fontsize').remove(); + // cache all ul elements + $ULs = $$.find('ul'); + // loop through each ul in menu + $ULs.each(function(i) { + // cache this ul + var $ul = $ULs.eq(i); + // get all (li) children of this ul + var $LIs = $ul.children(); + // get all anchor grand-children + var $As = $LIs.children('a'); + // force content to one line and save current float property + var liFloat = $LIs.css('white-space','nowrap').css('float'); + // remove width restrictions and floats so elements remain vertically stacked + var emWidth = $ul.add($LIs).add($As).css({ + 'float' : 'none', + 'width' : 'auto' + }) + // this ul will now be shrink-wrapped to longest li due to position:absolute + // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer + .end().end()[0].clientWidth / fontsize; + // add more width to ensure lines don't turn over at certain sizes in various browsers + emWidth += o.extraWidth; + // restrict to at least minWidth and at most maxWidth + if (emWidth > o.maxWidth) { emWidth = o.maxWidth; } + else if (emWidth < o.minWidth) { emWidth = o.minWidth; } + emWidth += 'em'; + // set ul to width in ems + $ul.css('width',emWidth); + // restore li floats to avoid IE bugs + // set li width to full width of this ul + // revert white-space to normal + $LIs.css({ + 'float' : liFloat, + 'width' : '100%', + 'white-space' : 'normal' + }) + // update offset position of descendant ul to reflect new width of parent + .each(function(){ + var $childUl = $('>ul',this); + var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right'; + $childUl.css(offsetDirection,emWidth); + }); + }); + + }); + }; + // expose defaults + $.fn.supersubs.defaults = { + minWidth : 9, // requires em unit. + maxWidth : 25, // requires em unit. + extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values + }; + +})(jQuery); // plugin code ends diff --git a/app/webroot/js/jquery/.svn/text-base/thickbox-compressed.js.svn-base b/app/webroot/js/jquery/.svn/text-base/thickbox-compressed.js.svn-base new file mode 100644 index 0000000..3306598 --- /dev/null +++ b/app/webroot/js/jquery/.svn/text-base/thickbox-compressed.js.svn-base @@ -0,0 +1,10 @@ +/* + * Thickbox 3 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2007 cody lindley + * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php +*/ + +var tb_pathToImage = Croogo.basePath+"img/ajax/loadingAnimation.gif"; + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<4 5=\'B\'><4 5=\'8\'>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'><4 5=\'8\'>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' />");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D&1d;&1d;2T &2R;"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;&2O; 2N"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"<4 5=\'2A\'>1l 1k 1j 1s");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"<4 5=\'2e\'>1l 1k 1j 1s ")}n{$("#B").N();$("#8").q(" ")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"<4 5=\'2e\'>1l 1k 1j 1s<4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i \ No newline at end of file diff --git a/app/webroot/js/jquery/jquery-1.4.2.js b/app/webroot/js/jquery/jquery-1.4.2.js new file mode 100644 index 0000000..fff6776 --- /dev/null +++ b/app/webroot/js/jquery/jquery-1.4.2.js @@ -0,0 +1,6240 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * 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. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function( window, undefined ) { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The functions to execute on DOM ready + readyList = [], + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwnProperty = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + indexOf = Array.prototype.indexOf; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context ) { + this.context = document; + this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + if ( elem ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $("TAG") + } else if ( !context && /^\w+$/.test( selector ) ) { + this.selector = selector; + this.context = document; + selector = document.getElementsByTagName( selector ); + return jQuery.merge( this, selector ); + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return jQuery( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.4.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = jQuery(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // If the DOM is already ready + if ( jQuery.isReady ) { + // Execute the function immediately + fn.call( document, jQuery ); + + // Otherwise, remember the function for later + } else if ( readyList ) { + // Add the function to the wait list + readyList.push( fn ); + } + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || jQuery(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging object literal values or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { + var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src + : jQuery.isArray(copy) ? [] : {}; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // Handle when the DOM is ready + ready: function() { + // Make sure that the DOM is not already loaded + if ( !jQuery.isReady ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 13 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If there are functions bound, to execute + if ( readyList ) { + // Execute all of them + var fn, i = 0; + while ( (fn = readyList[ i++ ]) ) { + fn.call( document, jQuery ); + } + + // Reset the list of functions + readyList = null; + } + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + return jQuery.ready(); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return toString.call(obj) === "[object Function]"; + }, + + isArray: function( obj ) { + return toString.call(obj) === "[object Array]"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor + && !hasOwnProperty.call(obj, "constructor") + && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwnProperty.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") + .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + noop: function() {}, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + + if ( jQuery.support.scriptEval ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + trim: function( text ) { + return (text || "").replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = []; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + if ( !inv !== !callback( elems[ i ], i ) ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var ret = [], value; + + // Go through the array, translating each of the items to their + // new value (or values). + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + browser: {} +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + return indexOf.call( array, elem ); + }; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch( error ) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +function evalScript( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} + +// Mutifunctional method to get and set values to a collection +// The value/s can be optionally by executed if its a function +function access( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; +} + +function now() { + return (new Date).getTime(); +} +(function() { + + jQuery.support = {}; + + var root = document.documentElement, + script = document.createElement("script"), + div = document.createElement("div"), + id = "script" + now(); + + div.style.display = "none"; + div.innerHTML = "
      a"; + + var all = div.getElementsByTagName("*"), + a = div.getElementsByTagName("a")[0]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return; + } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: /red/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, + + parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + + // Will be defined later + deleteExpando: true, + checkClone: false, + scriptEval: false, + noCloneEvent: true, + boxModel: null + }; + + script.type = "text/javascript"; + try { + script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + } catch(e) {} + + root.insertBefore( script, root.firstChild ); + + // Make sure that the execution of code works by injecting a script + // tag with appendChild/createTextNode + // (IE doesn't support this, fails, and uses .text instead) + if ( window[ id ] ) { + jQuery.support.scriptEval = true; + delete window[ id ]; + } + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete script.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + + root.removeChild( script ); + + if ( div.attachEvent && div.fireEvent ) { + div.attachEvent("onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + jQuery.support.noCloneEvent = false; + div.detachEvent("onclick", click); + }); + div.cloneNode(true).fireEvent("onclick"); + } + + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Figure out if the W3C box model works as expected + // document.body must exist before we can do this + jQuery(function() { + var div = document.createElement("div"); + div.style.width = div.style.paddingLeft = "1px"; + + document.body.appendChild( div ); + jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + document.body.removeChild( div ).style.display = 'none'; + + div = null; + }); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + root = script = div = all = a = null; +})(); + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; +var expando = "jQuery" + now(), uuid = 0, windowData = {}; + +jQuery.extend({ + cache: {}, + + expando:expando, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + "object": true, + "applet": true + }, + + data: function( elem, name, data ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache; + + if ( !id && typeof name === "string" && data === undefined ) { + return null; + } + + // Compute a unique ID for the element + if ( !id ) { + id = ++uuid; + } + + // Avoid generating a new cache unless none exists and we + // want to manipulate it. + if ( typeof name === "object" ) { + elem[ expando ] = id; + thisCache = cache[ id ] = jQuery.extend(true, {}, name); + + } else if ( !cache[ id ] ) { + elem[ expando ] = id; + cache[ id ] = {}; + } + + thisCache = cache[ id ]; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) { + thisCache[ name ] = data; + } + + return typeof name === "string" ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( thisCache ) { + // Remove the section of cache data + delete thisCache[ name ]; + + // If we've removed all the data, remove the element's cache + if ( jQuery.isEmptyObject(thisCache) ) { + jQuery.removeData( elem ); + } + } + + // Otherwise, we want to remove all of the element's data + } else { + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } + + // Completely remove the data cache + delete cache[ id ]; + } + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + if ( typeof key === "undefined" && this.length ) { + return jQuery.data( this[0] ); + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else { + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + jQuery.data( this, key, value ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i, elem ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + } +}); +var rclass = /[\n\t]/g, + rspace = /\s+/, + rreturn = /\r/g, + rspecialurl = /href|src|style/, + rtype = /(button|input)/i, + rfocusable = /(button|input|object|select|textarea)/i, + rclickable = /^(a|area)$/i, + rradiocheck = /radio|checkbox/; + +jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", setClass = elem.className; + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split(rspace); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, i = 0, self = jQuery(this), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery.data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + if ( value === undefined ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Typecast each time if the value is a Function and the appended + // value is therefore different each time. + if ( typeof val === "number" ) { + val += ""; + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + // don't set attributes on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + if ( name in elem && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + elem[ name ] = value; + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + + // elem is actually elem.style ... set the style + // Using attr for specific style information is now deprecated. Use style instead. + return jQuery.style( elem, name, value ); + } +}); +var rnamespaces = /\.(.*)$/, + fcleanup = function( nm ) { + return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { + return "\\" + ch; + }); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery.data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events = elemData.events || {}, + eventHandle = elemData.handle, eventHandle; + + if ( !eventHandle ) { + elemData.handle = eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + handleObj.guid = handler.guid; + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for global triggering + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( var j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( var j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[expando] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( jQuery.event.global[ type ] ) { + jQuery.each( jQuery.cache, function() { + if ( this.events && this.events[type] ) { + jQuery.event.trigger( event, data, this.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = jQuery.data( elem, "handle" ); + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var target = event.target, old, + isClick = jQuery.nodeName(target, "a") && type === "click", + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem, event ) === false) && + !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + + try { + if ( target[ type ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + type ]; + + if ( old ) { + target[ "on" + type ] = null; + } + + jQuery.event.triggered = true; + target[ type ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( old ) { + target[ "on" + type ] = old; + } + + jQuery.event.triggered = false; + } + } + }, + + handle: function( event ) { + var all, handlers, namespaces, namespace, events; + + event = arguments[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + all = event.type.indexOf(".") < 0 && !event.exclusive; + + if ( !all ) { + namespaces = event.type.split("."); + event.type = namespaces.shift(); + namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + var events = jQuery.data(this, "events"), handlers = events[ event.type ]; + + if ( events && handlers ) { + // Clone the handlers to prevent manipulation + handlers = handlers.slice(0); + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, arguments ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, body = document.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { + event.which = event.charCode || event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); + }, + + remove: function( handleObj ) { + var remove = true, + type = handleObj.origType.replace(rnamespaces, ""); + + jQuery.each( jQuery.data(this, "events").live || [], function() { + if ( type === this.origType.replace(rnamespaces, "") ) { + remove = false; + return false; + } + }); + + if ( remove ) { + jQuery.event.remove( this, handleObj.origType, liveHandler ); + } + } + + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( this.setInterval ) { + this.onbeforeunload = eventHandle; + } + + return false; + }, + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +var removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + elem.removeEventListener( type, handle, false ); + } : + function( elem, type, handle ) { + elem.detachEvent( "on" + type, handle ); + }; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = now(); + + // Mark it as fixed + this[ expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + } + // otherwise set the returnValue property of the original event to false (IE) + e.returnValue = false; + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + return trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + return trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var formElems = /textarea|input|select/i, + + changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery.data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery.data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + return jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + return testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + return testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information/focus[in] is not needed anymore + beforeactivate: function( e ) { + var elem = e.target; + jQuery.data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return formElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return formElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; +} + +function trigger( type, elem, args ) { + args[0].type = type; + return jQuery.event.handle.apply( elem, args ); +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + var handler = name === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( type === "focus" || type === "blur" ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + context.each(function(){ + jQuery.event.add( this, liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + }); + + } else { + // unbind live handler + context.unbind( liveConvert( type, selector ), fn ); + } + } + + return this; + } +}); + +function liveHandler( event ) { + var stop, elems = [], selectors = [], args = arguments, + related, match, handleObj, elem, j, i, l, data, + events = jQuery.data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) + if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { + return; + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( match[i].selector === handleObj.selector ) { + elem = match[i].elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { + stop = false; + break; + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + +// Prevent memory leaks in IE +// Window isn't included so as not to unbind existing unload events +// More info: +// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ +if ( window.attachEvent && !window.addEventListener ) { + window.attachEvent("onunload", function() { + for ( var id in jQuery.cache ) { + if ( jQuery.cache[ id ].handle ) { + // Try/Catch is to handle iframes being unloaded, see #4280 + try { + jQuery.event.remove( jQuery.cache[ id ].handle.elem ); + } catch(e) {} + } + } + }); +} +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var filter = Expr.filter[ type ], found, item, left = match[1]; + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = part.toLowerCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + return match[1].toLowerCase(); + }, + CHILD: function(match){ + if ( match[1] === "nth" ) { + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 === i; + }, + eq: function(elem, i, match){ + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } else { + Sizzle.error( "Syntax error, unrecognized expression: " + name ); + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + if ( type === "first" ) { + return true; + } + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first === 0 ) { + return diff === 0; + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ + return "\\" + (num - 0 + 1); + })); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.compareDocumentPosition ? -1 : 1; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.sourceIndex ? -1 : 1; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.ownerDocument ? -1 : 1; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

      "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE + })(); +} + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
      "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return !!(a.compareDocumentPosition(b) & 16); +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = getText; +jQuery.isXMLDoc = isXML; +jQuery.contains = contains; + +return; + +window.Sizzle = Sizzle; + +})(); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + slice = Array.prototype.slice; + +// Implement the identical functionality for filter and not +var winnow = function( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var ret = this.pushStack( "", "find", selector ), length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + if ( jQuery.isArray( selectors ) ) { + var ret = [], cur = this[0], match, matches = {}, selector; + + if ( cur && selectors.length ) { + for ( var i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur }); + delete matches[selector]; + } + } + cur = cur.parentNode; + } + } + + return ret; + } + + var pos = jQuery.expr.match.POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + return this.map(function( i, cur ) { + while ( cur && cur.ownerDocument && cur !== context ) { + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { + return cur; + } + cur = cur.parentNode; + } + return null; + }); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context || this.context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call(arguments).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], cur = elem[dir]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, + rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rtagName = /<([\w:]+)/, + rtbody = /"; + }, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
      ", "
      " ], + thead: [ 1, "", "
      " ], + tr: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + col: [ 2, "", "
      " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and \ No newline at end of file diff --git a/cake/console/templates/skel/views/layouts/js/default.ctp b/cake/console/templates/skel/views/layouts/js/default.ctp new file mode 100644 index 0000000..d94dc90 --- /dev/null +++ b/cake/console/templates/skel/views/layouts/js/default.ctp @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/cake/console/templates/skel/views/layouts/rss/.svn/entries b/cake/console/templates/skel/views/layouts/rss/.svn/entries new file mode 100644 index 0000000..f2b467f --- /dev/null +++ b/cake/console/templates/skel/views/layouts/rss/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/views/layouts/rss +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:26.000000Z +4aa92028be523d1c473716ac5331d039 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +238 + diff --git a/cake/console/templates/skel/views/layouts/rss/.svn/text-base/default.ctp.svn-base b/cake/console/templates/skel/views/layouts/rss/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..94067f2 --- /dev/null +++ b/cake/console/templates/skel/views/layouts/rss/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,17 @@ +header(); + +if (!isset($channel)) { + $channel = array(); +} +if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout; +} + +echo $rss->document( + $rss->channel( + array(), $channel, $content_for_layout + ) +); + +?> \ No newline at end of file diff --git a/cake/console/templates/skel/views/layouts/rss/default.ctp b/cake/console/templates/skel/views/layouts/rss/default.ctp new file mode 100644 index 0000000..94067f2 --- /dev/null +++ b/cake/console/templates/skel/views/layouts/rss/default.ctp @@ -0,0 +1,17 @@ +header(); + +if (!isset($channel)) { + $channel = array(); +} +if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout; +} + +echo $rss->document( + $rss->channel( + array(), $channel, $content_for_layout + ) +); + +?> \ No newline at end of file diff --git a/cake/console/templates/skel/views/layouts/xml/.svn/entries b/cake/console/templates/skel/views/layouts/xml/.svn/entries new file mode 100644 index 0000000..10ae83d --- /dev/null +++ b/cake/console/templates/skel/views/layouts/xml/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/views/layouts/xml +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:26.000000Z +ccaddfd2c80fdcd90920cedec69aa5e2 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +64 + diff --git a/cake/console/templates/skel/views/layouts/xml/.svn/text-base/default.ctp.svn-base b/cake/console/templates/skel/views/layouts/xml/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..566ca21 --- /dev/null +++ b/cake/console/templates/skel/views/layouts/xml/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,2 @@ +header(); ?> + \ No newline at end of file diff --git a/cake/console/templates/skel/views/layouts/xml/default.ctp b/cake/console/templates/skel/views/layouts/xml/default.ctp new file mode 100644 index 0000000..566ca21 --- /dev/null +++ b/cake/console/templates/skel/views/layouts/xml/default.ctp @@ -0,0 +1,2 @@ +header(); ?> + \ No newline at end of file diff --git a/cake/console/templates/skel/views/pages/.svn/entries b/cake/console/templates/skel/views/pages/.svn/entries new file mode 100644 index 0000000..25cb682 --- /dev/null +++ b/cake/console/templates/skel/views/pages/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/views/pages +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-08-30T06:36:26.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/cake/console/templates/skel/views/pages/.svn/text-base/empty.svn-base b/cake/console/templates/skel/views/pages/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/views/pages/empty b/cake/console/templates/skel/views/pages/empty new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/views/scaffolds/.svn/entries b/cake/console/templates/skel/views/scaffolds/.svn/entries new file mode 100644 index 0000000..45f3b0d --- /dev/null +++ b/cake/console/templates/skel/views/scaffolds/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/views/scaffolds +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-08-30T06:36:26.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/cake/console/templates/skel/views/scaffolds/.svn/text-base/empty.svn-base b/cake/console/templates/skel/views/scaffolds/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/views/scaffolds/empty b/cake/console/templates/skel/views/scaffolds/empty new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/webroot/.htaccess b/cake/console/templates/skel/webroot/.htaccess new file mode 100644 index 0000000..f9d8b93 --- /dev/null +++ b/cake/console/templates/skel/webroot/.htaccess @@ -0,0 +1,6 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] + \ No newline at end of file diff --git a/cake/console/templates/skel/webroot/.svn/entries b/cake/console/templates/skel/webroot/.svn/entries new file mode 100644 index 0000000..d68b7f0 --- /dev/null +++ b/cake/console/templates/skel/webroot/.svn/entries @@ -0,0 +1,207 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/webroot +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +test.php +file + + + + +2010-08-30T06:36:26.000000Z +e267a8c7d17f6f7a64e845778f32ae86 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3014 + +css +dir + +.htaccess +file + + + + +2010-08-30T06:36:26.000000Z +b8583bb1e56a044887b62b2f3c935ddd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +185 + +img +dir + +js +dir + +index.php +file + + + + +2010-08-30T06:36:26.000000Z +070cb84d2046d9c9cfa2d63ea84815c7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2641 + +css.php +file + + + + +2010-08-30T06:36:26.000000Z +fbb7ca6d81b5b72bee1798279034628a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2668 + +favicon.ico +file + + + + +2010-08-30T06:36:26.000000Z +66b3119d379aee26ba668fef49188dd3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido +has-props + + + + + + + + + + + + + + + + + + + + +372 + diff --git a/cake/console/templates/skel/webroot/.svn/prop-base/favicon.ico.svn-base b/cake/console/templates/skel/webroot/.svn/prop-base/favicon.ico.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/cake/console/templates/skel/webroot/.svn/prop-base/favicon.ico.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/cake/console/templates/skel/webroot/.svn/text-base/.htaccess.svn-base b/cake/console/templates/skel/webroot/.svn/text-base/.htaccess.svn-base new file mode 100644 index 0000000..f9d8b93 --- /dev/null +++ b/cake/console/templates/skel/webroot/.svn/text-base/.htaccess.svn-base @@ -0,0 +1,6 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] + \ No newline at end of file diff --git a/cake/console/templates/skel/webroot/.svn/text-base/css.php.svn-base b/cake/console/templates/skel/webroot/.svn/text-base/css.php.svn-base new file mode 100644 index 0000000..1f04005 --- /dev/null +++ b/cake/console/templates/skel/webroot/.svn/text-base/css.php.svn-base @@ -0,0 +1,97 @@ +compress($data); + $ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100); + $output = " /* file: $name, ratio: $ratio% */ " . $output; + return $output; + } + +/** + * Write CSS cache + * + * @param unknown_type $path + * @param unknown_type $content + * @return unknown + */ + function write_css_cache($path, $content) { + if (!is_dir(dirname($path))) { + mkdir(dirname($path)); + } + $cache = new File($path); + return $cache->write($content); + } + + if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) { + exit('Wrong file name.'); + } + + $filename = 'css/' . $regs[1]; + $filepath = CSS . $regs[1]; + $cachepath = CACHE . 'css' . DS . str_replace(array('/','\\'), '-', $regs[1]); + + if (!file_exists($filepath)) { + exit('Wrong file name.'); + } + + if (file_exists($cachepath)) { + $templateModified = filemtime($filepath); + $cacheModified = filemtime($cachepath); + + if ($templateModified > $cacheModified) { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + } else { + $output = file_get_contents($cachepath); + } + } else { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + $templateModified = time(); + } + + header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); + header("Content-Type: text/css"); + header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT"); + header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 + header("Pragma: cache"); // HTTP/1.0 + print $output; diff --git a/cake/console/templates/skel/webroot/.svn/text-base/favicon.ico.svn-base b/cake/console/templates/skel/webroot/.svn/text-base/favicon.ico.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..b36e81f2f35133dede48dc18f78d3e1a3353f7bc GIT binary patch literal 372 zcmV-)0gL{LP)Ce4&o}{bgKX)=r-B_#-Qs`WM)Da5Prgl zsZ%T@FChJjuHh1`0m$SsVlk8KBKw^@522Z3S}fqzqUy4nLhVp$W)@MMy#WF!pk3U7 zB65kQi)kZ#rBYK5tRifZI?>XjFU4<@lsph9Z1>blC@{qW13mof`13?K&cOa zdispatch(); + } diff --git a/cake/console/templates/skel/webroot/.svn/text-base/test.php.svn-base b/cake/console/templates/skel/webroot/.svn/text-base/test.php.svn-base new file mode 100644 index 0000000..0655a65 --- /dev/null +++ b/cake/console/templates/skel/webroot/.svn/text-base/test.php.svn-base @@ -0,0 +1,94 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +set_time_limit(0); +ini_set('display_errors', 1); +/** + * Use the DS to separate the directories in other defines + */ + if (!defined('DS')) { + define('DS', DIRECTORY_SEPARATOR); + } +/** + * These defines should only be edited if you have cake installed in + * a directory layout other than the way it is distributed. + * When using custom settings be sure to use the DS and do not add a trailing DS. + */ + +/** + * The full path to the directory which holds "app", WITHOUT a trailing DS. + * + */ + if (!defined('ROOT')) { + define('ROOT', dirname(dirname(dirname(__FILE__)))); + } +/** + * The actual directory name for the "app". + * + */ + if (!defined('APP_DIR')) { + define('APP_DIR', basename(dirname(dirname(__FILE__)))); + } +/** + * The absolute path to the "cake" directory, WITHOUT a trailing DS. + * + */ + if (!defined('CAKE_CORE_INCLUDE_PATH')) { + define('CAKE_CORE_INCLUDE_PATH', ROOT); + } + +/** + * Editing below this line should not be necessary. + * Change at your own risk. + * + */ +if (!defined('WEBROOT_DIR')) { + define('WEBROOT_DIR', basename(dirname(__FILE__))); +} +if (!defined('WWW_ROOT')) { + define('WWW_ROOT', dirname(__FILE__) . DS); +} +if (!defined('CORE_PATH')) { + if (function_exists('ini_set') && ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'))) { + define('APP_PATH', null); + define('CORE_PATH', null); + } else { + define('APP_PATH', ROOT . DS . APP_DIR . DS); + define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); + } +} +if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { + trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); +} + +$corePath = App::core('cake'); +if (isset($corePath[0])) { + define('TEST_CAKE_CORE_INCLUDE_PATH', rtrim($corePath[0], DS) . DS); +} else { + define('TEST_CAKE_CORE_INCLUDE_PATH', CAKE_CORE_INCLUDE_PATH); +} + +if (Configure::read('debug') < 1) { + die(__('Debug setting does not allow access to this url.', true)); +} + +require_once CAKE_TESTS_LIB . 'cake_test_suite_dispatcher.php'; + +$Dispatcher = new CakeTestSuiteDispatcher(); +$Dispatcher->dispatch(); diff --git a/cake/console/templates/skel/webroot/css.php b/cake/console/templates/skel/webroot/css.php new file mode 100644 index 0000000..1f04005 --- /dev/null +++ b/cake/console/templates/skel/webroot/css.php @@ -0,0 +1,97 @@ +compress($data); + $ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100); + $output = " /* file: $name, ratio: $ratio% */ " . $output; + return $output; + } + +/** + * Write CSS cache + * + * @param unknown_type $path + * @param unknown_type $content + * @return unknown + */ + function write_css_cache($path, $content) { + if (!is_dir(dirname($path))) { + mkdir(dirname($path)); + } + $cache = new File($path); + return $cache->write($content); + } + + if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) { + exit('Wrong file name.'); + } + + $filename = 'css/' . $regs[1]; + $filepath = CSS . $regs[1]; + $cachepath = CACHE . 'css' . DS . str_replace(array('/','\\'), '-', $regs[1]); + + if (!file_exists($filepath)) { + exit('Wrong file name.'); + } + + if (file_exists($cachepath)) { + $templateModified = filemtime($filepath); + $cacheModified = filemtime($cachepath); + + if ($templateModified > $cacheModified) { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + } else { + $output = file_get_contents($cachepath); + } + } else { + $output = make_clean_css($filepath, $filename); + write_css_cache($cachepath, $output); + $templateModified = time(); + } + + header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); + header("Content-Type: text/css"); + header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT"); + header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 + header("Pragma: cache"); // HTTP/1.0 + print $output; diff --git a/cake/console/templates/skel/webroot/css/.svn/entries b/cake/console/templates/skel/webroot/css/.svn/entries new file mode 100644 index 0000000..2585732 --- /dev/null +++ b/cake/console/templates/skel/webroot/css/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/webroot/css +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +cake.generic.css +file + + + + +2010-08-30T06:36:26.000000Z +ddffb9cea5f2a1aa5bc1e57c267d31eb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +9208 + diff --git a/cake/console/templates/skel/webroot/css/.svn/text-base/cake.generic.css.svn-base b/cake/console/templates/skel/webroot/css/.svn/text-base/cake.generic.css.svn-base new file mode 100644 index 0000000..4d0161f --- /dev/null +++ b/cake/console/templates/skel/webroot/css/.svn/text-base/cake.generic.css.svn-base @@ -0,0 +1,535 @@ +/** + * + * Generic CSS for CakePHP + * + * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.app.webroot.css + * @since CakePHP(tm) + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ + +* { + margin:0; + padding:0; +} + +/** General Style Info **/ +body { + background: #003d4c; + color: #fff; + font-family:'lucida grande',verdana,helvetica,arial,sans-serif; + font-size:90%; + margin: 0; +} +a { + color: #003d4c; + text-decoration: underline; + font-weight: bold; +} +a:hover { + color: #367889; + text-decoration:none; +} +a img { + border:none; +} +h1, h2, h3, h4 { + font-weight: normal; + margin-bottom:0.5em; +} +h1 { + background:#fff; + color: #003d4c; + font-size: 100%; +} +h2 { + background:#fff; + color: #e32; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 190%; +} +h3 { + color: #993; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 165%; +} +h4 { + color: #993; + font-weight: normal; +} +ul, li { + margin: 0 12px; +} + +/** Layout **/ +#container { + text-align: left; +} + +#header{ + padding: 10px 20px; +} +#header h1 { + line-height:20px; + background: #003d4c url('../img/cake.icon.gif') no-repeat left; + color: #fff; + padding: 0px 30px; +} +#header h1 a { + color: #fff; + background: #003d4c; + font-weight: normal; + text-decoration: none; +} +#header h1 a:hover { + color: #fff; + background: #003d4c; + text-decoration: underline; +} +#content{ + background: #fff; + clear: both; + color: #333; + padding: 10px 20px 40px 20px; + overflow: auto; +} +#footer { + clear: both; + padding: 6px 10px; + text-align: right; +} + +/** containers **/ +div.form, +div.index, +div.view { + float:right; + width:76%; + border-left:1px solid #666; + padding:10px 2%; +} +div.actions { + float:left; + width:16%; + padding:10px 1.5%; +} +div.actions h3 { + padding-top:0; + color:#777; +} + + +/** Tables **/ +table { + background: #fff; + border-right:0; + clear: both; + color: #333; + margin-bottom: 10px; + width: 100%; +} +th { + border:0; + border-bottom:2px solid #555; + text-align: left; + padding:4px; +} +th a { + display: block; + padding: 2px 4px; + text-decoration: none; +} +th a.asc:after { + content: ' ⇣'; +} +th a.desc:after { + content: ' ⇡'; +} +table tr td { + background: #fff; + padding: 6px; + text-align: left; + vertical-align: top; + border-bottom:1px solid #ddd; +} +table tr:nth-child(2n) td { + background: #f5f5f5; +} +table .altrow td { + background: #f5f5f5; +} +td.actions { + text-align: center; + white-space: nowrap; +} +table td.actions a { + margin: 0px 6px; + padding:2px 5px; +} +.cake-sql-log table { + background: #f4f4f4; +} +.cake-sql-log td { + padding: 4px 8px; + text-align: left; + font-family: Monaco, Consolas, "Courier New", monospaced; +} +.cake-sql-log caption { + color:#fff; +} + +/** Paging **/ +div.paging { + background:#fff; + color: #ccc; + margin-top: 1em; + clear:both; +} +div.paging span.disabled { + color: #ddd; + display: inline; +} +div.paging span.current { + color: #c73e14; +} +div.paging span a { +} + +/** Scaffold View **/ +dl { + line-height: 2em; + margin: 0em 0em; + width: 60%; +} +dl .altrow { + background: #f4f4f4; +} +dt { + font-weight: bold; + padding-left: 4px; + vertical-align: top; +} +dd { + margin-left: 10em; + margin-top: -2em; + vertical-align: top; +} + +/** Forms **/ +form { + clear: both; + margin-right: 20px; + padding: 0; + width: 95%; +} +fieldset { + border: 1px solid #ccc; + margin-bottom: 1em; + padding: 16px 20px; +} +fieldset legend { + background:#fff; + color: #e32; + font-size: 160%; + font-weight: bold; +} +fieldset fieldset { + margin-top: 0px; + margin-bottom: 20px; + padding: 16px 10px; +} +fieldset fieldset legend { + font-size: 120%; + font-weight: normal; +} +fieldset fieldset div { + clear: left; + margin: 0 20px; +} +form div { + clear: both; + margin-bottom: 1em; + padding: .5em; + vertical-align: text-top; +} +form .input { + color: #444; +} +form .required { + font-weight: bold; +} +form .required label:after { + color: #e32; + content: '*'; + display:inline; +} +form div.submit { + border: 0; + clear: both; + margin-top: 10px; +} +label { + display: block; + font-size: 110%; + margin-bottom:3px; +} +input, textarea { + clear: both; + font-size: 140%; + font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif; + padding: 1%; + width:98%; +} +select { + clear: both; + font-size: 120%; + vertical-align: text-bottom; +} +select[multiple=multiple] { + width: 100%; +} +option { + font-size: 120%; + padding: 0 3px; +} +input[type=checkbox] { + clear: left; + float: left; + margin: 0px 6px 7px 2px; + width: auto; +} +div.checkbox label { + display: inline; +} +input[type=radio] { + float:left; + width:auto; + margin: 0 3px 7px 0; +} +div.radio label { + margin: 0 0 6px 20px; +} +input[type=submit] { + display: inline; + font-size: 110%; + width: auto; +} +form .submit input[type=submit] { + background:#62af56; + background: -webkit-gradient(linear, left top, left bottom, from(#a8ea9c), to(#62af56)); + background-image: -moz-linear-gradient(top, #a8ea9c, #62af56); + border-color: #2d6324; + color: #000; + text-shadow: #8cee7c 0px 1px 0px; +} +form .submit input[type=submit]:hover { + background:#4ca83d; + background: -webkit-gradient(linear, left top, left bottom, from(#85e573), to(#4ca83d)); + background-image: -moz-linear-gradient(top, #85e573, #4ca83d); +} + +/** Notices and Errors **/ +div.message { + clear: both; + color: #fff; + font-size: 140%; + font-weight: bold; + margin: 0 0 1em 0; + background: #c73e14; + padding: 5px; +} +div.error-message { + clear: both; + color: #fff; + font-weight: bold; + background: #c73e14; +} +p.error { + background-color: #e32; + color: #fff; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +p.error em { + color: #000; + font-weight: normal; + line-height: 140%; +} +.notice { + background: #ffcc00; + color: #000; + display: block; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +.success { + background: green; + color: #fff; +} + +/** Actions **/ +div.actions ul { + margin: 0; + padding: 0; +} +div.actions li { + margin:0 0 0.5em 0; + list-style-type: none; + white-space: nowrap; + padding: 0; +} +div.actions ul li a { + font-weight: normal; + display: block; + clear: both; +} +div.actions ul li a:hover { + text-decoration: underline; +} + +input[type=submit], +div.actions ul li a, +td.actions a { + font-weight:normal; + padding: 4px 8px; + background:#e6e49f; + background: -webkit-gradient(linear, left top, left bottom, from(#f1f1d4), to(#e6e49f)); + background-image: -moz-linear-gradient(top, #f1f1d4, #e6e49f); + color:#333; + border:1px solid #aaac62; + -webkit-border-radius:8px; + -moz-border-radius:8px; + border-radius:8px; + text-decoration:none; + text-shadow: #fff 0px 1px 0px; + min-width: 0; +} +input[type=submit]:hover, +div.actions ul li a:hover, +td.actions a:hover { + background: #f0f09a; + background: -webkit-gradient(linear, left top, left bottom, from(#f7f7e1), to(#eeeca9)); +} + +/** Related **/ +div.related { + clear: both; + display: block; +} + +/** Debugging **/ +pre { + color: #000; + background: #f0f0f0; + padding: 1em; +} +pre.cake-debug { + background: #ffcc00; + font-size: 120%; + line-height: 140%; + margin-top: 1em; + overflow: auto; + position: relative; +} +div.cake-stack-trace { + background: #fff; + color: #333; + margin: 0px; + padding: 6px; + font-size: 120%; + line-height: 140%; + overflow: auto; + position: relative; +} +div.cake-code-dump pre { + position: relative; + overflow: auto; +} +div.cake-stack-trace pre, div.cake-code-dump pre { + color: #000; + background-color: #F0F0F0; + margin: 0px; + padding: 1em; + overflow: auto; +} +div.cake-code-dump pre, div.cake-code-dump pre code { + clear: both; + font-size: 12px; + line-height: 15px; + margin: 4px 2px; + padding: 4px; + overflow: auto; +} +div.cake-code-dump span.code-highlight { + background-color: #ff0; + padding: 4px; +} +div.code-coverage-results div.code-line { + padding-left:5px; + display:block; + margin-left:10px; +} +div.code-coverage-results div.uncovered span.content { + background:#ecc; +} +div.code-coverage-results div.covered span.content { + background:#cec; +} +div.code-coverage-results div.ignored span.content { + color:#aaa; +} +div.code-coverage-results span.line-num { + color:#666; + display:block; + float:left; + width:20px; + text-align:right; + margin-right:5px; +} +div.code-coverage-results span.line-num strong { + color:#666; +} +div.code-coverage-results div.start { + border:1px solid #aaa; + border-width:1px 1px 0px 1px; + margin-top:30px; + padding-top:5px; +} +div.code-coverage-results div.end { + border:1px solid #aaa; + border-width:0px 1px 1px 1px; + margin-bottom:30px; + padding-bottom:5px; +} +div.code-coverage-results div.realstart { + margin-top:0px; +} +div.code-coverage-results p.note { + color:#bbb; + padding:5px; + margin:5px 0 10px; + font-size:10px; +} +div.code-coverage-results span.result-bad { + color: #a00; +} +div.code-coverage-results span.result-ok { + color: #fa0; +} +div.code-coverage-results span.result-good { + color: #0a0; +} diff --git a/cake/console/templates/skel/webroot/css/cake.generic.css b/cake/console/templates/skel/webroot/css/cake.generic.css new file mode 100644 index 0000000..7f978af --- /dev/null +++ b/cake/console/templates/skel/webroot/css/cake.generic.css @@ -0,0 +1,535 @@ +/** + * + * Generic CSS for CakePHP + * + * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.app.webroot.css + * @since CakePHP(tm) + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ + +* { + margin:0; + padding:0; +} + +/** General Style Info **/ +body { + background: #003d4c; + color: #fff; + font-family:'lucida grande',verdana,helvetica,arial,sans-serif; + font-size:90%; + margin: 0; +} +a { + color: #003d4c; + text-decoration: underline; + font-weight: bold; +} +a:hover { + color: #367889; + text-decoration:none; +} +a img { + border:none; +} +h1, h2, h3, h4 { + font-weight: normal; + margin-bottom:0.5em; +} +h1 { + background:#fff; + color: #003d4c; + font-size: 100%; +} +h2 { + background:#fff; + color: #e32; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 190%; +} +h3 { + color: #993; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 165%; +} +h4 { + color: #993; + font-weight: normal; +} +ul, li { + margin: 0 12px; +} + +/** Layout **/ +#container { + text-align: left; +} + +#header{ + padding: 10px 20px; +} +#header h1 { + line-height:20px; + background: #003d4c url('../img/cake.icon.png') no-repeat left; + color: #fff; + padding: 0px 30px; +} +#header h1 a { + color: #fff; + background: #003d4c; + font-weight: normal; + text-decoration: none; +} +#header h1 a:hover { + color: #fff; + background: #003d4c; + text-decoration: underline; +} +#content{ + background: #fff; + clear: both; + color: #333; + padding: 10px 20px 40px 20px; + overflow: auto; +} +#footer { + clear: both; + padding: 6px 10px; + text-align: right; +} + +/** containers **/ +div.form, +div.index, +div.view { + float:right; + width:76%; + border-left:1px solid #666; + padding:10px 2%; +} +div.actions { + float:left; + width:16%; + padding:10px 1.5%; +} +div.actions h3 { + padding-top:0; + color:#777; +} + + +/** Tables **/ +table { + background: #fff; + border-right:0; + clear: both; + color: #333; + margin-bottom: 10px; + width: 100%; +} +th { + border:0; + border-bottom:2px solid #555; + text-align: left; + padding:4px; +} +th a { + display: block; + padding: 2px 4px; + text-decoration: none; +} +th a.asc:after { + content: ' ⇣'; +} +th a.desc:after { + content: ' ⇡'; +} +table tr td { + background: #fff; + padding: 6px; + text-align: left; + vertical-align: top; + border-bottom:1px solid #ddd; +} +table tr:nth-child(2n) td { + background: #f5f5f5; +} +table .altrow td { + background: #f5f5f5; +} +td.actions { + text-align: center; + white-space: nowrap; +} +table td.actions a { + margin: 0px 6px; + padding:2px 5px; +} +.cake-sql-log table { + background: #f4f4f4; +} +.cake-sql-log td { + padding: 4px 8px; + text-align: left; + font-family: Monaco, Consolas, "Courier New", monospaced; +} +.cake-sql-log caption { + color:#fff; +} + +/** Paging **/ +div.paging { + background:#fff; + color: #ccc; + margin-top: 1em; + clear:both; +} +div.paging span.disabled { + color: #ddd; + display: inline; +} +div.paging span.current { + color: #c73e14; +} +div.paging span a { +} + +/** Scaffold View **/ +dl { + line-height: 2em; + margin: 0em 0em; + width: 60%; +} +dl .altrow { + background: #f4f4f4; +} +dt { + font-weight: bold; + padding-left: 4px; + vertical-align: top; +} +dd { + margin-left: 10em; + margin-top: -2em; + vertical-align: top; +} + +/** Forms **/ +form { + clear: both; + margin-right: 20px; + padding: 0; + width: 95%; +} +fieldset { + border: 1px solid #ccc; + margin-bottom: 1em; + padding: 16px 20px; +} +fieldset legend { + background:#fff; + color: #e32; + font-size: 160%; + font-weight: bold; +} +fieldset fieldset { + margin-top: 0px; + margin-bottom: 20px; + padding: 16px 10px; +} +fieldset fieldset legend { + font-size: 120%; + font-weight: normal; +} +fieldset fieldset div { + clear: left; + margin: 0 20px; +} +form div { + clear: both; + margin-bottom: 1em; + padding: .5em; + vertical-align: text-top; +} +form .input { + color: #444; +} +form .required { + font-weight: bold; +} +form .required label:after { + color: #e32; + content: '*'; + display:inline; +} +form div.submit { + border: 0; + clear: both; + margin-top: 10px; +} +label { + display: block; + font-size: 110%; + margin-bottom:3px; +} +input, textarea { + clear: both; + font-size: 140%; + font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif; + padding: 1%; + width:98%; +} +select { + clear: both; + font-size: 120%; + vertical-align: text-bottom; +} +select[multiple=multiple] { + width: 100%; +} +option { + font-size: 120%; + padding: 0 3px; +} +input[type=checkbox] { + clear: left; + float: left; + margin: 0px 6px 7px 2px; + width: auto; +} +div.checkbox label { + display: inline; +} +input[type=radio] { + float:left; + width:auto; + margin: 0 3px 7px 0; +} +div.radio label { + margin: 0 0 6px 20px; +} +input[type=submit] { + display: inline; + font-size: 110%; + width: auto; +} +form .submit input[type=submit] { + background:#62af56; + background: -webkit-gradient(linear, left top, left bottom, from(#a8ea9c), to(#62af56)); + background-image: -moz-linear-gradient(top, #a8ea9c, #62af56); + border-color: #2d6324; + color: #000; + text-shadow: #8cee7c 0px 1px 0px; +} +form .submit input[type=submit]:hover { + background:#4ca83d; + background: -webkit-gradient(linear, left top, left bottom, from(#85e573), to(#4ca83d)); + background-image: -moz-linear-gradient(top, #85e573, #4ca83d); +} + +/** Notices and Errors **/ +div.message { + clear: both; + color: #fff; + font-size: 140%; + font-weight: bold; + margin: 0 0 1em 0; + background: #c73e14; + padding: 5px; +} +div.error-message { + clear: both; + color: #fff; + font-weight: bold; + background: #c73e14; +} +p.error { + background-color: #e32; + color: #fff; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +p.error em { + color: #000; + font-weight: normal; + line-height: 140%; +} +.notice { + background: #ffcc00; + color: #000; + display: block; + font-family: Courier, monospace; + font-size: 120%; + line-height: 140%; + padding: 0.8em; + margin: 1em 0; +} +.success { + background: green; + color: #fff; +} + +/** Actions **/ +div.actions ul { + margin: 0; + padding: 0; +} +div.actions li { + margin:0 0 0.5em 0; + list-style-type: none; + white-space: nowrap; + padding: 0; +} +div.actions ul li a { + font-weight: normal; + display: block; + clear: both; +} +div.actions ul li a:hover { + text-decoration: underline; +} + +input[type=submit], +div.actions ul li a, +td.actions a { + font-weight:normal; + padding: 4px 8px; + background:#e6e49f; + background: -webkit-gradient(linear, left top, left bottom, from(#f1f1d4), to(#e6e49f)); + background-image: -moz-linear-gradient(top, #f1f1d4, #e6e49f); + color:#333; + border:1px solid #aaac62; + -webkit-border-radius:8px; + -moz-border-radius:8px; + border-radius:8px; + text-decoration:none; + text-shadow: #fff 0px 1px 0px; + min-width: 0; +} +input[type=submit]:hover, +div.actions ul li a:hover, +td.actions a:hover { + background: #f0f09a; + background: -webkit-gradient(linear, left top, left bottom, from(#f7f7e1), to(#eeeca9)); +} + +/** Related **/ +div.related { + clear: both; + display: block; +} + +/** Debugging **/ +pre { + color: #000; + background: #f0f0f0; + padding: 1em; +} +pre.cake-debug { + background: #ffcc00; + font-size: 120%; + line-height: 140%; + margin-top: 1em; + overflow: auto; + position: relative; +} +div.cake-stack-trace { + background: #fff; + color: #333; + margin: 0px; + padding: 6px; + font-size: 120%; + line-height: 140%; + overflow: auto; + position: relative; +} +div.cake-code-dump pre { + position: relative; + overflow: auto; +} +div.cake-stack-trace pre, div.cake-code-dump pre { + color: #000; + background-color: #F0F0F0; + margin: 0px; + padding: 1em; + overflow: auto; +} +div.cake-code-dump pre, div.cake-code-dump pre code { + clear: both; + font-size: 12px; + line-height: 15px; + margin: 4px 2px; + padding: 4px; + overflow: auto; +} +div.cake-code-dump span.code-highlight { + background-color: #ff0; + padding: 4px; +} +div.code-coverage-results div.code-line { + padding-left:5px; + display:block; + margin-left:10px; +} +div.code-coverage-results div.uncovered span.content { + background:#ecc; +} +div.code-coverage-results div.covered span.content { + background:#cec; +} +div.code-coverage-results div.ignored span.content { + color:#aaa; +} +div.code-coverage-results span.line-num { + color:#666; + display:block; + float:left; + width:20px; + text-align:right; + margin-right:5px; +} +div.code-coverage-results span.line-num strong { + color:#666; +} +div.code-coverage-results div.start { + border:1px solid #aaa; + border-width:1px 1px 0px 1px; + margin-top:30px; + padding-top:5px; +} +div.code-coverage-results div.end { + border:1px solid #aaa; + border-width:0px 1px 1px 1px; + margin-bottom:30px; + padding-bottom:5px; +} +div.code-coverage-results div.realstart { + margin-top:0px; +} +div.code-coverage-results p.note { + color:#bbb; + padding:5px; + margin:5px 0 10px; + font-size:10px; +} +div.code-coverage-results span.result-bad { + color: #a00; +} +div.code-coverage-results span.result-ok { + color: #fa0; +} +div.code-coverage-results span.result-good { + color: #0a0; +} diff --git a/cake/console/templates/skel/webroot/favicon.ico b/cake/console/templates/skel/webroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b36e81f2f35133dede48dc18f78d3e1a3353f7bc GIT binary patch literal 372 zcmV-)0gL{LP)Ce4&o}{bgKX)=r-B_#-Qs`WM)Da5Prgl zsZ%T@FChJjuHh1`0m$SsVlk8KBKw^@522Z3S}fqzqUy4nLhVp$W)@MMy#WF!pk3U7 zB65kQi)kZ#rBYK5tRifZI?>XjFU4<@lsph9Z1>blC@{qW13mof`13?K&cOa z9q)cr7> zIGsQFGn3| zCzs2iP$-yfVPOGVTU&6sT(-5fwHb2tVsLP9#{Vr9Ct?R7q(rf?v2A5#W$OI=e1YUJ zQ1YRnA&iWSQ1XYAm__>aYb6XIhMiYVD+-z8_pYi6+CsH{*^m;vOjqvbr=H&DFkeqxHQBh$Scsoy0Glw(T zsaSG*ok62V;~yXYNgP*DUw;o98^+0@vGFb{HC+As}XJ=;xg=B7N_;-mKbHH{|lXs_o+aPcs5~J?s%^P2Odb)Uz z$GvY6^!N9(C2-h?28B$qx7%_yHnt2eU%nQ0qThbl6a_+b)EirjBgQ`g1_07Fr&6R? RzIgxu002ovPDHLkV1mdlwUYn< literal 0 HcmV?d00001 diff --git a/cake/console/templates/skel/webroot/img/.svn/text-base/cake.power.gif.svn-base b/cake/console/templates/skel/webroot/img/.svn/text-base/cake.power.gif.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..8f8d570a2e24d86f0ad7730ee8f2435fd49f152c GIT binary patch literal 201 zcmV;)05<&ZTq0L2I(c1A@d@rg`ENj#vn zcl`yi#iKX*jb2F7vd0WQgUq5Tw}Jp}g+ZnCeBY3dYNI+m71%bHRfx4UCkD2th(Q*@ zmd5r+MJNYn79q)cr7> zIGsQFGn3| zCzs2iP$-yfVPOGVTU&6sT(-5fwHb2tVsLP9#{Vr9Ct?R7q(rf?v2A5#W$OI=e1YUJ zQ1YRnA&iWSQ1XYAm__>aYb6XIhMiYVD+-z8_pYi6+CsH{*^m;vOjqvbr=H&DFkeqxHQBh$Scsoy0Glw(T zsaSG*ok62V;~yXYNgP*DUw;o98^+0@vGFb{HC+As}XJ=;xg=B7N_;-mKbHH{|lXs_o+aPcs5~J?s%^P2Odb)Uz z$GvY6^!N9(C2-h?28B$qx7%_yHnt2eU%nQ0qThbl6a_+b)EirjBgQ`g1_07Fr&6R? RzIgxu002ovPDHLkV1mdlwUYn< literal 0 HcmV?d00001 diff --git a/cake/console/templates/skel/webroot/img/cake.power.gif b/cake/console/templates/skel/webroot/img/cake.power.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f8d570a2e24d86f0ad7730ee8f2435fd49f152c GIT binary patch literal 201 zcmV;)05<&ZTq0L2I(c1A@d@rg`ENj#vn zcl`yi#iKX*jb2F7vd0WQgUq5Tw}Jp}g+ZnCeBY3dYNI+m71%bHRfx4UCkD2th(Q*@ zmd5r+MJNYn7dispatch(); + } diff --git a/cake/console/templates/skel/webroot/js/.svn/entries b/cake/console/templates/skel/webroot/js/.svn/entries new file mode 100644 index 0000000..46a5af2 --- /dev/null +++ b/cake/console/templates/skel/webroot/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/console/templates/skel/webroot/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-08-30T06:36:26.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/cake/console/templates/skel/webroot/js/.svn/text-base/empty.svn-base b/cake/console/templates/skel/webroot/js/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/webroot/js/empty b/cake/console/templates/skel/webroot/js/empty new file mode 100644 index 0000000..e69de29 diff --git a/cake/console/templates/skel/webroot/test.php b/cake/console/templates/skel/webroot/test.php new file mode 100644 index 0000000..cfbf851 --- /dev/null +++ b/cake/console/templates/skel/webroot/test.php @@ -0,0 +1,94 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +set_time_limit(0); +ini_set('display_errors', 1); +/** + * Use the DS to separate the directories in other defines + */ + if (!defined('DS')) { + define('DS', DIRECTORY_SEPARATOR); + } +/** + * These defines should only be edited if you have cake installed in + * a directory layout other than the way it is distributed. + * When using custom settings be sure to use the DS and do not add a trailing DS. + */ + +/** + * The full path to the directory which holds "app", WITHOUT a trailing DS. + * + */ + if (!defined('ROOT')) { + define('ROOT', dirname(dirname(dirname(__FILE__)))); + } +/** + * The actual directory name for the "app". + * + */ + if (!defined('APP_DIR')) { + define('APP_DIR', basename(dirname(dirname(__FILE__)))); + } +/** + * The absolute path to the "cake" directory, WITHOUT a trailing DS. + * + */ + if (!defined('CAKE_CORE_INCLUDE_PATH')) { + define('CAKE_CORE_INCLUDE_PATH', ROOT); + } + +/** + * Editing below this line should not be necessary. + * Change at your own risk. + * + */ +if (!defined('WEBROOT_DIR')) { + define('WEBROOT_DIR', basename(dirname(__FILE__))); +} +if (!defined('WWW_ROOT')) { + define('WWW_ROOT', dirname(__FILE__) . DS); +} +if (!defined('CORE_PATH')) { + if (function_exists('ini_set') && ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'))) { + define('APP_PATH', null); + define('CORE_PATH', null); + } else { + define('APP_PATH', ROOT . DS . APP_DIR . DS); + define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); + } +} +if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { + trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); +} + +$corePath = App::core('cake'); +if (isset($corePath[0])) { + define('TEST_CAKE_CORE_INCLUDE_PATH', rtrim($corePath[0], DS) . DS); +} else { + define('TEST_CAKE_CORE_INCLUDE_PATH', CAKE_CORE_INCLUDE_PATH); +} + +if (Configure::read('debug') < 1) { + die(__('Debug setting does not allow access to this url.', true)); +} + +require_once CAKE_TESTS_LIB . 'cake_test_suite_dispatcher.php'; + +$Dispatcher = new CakeTestSuiteDispatcher(); +$Dispatcher->dispatch(); diff --git a/cake/dispatcher.php b/cake/dispatcher.php new file mode 100644 index 0000000..bc4b5a7 --- /dev/null +++ b/cake/dispatcher.php @@ -0,0 +1,662 @@ +dispatch($url); + } + } + +/** + * Dispatches and invokes given URL, handing over control to the involved controllers, and then renders the + * results (if autoRender is set). + * + * If no controller of given name can be found, invoke() shows error messages in + * the form of Missing Controllers information. It does the same with Actions (methods of Controllers are called + * Actions). + * + * @param string $url URL information to work on + * @param array $additionalParams Settings array ("bare", "return") which is melded with the GET and POST params + * @return boolean Success + * @access public + */ + function dispatch($url = null, $additionalParams = array()) { + if ($this->base === false) { + $this->base = $this->baseUrl(); + } + + if (is_array($url)) { + $url = $this->__extractParams($url, $additionalParams); + } else { + if ($url) { + $_GET['url'] = $url; + } + $url = $this->getUrl(); + $this->params = array_merge($this->parseParams($url), $additionalParams); + } + $this->here = $this->base . '/' . $url; + + if ($this->asset($url) || $this->cached($url)) { + return; + } + $controller =& $this->__getController(); + + if (!is_object($controller)) { + Router::setRequestInfo(array($this->params, array('base' => $this->base, 'webroot' => $this->webroot))); + return $this->cakeError('missingController', array(array( + 'className' => Inflector::camelize($this->params['controller']) . 'Controller', + 'webroot' => $this->webroot, + 'url' => $url, + 'base' => $this->base + ))); + } + $privateAction = $this->params['action'][0] === '_'; + $prefixes = Router::prefixes(); + + if (!empty($prefixes)) { + if (isset($this->params['prefix'])) { + $this->params['action'] = $this->params['prefix'] . '_' . $this->params['action']; + } elseif (strpos($this->params['action'], '_') > 0) { + list($prefix, $action) = explode('_', $this->params['action']); + $privateAction = in_array($prefix, $prefixes); + } + } + + Router::setRequestInfo(array( + $this->params, array('base' => $this->base, 'here' => $this->here, 'webroot' => $this->webroot) + )); + + if ($privateAction) { + return $this->cakeError('privateAction', array(array( + 'className' => Inflector::camelize($this->params['controller'] . "Controller"), + 'action' => $this->params['action'], + 'webroot' => $this->webroot, + 'url' => $url, + 'base' => $this->base + ))); + } + $controller->base = $this->base; + $controller->here = $this->here; + $controller->webroot = $this->webroot; + $controller->plugin = isset($this->params['plugin']) ? $this->params['plugin'] : null; + $controller->params =& $this->params; + $controller->action =& $this->params['action']; + $controller->passedArgs = array_merge($this->params['pass'], $this->params['named']); + + if (!empty($this->params['data'])) { + $controller->data =& $this->params['data']; + } else { + $controller->data = null; + } + if (isset($this->params['return']) && $this->params['return'] == 1) { + $controller->autoRender = false; + } + if (!empty($this->params['bare'])) { + $controller->autoLayout = false; + } + return $this->_invoke($controller, $this->params); + } + +/** + * Initializes the components and models a controller will be using. + * Triggers the controller action, and invokes the rendering if Controller::$autoRender is true and echo's the output. + * Otherwise the return value of the controller action are returned. + * + * @param object $controller Controller to invoke + * @param array $params Parameters with at least the 'action' to invoke + * @param boolean $missingAction Set to true if missing action should be rendered, false otherwise + * @return string Output as sent by controller + * @access protected + */ + function _invoke(&$controller, $params) { + $controller->constructClasses(); + $controller->startupProcess(); + + $methods = array_flip($controller->methods); + + if (!isset($methods[strtolower($params['action'])])) { + if ($controller->scaffold !== false) { + App::import('Controller', 'Scaffold', false); + return new Scaffold($controller, $params); + } + return $this->cakeError('missingAction', array(array( + 'className' => Inflector::camelize($params['controller']."Controller"), + 'action' => $params['action'], + 'webroot' => $this->webroot, + 'url' => $this->here, + 'base' => $this->base + ))); + } + $output = call_user_func_array(array(&$controller, $params['action']), $params['pass']); + + if ($controller->autoRender) { + $controller->output = $controller->render(); + } elseif (empty($controller->output)) { + $controller->output = $output; + } + $controller->shutdownProcess(); + + if (isset($params['return'])) { + return $controller->output; + } + echo($controller->output); + } + +/** + * Sets the params when $url is passed as an array to Object::requestAction(); + * Merges the $url and $additionalParams and creates a string url. + * + * @param array $url Array or request parameters + * @param array $additionalParams Array of additional parameters. + * @return string $url The generated url string. + * @access private + */ + function __extractParams($url, $additionalParams = array()) { + $defaults = array('pass' => array(), 'named' => array(), 'form' => array()); + $params = array_merge($defaults, $url, $additionalParams); + $this->params = $params; + + $params += array('base' => false, 'url' => array()); + return ltrim(Router::reverse($params), '/'); + } + +/** + * Returns array of GET and POST parameters. GET parameters are taken from given URL. + * + * @param string $fromUrl URL to mine for parameter information. + * @return array Parameters found in POST and GET. + * @access public + */ + function parseParams($fromUrl) { + $params = array(); + + if (isset($_POST)) { + $params['form'] = $_POST; + if (ini_get('magic_quotes_gpc') === '1') { + $params['form'] = stripslashes_deep($params['form']); + } + if (env('HTTP_X_HTTP_METHOD_OVERRIDE')) { + $params['form']['_method'] = env('HTTP_X_HTTP_METHOD_OVERRIDE'); + } + if (isset($params['form']['_method'])) { + if (!empty($_SERVER)) { + $_SERVER['REQUEST_METHOD'] = $params['form']['_method']; + } else { + $_ENV['REQUEST_METHOD'] = $params['form']['_method']; + } + unset($params['form']['_method']); + } + } + $namedExpressions = Router::getNamedExpressions(); + extract($namedExpressions); + include CONFIGS . 'routes.php'; + $params = array_merge(array('controller' => '', 'action' => ''), Router::parse($fromUrl), $params); + + if (empty($params['action'])) { + $params['action'] = 'index'; + } + if (isset($params['form']['data'])) { + $params['data'] = $params['form']['data']; + unset($params['form']['data']); + } + if (isset($_GET)) { + if (ini_get('magic_quotes_gpc') === '1') { + $url = stripslashes_deep($_GET); + } else { + $url = $_GET; + } + if (isset($params['url'])) { + $params['url'] = array_merge($params['url'], $url); + } else { + $params['url'] = $url; + } + } + + foreach ($_FILES as $name => $data) { + if ($name != 'data') { + $params['form'][$name] = $data; + } + } + + if (isset($_FILES['data'])) { + foreach ($_FILES['data'] as $key => $data) { + foreach ($data as $model => $fields) { + if (is_array($fields)) { + foreach ($fields as $field => $value) { + if (is_array($value)) { + foreach ($value as $k => $v) { + $params['data'][$model][$field][$k][$key] = $v; + } + } else { + $params['data'][$model][$field][$key] = $value; + } + } + } else { + $params['data'][$model][$key] = $fields; + } + } + } + } + return $params; + } + +/** + * Returns a base URL and sets the proper webroot + * + * @return string Base URL + * @access public + */ + function baseUrl() { + $dir = $webroot = null; + $config = Configure::read('App'); + extract($config); + + if (!$base) { + $base = $this->base; + } + if ($base !== false) { + $this->webroot = $base . '/'; + return $this->base = $base; + } + if (!$baseUrl) { + $replace = array('<', '>', '*', '\'', '"'); + $base = str_replace($replace, '', dirname(env('PHP_SELF'))); + + if ($webroot === 'webroot' && $webroot === basename($base)) { + $base = dirname($base); + } + if ($dir === 'app' && $dir === basename($base)) { + $base = dirname($base); + } + + if ($base === DS || $base === '.') { + $base = ''; + } + + $this->webroot = $base .'/'; + return $base; + } + + $file = '/' . basename($baseUrl); + $base = dirname($baseUrl); + + if ($base === DS || $base === '.') { + $base = ''; + } + $this->webroot = $base . '/'; + + $docRoot = realpath(env('DOCUMENT_ROOT')); + $docRootContainsWebroot = strpos($docRoot, $dir . '/' . $webroot); + + if (!empty($base) || !$docRootContainsWebroot) { + if (strpos($this->webroot, $dir) === false) { + $this->webroot .= $dir . '/' ; + } + if (strpos($this->webroot, $webroot) === false) { + $this->webroot .= $webroot . '/'; + } + } + return $base . $file; + } + +/** + * Get controller to use, either plugin controller or application controller + * + * @param array $params Array of parameters + * @return mixed name of controller if not loaded, or object if loaded + * @access private + */ + function &__getController() { + $controller = false; + $ctrlClass = $this->__loadController($this->params); + if (!$ctrlClass) { + return $controller; + } + $ctrlClass .= 'Controller'; + if (class_exists($ctrlClass)) { + $controller =& new $ctrlClass(); + } + return $controller; + } + +/** + * Load controller and return controller classname + * + * @param array $params Array of parameters + * @return string|bool Name of controller class name + * @access private + */ + function __loadController($params) { + $pluginName = $pluginPath = $controller = null; + if (!empty($params['plugin'])) { + $pluginName = $controller = Inflector::camelize($params['plugin']); + $pluginPath = $pluginName . '.'; + } + if (!empty($params['controller'])) { + $controller = Inflector::camelize($params['controller']); + } + if ($pluginPath . $controller) { + if (App::import('Controller', $pluginPath . $controller)) { + return $controller; + } + } + return false; + } + +/** + * Returns the REQUEST_URI from the server environment, or, failing that, + * constructs a new one, using the PHP_SELF constant and other variables. + * + * @return string URI + * @access public + */ + function uri() { + foreach (array('HTTP_X_REWRITE_URL', 'REQUEST_URI', 'argv') as $var) { + if ($uri = env($var)) { + if ($var == 'argv') { + $uri = $uri[0]; + } + break; + } + } + $base = preg_replace('/^\//', '', '' . Configure::read('App.baseUrl')); + + if ($base) { + $uri = preg_replace('/^(?:\/)?(?:' . preg_quote($base, '/') . ')?(?:url=)?/', '', $uri); + } + if (PHP_SAPI == 'isapi') { + $uri = preg_replace('/^(?:\/)?(?:\/)?(?:\?)?(?:url=)?/', '', $uri); + } + if (!empty($uri)) { + if (key($_GET) && strpos(key($_GET), '?') !== false) { + unset($_GET[key($_GET)]); + } + $uri = explode('?', $uri, 2); + + if (isset($uri[1])) { + parse_str($uri[1], $_GET); + } + $uri = $uri[0]; + } else { + $uri = env('QUERY_STRING'); + } + if (is_string($uri) && strpos($uri, 'index.php') !== false) { + list(, $uri) = explode('index.php', $uri, 2); + } + if (empty($uri) || $uri == '/' || $uri == '//') { + return ''; + } + return str_replace('//', '/', '/' . $uri); + } + +/** + * Returns and sets the $_GET[url] derived from the REQUEST_URI + * + * @param string $uri Request URI + * @param string $base Base path + * @return string URL + * @access public + */ + function getUrl($uri = null, $base = null) { + if (empty($_GET['url'])) { + if ($uri == null) { + $uri = $this->uri(); + } + if ($base == null) { + $base = $this->base; + } + $url = null; + $tmpUri = preg_replace('/^(?:\?)?(?:\/)?/', '', $uri); + $baseDir = preg_replace('/^\//', '', dirname($base)) . '/'; + + if ($tmpUri === '/' || $tmpUri == $baseDir || $tmpUri == $base) { + $url = $_GET['url'] = '/'; + } else { + if ($base && strpos($uri, $base) === 0) { + $elements = explode($base, $uri, 2); + } elseif (preg_match('/^[\/\?\/|\/\?|\?\/]/', $uri)) { + $elements = array(1 => preg_replace('/^[\/\?\/|\/\?|\?\/]/', '', $uri)); + } else { + $elements = array(); + } + + if (!empty($elements[1])) { + $_GET['url'] = $elements[1]; + $url = $elements[1]; + } else { + $url = $_GET['url'] = '/'; + } + + if (strpos($url, '/') === 0 && $url != '/') { + $url = $_GET['url'] = substr($url, 1); + } + } + } else { + $url = $_GET['url']; + } + if ($url{0} == '/') { + $url = substr($url, 1); + } + return $url; + } + +/** + * Outputs cached dispatch view cache + * + * @param string $url Requested URL + * @access public + */ + function cached($url) { + if (Configure::read('Cache.check') === true) { + $path = $this->here; + if ($this->here == '/') { + $path = 'home'; + } + $path = strtolower(Inflector::slug($path)); + + $filename = CACHE . 'views' . DS . $path . '.php'; + + if (!file_exists($filename)) { + $filename = CACHE . 'views' . DS . $path . '_index.php'; + } + + if (file_exists($filename)) { + if (!class_exists('View')) { + App::import('View', 'View', false); + } + $controller = null; + $view =& new View($controller); + $return = $view->renderCache($filename, getMicrotime()); + if (!$return) { + ClassRegistry::removeObject('view'); + } + return $return; + } + } + return false; + } + +/** + * Checks if a requested asset exists and sends it to the browser + * + * @param $url string $url Requested URL + * @return boolean True on success if the asset file was found and sent + * @access public + */ + function asset($url) { + if (strpos($url, '..') !== false || strpos($url, '.') === false) { + return false; + } + $filters = Configure::read('Asset.filter'); + $isCss = ( + strpos($url, 'ccss/') === 0 || + preg_match('#^(theme/([^/]+)/ccss/)|(([^/]+)(?_stop(); + } elseif ($isCss) { + include WWW_ROOT . DS . $filters['css']; + $this->_stop(); + } elseif ($isJs) { + include WWW_ROOT . DS . $filters['js']; + $this->_stop(); + } + $controller = null; + $ext = array_pop(explode('.', $url)); + $parts = explode('/', $url); + $assetFile = null; + + if ($parts[0] === 'theme') { + $themeName = $parts[1]; + unset($parts[0], $parts[1]); + $fileFragment = implode(DS, $parts); + $path = App::themePath($themeName) . 'webroot' . DS; + if (file_exists($path . $fileFragment)) { + $assetFile = $path . $fileFragment; + } + } else { + $plugin = $parts[0]; + unset($parts[0]); + $fileFragment = implode(DS, $parts); + $pluginWebroot = App::pluginPath($plugin) . 'webroot' . DS; + if (file_exists($pluginWebroot . $fileFragment)) { + $assetFile = $pluginWebroot . $fileFragment; + } + } + + if ($assetFile !== null) { + $this->_deliverAsset($assetFile, $ext); + return true; + } + return false; + } + +/** + * Sends an asset file to the client + * + * @param string $assetFile Path to the asset file in the file system + * @param string $ext The extension of the file to determine its mime type + * @return void + * @access protected + */ + function _deliverAsset($assetFile, $ext) { + $ob = @ini_get("zlib.output_compression") !== '1' && extension_loaded("zlib") && (strpos(env('HTTP_ACCEPT_ENCODING'), 'gzip') !== false); + $compressionEnabled = $ob && Configure::read('Asset.compress'); + if ($compressionEnabled) { + ob_start(); + ob_start('ob_gzhandler'); + } + + App::import('View', 'Media', false); + $controller = null; + $Media = new MediaView($controller); + if (isset($Media->mimeType[$ext])) { + $contentType = $Media->mimeType[$ext]; + } else { + $contentType = 'application/octet-stream'; + $agent = env('HTTP_USER_AGENT'); + if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent) || preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) { + $contentType = 'application/octetstream'; + } + } + + header("Date: " . date("D, j M Y G:i:s ", filemtime($assetFile)) . 'GMT'); + header('Content-type: ' . $contentType); + header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT"); + header("Cache-Control: cache"); + header("Pragma: cache"); + + if ($ext === 'css' || $ext === 'js') { + include($assetFile); + } else { + if ($compressionEnabled) { + ob_clean(); + } + readfile($assetFile); + } + + if ($compressionEnabled) { + ob_end_flush(); + } + } +} diff --git a/cake/libs/.DS_Store b/cake/libs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..aaa63d65b1b59d302a4b1a450ff6c3e737a220b4 GIT binary patch literal 12292 zcmeI1&2G~`5XWcJRCPl_BP66AedL6Q1QJK9Do9-6!ikWN5&{NC`GCU7kHJIn06YK( z-U9wJyTCZvt;z*aF>9?SwdcRH``ht4n-Y;b*-QsS$3&E&vh82PDN^`8*PYS|S8`Yf zJ<-{tvYL#`YP{oX7mR=rFak!v2pEBXg8<&yT(ZP_-`};f5ikP(B>`R^a#XfOu(h|c zbl@ag0N6GzOTlOC14NStTLfEsD^j%ScMmQ|UD#qcFUS3y-C>JhYj3@roR^aekzLrK zIEfBjF7D(CZ|!UZjKD5|9GCWKLL=0djr}`6NDonOeV2kyM2EjU={7B(Sg0L8D?X!Y zMOPHB>5PU{Qbn`4&OP4J^_6Y~^$N!v`nL)Fmo5EKLto)9?!!8+Zav#l-++G!CLDE0 zODJcEzJh*99};bR-D;zUHn_hppq$Z0T8T4b%AXYFPEc~R3jHV%e;MJdHC>v*Ym7KE z9Pp3#(lKYPI}~4zlTt8Qt;l3V+^6Vhgr)ZHz@JCK{Y%7XF*~g}LT0UTEI@w+^@X#? zS?V&yF9Y!b-B0BT=V-&f2Y;R?9@7L-(=0%*q0FEe(4ABy2X+nrJ^14pXwD@QYj}0( z4RVh&Zi4YoF{^RXpw`gsLstpsvKc`Lohw2;cy7>_HDZjB(d*P~3M;MbAi|hl1ya#| zagI5y=|l5QW}intLJvo1Bb`A!F0H?r)DQg{M0ewag#VwlbT8hL%#m)XgIun_kjW*o zTBv_h)Vs*#5prcN+&^B(d|Stv$!iE}6DyE#*SZ75ORjmsMtgU{`o_;fVwDyOT5}!q zI>JoOWllMpk}EVn<4$Ya(9Y4n_q(~;da9@$&^fZTjL!?_XTuu{iIqzd*zDiTao9F4^Zj4{FvRCP zTq}aDy~Q1rzy3o&{F}(nZxZ(YxA(u~rJam`5ikNqzz7%tBVYuKfDtePM!*Od0V8nL G3H$(en`yQH literal 0 HcmV?d00001 diff --git a/cake/libs/.svn/entries b/cake/libs/.svn/entries new file mode 100644 index 0000000..5f13378 --- /dev/null +++ b/cake/libs/.svn/entries @@ -0,0 +1,961 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +error.php +file + + + + +2010-08-30T06:36:26.000000Z +1d3afa7b874736982820a0366d5701cc +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11177 + +overloadable_php4.php +file + + + + +2010-08-30T06:36:26.000000Z +aeebe45244e6465370491cffaebb63e9 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3675 + +validation.php +file + + + + +2010-08-30T06:36:26.000000Z +7b04ffe67c5fec233bb6333f9e4b738f +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +32201 + +overloadable_php5.php +file + + + + +2010-08-30T06:36:26.000000Z +fd7dd849256331797713c84923d21803 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2600 + +class_registry.php +file + + + + +2010-08-30T06:36:26.000000Z +c552c3cc4b2fc789572c69252d31f96e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +9437 + +controller +dir + +cache.php +file + + + + +2010-08-30T06:36:26.000000Z +0f655adec6f9090a30f276a2eaad9537 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +17641 + +model +dir + +cake_socket.php +file + + + + +2010-08-30T06:36:26.000000Z +e15fcf53e43e485024ba5308280a3673 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6590 + +folder.php +file + + + + +2010-08-30T06:36:26.000000Z +ea930dca521ae5ba69df8a6d6739d8a3 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +19424 + +cache +dir + +file.php +file + + + + +2010-08-30T06:36:26.000000Z +a8c1b6f116fe4519a15547803440406c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11623 + +i18n.php +file + + + + +2010-08-30T06:36:26.000000Z +ca49f37e2762eec44d23a623c71354fe +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +18322 + +router.php +file + + + + +2010-08-30T06:36:26.000000Z +1f8275bb654849147f5522812818dfd1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +46644 + +view +dir + +set.php +file + + + + +2010-08-30T06:36:26.000000Z +c8ad835d9912770f3e654b1239b1044a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +30928 + +log +dir + +overloadable.php +file + + + + +2010-08-30T06:36:26.000000Z +0f10532228e5643d6bfacbb3fdbbfda6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +982 + +xml.php +file + + + + +2010-08-30T06:36:28.000000Z +05e033154f1234bce792073ac0c5f056 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +34393 + +cake_log.php +file + + + + +2010-08-30T06:36:26.000000Z +eecaee5a40d0b7c2e316115db822ee94 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +7703 + +cake_session.php +file + + + + +2010-08-30T06:36:26.000000Z +167e91c835d2fad1101396a2ff090358 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +18798 + +object.php +file + + + + +2010-08-30T06:36:26.000000Z +70ab3b3101160f515238ead1c9e2bb3e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +8796 + +string.php +file + + + + +2010-08-30T06:36:26.000000Z +b35af352b62c8720e385ddd1ab8c9404 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +9093 + +security.php +file + + + + +2010-08-30T06:36:26.000000Z +f5631f251a2e2cab1f4bc892f43dbbf5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4183 + +l10n.php +file + + + + +2010-08-30T06:36:26.000000Z +298605082cec254366124df9ad8eeded +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +30744 + +multibyte.php +file + + + + +2010-08-30T06:36:26.000000Z +dc6e57f186508fb64226f3546b4d4deb +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +36978 + +configure.php +file + + + + +2010-08-30T06:36:26.000000Z +2607bb47fba2f00a21c20204c75a8856 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +34767 + +debugger.php +file + + + + +2010-08-30T06:36:26.000000Z +a2bd14f555e4777dbcb78f87184acf07 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +20086 + +inflector.php +file + + + + +2010-08-30T06:36:26.000000Z +5fb4d7684e2fc8d252741d0f80611779 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +18437 + +magic_db.php +file + + + + +2010-08-30T06:36:26.000000Z +8f913b9b37fe96e2564af36a3630c282 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6710 + +sanitize.php +file + + + + +2010-08-30T06:36:26.000000Z +6a8a3a271915a6675b058b626cfd70df +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +9527 + +http_socket.php +file + + + + +2010-08-30T06:36:26.000000Z +ff9e98d3bb8b1a674070b21a8a59221e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +31216 + diff --git a/cake/libs/.svn/text-base/cache.php.svn-base b/cake/libs/.svn/text-base/cache.php.svn-base new file mode 100644 index 0000000..01acb22 --- /dev/null +++ b/cake/libs/.svn/text-base/cache.php.svn-base @@ -0,0 +1,675 @@ + 'File', 'path' => TMP));` + * + * To get the settings for a configuration, and set it as the currently selected configuration + * + * `Cache::config('default');` + * + * @see app/config/core.php for configuration settings + * @param string $name Name of the configuration + * @param array $settings Optional associative array of settings passed to the engine + * @return array(engine, settings) on success, false on failure + * @access public + * @static + */ + function config($name = null, $settings = array()) { + $self =& Cache::getInstance(); + if (is_array($name)) { + $settings = $name; + } + + if ($name === null || !is_string($name)) { + $name = $self->__name; + } + + $current = array(); + if (isset($self->__config[$name])) { + $current = $self->__config[$name]; + } + + if (!empty($settings)) { + $self->__config[$name] = array_merge($current, $settings); + } + + if (empty($self->__config[$name]['engine'])) { + return false; + } + + $engine = $self->__config[$name]['engine']; + $self->__name = $name; + + if (!isset($self->_engines[$name])) { + $self->_buildEngine($name); + $settings = $self->__config[$name] = $self->settings($name); + } elseif ($settings = $self->set($self->__config[$name])) { + $self->__config[$name] = $settings; + } + return compact('engine', 'settings'); + } + +/** + * Finds and builds the instance of the required engine class. + * + * @param string $name Name of the config array that needs an engine instance built + * @return void + * @access protected + */ + function _buildEngine($name) { + $config = $this->__config[$name]; + + list($plugin, $class) = pluginSplit($config['engine']); + $cacheClass = $class . 'Engine'; + if (!class_exists($cacheClass) && $this->__loadEngine($class, $plugin) === false) { + return false; + } + $cacheClass = $class . 'Engine'; + $this->_engines[$name] =& new $cacheClass(); + if ($this->_engines[$name]->init($config)) { + if (time() % $this->_engines[$name]->settings['probability'] === 0) { + $this->_engines[$name]->gc(); + } + return true; + } + return false; + } + +/** + * Returns an array containing the currently configured Cache settings. + * + * @return array Array of configured Cache config names. + */ + function configured() { + $self =& Cache::getInstance(); + return array_keys($self->__config); + } + +/** + * Drops a cache engine. Deletes the cache configuration information + * If the deleted configuration is the last configuration using an certain engine, + * the Engine instance is also unset. + * + * @param string $name A currently configured cache config you wish to remove. + * @return boolen success of the removal, returns false when the config does not exist. + */ + function drop($name) { + $self =& Cache::getInstance(); + if (!isset($self->__config[$name])) { + return false; + } + unset($self->__config[$name]); + unset($self->_engines[$name]); + return true; + } + +/** + * Tries to find and include a file for a cache engine and returns object instance + * + * @param $name Name of the engine (without 'Engine') + * @return mixed $engine object or null + * @access private + */ + function __loadEngine($name, $plugin = null) { + if ($plugin) { + return App::import('Lib', $plugin . '.cache' . DS . $name, false); + } else { + $core = App::core(); + $path = $core['libs'][0] . 'cache' . DS . strtolower($name) . '.php'; + if (file_exists($path)) { + require $path; + return true; + } + return App::import('Lib', 'cache' . DS . $name, false); + } + } + +/** + * Temporarily change settings to current config options. if no params are passed, resets settings if needed + * Cache::write() will reset the configuration changes made + * + * @param mixed $settings Optional string for simple name-value pair or array + * @param string $value Optional for a simple name-value pair + * @return array Array of settings. + * @access public + * @static + */ + function set($settings = array(), $value = null) { + $self =& Cache::getInstance(); + if (!isset($self->__config[$self->__name]) || !isset($self->_engines[$self->__name])) { + return false; + } + $name = $self->__name; + if (!empty($settings)) { + $self->__reset = true; + } + + if ($self->__reset === true) { + if (empty($settings)) { + $self->__reset = false; + $settings = $self->__config[$name]; + } else { + if (is_string($settings) && $value !== null) { + $settings = array($settings => $value); + } + $settings = array_merge($self->__config[$name], $settings); + if (isset($settings['duration']) && !is_numeric($settings['duration'])) { + $settings['duration'] = strtotime($settings['duration']) - time(); + } + } + $self->_engines[$name]->settings = $settings; + } + return $self->settings($name); + } + +/** + * Garbage collection + * + * Permanently remove all expired and deleted data + * + * @return void + * @access public + * @static + */ + function gc() { + $self =& Cache::getInstance(); + $self->_engines[$self->__name]->gc(); + } + +/** + * Write data for key into cache. Will automatically use the currently + * active cache configuration. To set the currently active configuration use + * Cache::config() + * + * ### Usage: + * + * Writing to the active cache config: + * + * `Cache::write('cached_data', $data);` + * + * Writing to a specific cache config: + * + * `Cache::write('cached_data', $data, 'long_term');` + * + * @param string $key Identifier for the data + * @param mixed $value Data to be cached - anything except a resource + * @param string $config Optional string configuration name to write to. + * @return boolean True if the data was successfully cached, false on failure + * @access public + * @static + */ + function write($key, $value, $config = null) { + $self =& Cache::getInstance(); + + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + if (!$self->isInitialized($config)) { + return false; + } + $key = $self->_engines[$config]->key($key); + + if (!$key || is_resource($value) || $settings['duration'] < 1) { + return false; + } + + $success = $self->_engines[$config]->write($settings['prefix'] . $key, $value, $settings['duration']); + $self->set(); + return $success; + } + +/** + * Read a key from the cache. Will automatically use the currently + * active cache configuration. To set the currently active configuration use + * Cache::config() + * + * ### Usage: + * + * Reading from the active cache configuration. + * + * `Cache::read('my_data');` + * + * Reading from a specific cache configuration. + * + * `Cache::read('my_data', 'long_term');` + * + * @param string $key Identifier for the data + * @param string $config optional name of the configuration to use. + * @return mixed The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it + * @access public + * @static + */ + function read($key, $config = null) { + $self =& Cache::getInstance(); + + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + if (!$self->isInitialized($config)) { + return false; + } + $key = $self->_engines[$config]->key($key); + if (!$key) { + return false; + } + $success = $self->_engines[$config]->read($settings['prefix'] . $key); + + if ($config !== null && $config !== $self->__name) { + $self->set(); + } + return $success; + } + +/** + * Increment a number under the key and return incremented value. + * + * @param string $key Identifier for the data + * @param integer $offset How much to add + * @param string $config Optional string configuration name. If not specified the current + * default config will be used. + * @return mixed new value, or false if the data doesn't exist, is not integer, + * or if there was an error fetching it. + * @access public + */ + function increment($key, $offset = 1, $config = null) { + $self =& Cache::getInstance(); + + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + if (!$self->isInitialized($config)) { + return false; + } + $key = $self->_engines[$config]->key($key); + + if (!$key || !is_integer($offset) || $offset < 0) { + return false; + } + $success = $self->_engines[$config]->increment($settings['prefix'] . $key, $offset); + $self->set(); + return $success; + } +/** + * Decrement a number under the key and return decremented value. + * + * @param string $key Identifier for the data + * @param integer $offset How much to substract + * @param string $config Optional string configuration name, if not specified the current + * default config will be used. + * @return mixed new value, or false if the data doesn't exist, is not integer, + * or if there was an error fetching it + * @access public + */ + function decrement($key, $offset = 1, $config = null) { + $self =& Cache::getInstance(); + + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + if (!$self->isInitialized($config)) { + return false; + } + $key = $self->_engines[$config]->key($key); + + if (!$key || !is_integer($offset) || $offset < 0) { + return false; + } + $success = $self->_engines[$config]->decrement($settings['prefix'] . $key, $offset); + $self->set(); + return $success; + } +/** + * Delete a key from the cache. Will automatically use the currently + * active cache configuration. To set the currently active configuration use + * Cache::config() + * + * ### Usage: + * + * Deleting from the active cache configuration. + * + * `Cache::delete('my_data');` + * + * Deleting from a specific cache configuration. + * + * `Cache::delete('my_data', 'long_term');` + * + * @param string $key Identifier for the data + * @param string $config name of the configuration to use + * @return boolean True if the value was succesfully deleted, false if it didn't exist or couldn't be removed + * @access public + * @static + */ + function delete($key, $config = null) { + $self =& Cache::getInstance(); + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + if (!$self->isInitialized($config)) { + return false; + } + $key = $self->_engines[$config]->key($key); + if (!$key) { + return false; + } + + $success = $self->_engines[$config]->delete($settings['prefix'] . $key); + $self->set(); + return $success; + } + +/** + * Delete all keys from the cache. + * + * @param boolean $check if true will check expiration, otherwise delete all + * @param string $config name of the configuration to use + * @return boolean True if the cache was succesfully cleared, false otherwise + * @access public + * @static + */ + function clear($check = false, $config = null) { + $self =& Cache::getInstance(); + if (!$config) { + $config = $self->__name; + } + $settings = $self->settings($config); + + if (empty($settings)) { + return null; + } + + if (!$self->isInitialized($config)) { + return false; + } + $success = $self->_engines[$config]->clear($check); + $self->set(); + return $success; + } + +/** + * Check if Cache has initialized a working config for the given name. + * + * @param string $engine Name of the engine + * @param string $config Name of the configuration setting + * @return bool Whether or not the config name has been initialized. + * @access public + * @static + */ + function isInitialized($name = null) { + if (Configure::read('Cache.disable')) { + return false; + } + $self =& Cache::getInstance(); + if (!$name && isset($self->__config[$self->__name])) { + $name = $self->__name; + } + return isset($self->_engines[$name]); + } + +/** + * Return the settings for current cache engine. If no name is supplied the settings + * for the 'active default' configuration will be returned. To set the 'active default' + * configuration use `Cache::config()` + * + * @param string $engine Name of the configuration to get settings for. + * @return array list of settings for this engine + * @see Cache::config() + * @access public + * @static + */ + function settings($name = null) { + $self =& Cache::getInstance(); + if (!$name && isset($self->__config[$self->__name])) { + $name = $self->__name; + } + if (!empty($self->_engines[$name])) { + return $self->_engines[$name]->settings(); + } + return array(); + } +} + +/** + * Storage engine for CakePHP caching + * + * @package cake + * @subpackage cake.cake.libs + */ +class CacheEngine { + +/** + * Settings of current engine instance + * + * @var int + * @access public + */ + var $settings = array(); + +/** + * Initialize the cache engine + * + * Called automatically by the cache frontend + * + * @param array $params Associative array of parameters for the engine + * @return boolean True if the engine has been succesfully initialized, false if not + * @access public + */ + function init($settings = array()) { + $this->settings = array_merge( + array('prefix' => 'cake_', 'duration'=> 3600, 'probability'=> 100), + $this->settings, + $settings + ); + if (!is_numeric($this->settings['duration'])) { + $this->settings['duration'] = strtotime($this->settings['duration']) - time(); + } + return true; + } + +/** + * Garbage collection + * + * Permanently remove all expired and deleted data + * + * @access public + */ + function gc() { + } + +/** + * Write value for a key into cache + * + * @param string $key Identifier for the data + * @param mixed $value Data to be cached + * @param mixed $duration How long to cache the data, in seconds + * @return boolean True if the data was succesfully cached, false on failure + * @access public + */ + function write($key, &$value, $duration) { + trigger_error(sprintf(__('Method write() not implemented in %s', true), get_class($this)), E_USER_ERROR); + } + +/** + * Read a key from the cache + * + * @param string $key Identifier for the data + * @return mixed The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it + * @access public + */ + function read($key) { + trigger_error(sprintf(__('Method read() not implemented in %s', true), get_class($this)), E_USER_ERROR); + } + +/** + * Increment a number under the key and return incremented value + * + * @param string $key Identifier for the data + * @param integer $offset How much to add + * @return New incremented value, false otherwise + * @access public + */ + function increment($key, $offset = 1) { + trigger_error(sprintf(__('Method increment() not implemented in %s', true), get_class($this)), E_USER_ERROR); + } +/** + * Decrement a number under the key and return decremented value + * + * @param string $key Identifier for the data + * @param integer $value How much to substract + * @return New incremented value, false otherwise + * @access public + */ + function decrement($key, $offset = 1) { + trigger_error(sprintf(__('Method decrement() not implemented in %s', true), get_class($this)), E_USER_ERROR); + } +/** + * Delete a key from the cache + * + * @param string $key Identifier for the data + * @return boolean True if the value was succesfully deleted, false if it didn't exist or couldn't be removed + * @access public + */ + function delete($key) { + } + +/** + * Delete all keys from the cache + * + * @param boolean $check if true will check expiration, otherwise delete all + * @return boolean True if the cache was succesfully cleared, false otherwise + * @access public + */ + function clear($check) { + } + +/** + * Cache Engine settings + * + * @return array settings + * @access public + */ + function settings() { + return $this->settings; + } + +/** + * Generates a safe key for use with cache engine storage engines. + * + * @param string $key the key passed over + * @return mixed string $key or false + * @access public + */ + function key($key) { + if (empty($key)) { + return false; + } + $key = Inflector::underscore(str_replace(array(DS, '/', '.'), '_', strval($key))); + return $key; + } +} diff --git a/cake/libs/.svn/text-base/cake_log.php.svn-base b/cake/libs/.svn/text-base/cake_log.php.svn-base new file mode 100644 index 0000000..efac12b --- /dev/null +++ b/cake/libs/.svn/text-base/cake_log.php.svn-base @@ -0,0 +1,291 @@ + 'FileLog', + * 'path' => '/var/logs/my_app/' + * )); + * }}} + * + * Will configure a FileLog instance to use the specified path. All options that are not `engine` + * are passed onto the logging adapter, and handled there. Any class can be configured as a logging + * adapter as long as it implements a `write` method with the following signature. + * + * `write($type, $message)` + * + * For an explaination of these parameters, see CakeLog::write() + * + * @param string $key The keyname for this logger, used to remove the logger later. + * @param array $config Array of configuration information for the logger + * @return boolean success of configuration. + * @static + */ + function config($key, $config) { + if (empty($config['engine'])) { + trigger_error(__('Missing logger classname', true), E_USER_WARNING); + return false; + } + $self =& CakeLog::getInstance(); + $className = $self->_getLogger($config['engine']); + if (!$className) { + return false; + } + unset($config['engine']); + $self->_streams[$key] = new $className($config); + return true; + } + +/** + * Attempts to import a logger class from the various paths it could be on. + * Checks that the logger class implements a write method as well. + * + * @param string $loggerName the plugin.className of the logger class you want to build. + * @return mixed boolean false on any failures, string of classname to use if search was successful. + * @access protected + */ + function _getLogger($loggerName) { + list($plugin, $loggerName) = pluginSplit($loggerName); + + if ($plugin) { + App::import('Lib', $plugin . '.log/' . $loggerName); + } else { + if (!App::import('Lib', 'log/' . $loggerName)) { + App::import('Core', 'log/' . $loggerName); + } + } + if (!class_exists($loggerName)) { + trigger_error(sprintf(__('Could not load logger class %s', true), $loggerName), E_USER_WARNING); + return false; + } + if (!is_callable(array($loggerName, 'write'))) { + trigger_error( + sprintf(__('logger class %s does not implement a write method.', true), $loggerName), + E_USER_WARNING + ); + return false; + } + return $loggerName; + } + +/** + * Returns the keynames of the currently active streams + * + * @return array Array of configured log streams. + * @access public + * @static + */ + function configured() { + $self =& CakeLog::getInstance(); + return array_keys($self->_streams); + } + +/** + * Removes a stream from the active streams. Once a stream has been removed + * it will no longer have messages sent to it. + * + * @param string $keyname Key name of a configured stream to remove. + * @return void + * @access public + * @static + */ + function drop($streamName) { + $self =& CakeLog::getInstance(); + unset($self->_streams[$streamName]); + } + +/** + * Configures the automatic/default stream a FileLog. + * + * @return void + * @access protected + */ + function _autoConfig() { + if (!class_exists('FileLog')) { + App::import('Core', 'log/FileLog'); + } + $this->_streams['default'] =& new FileLog(array('path' => LOGS)); + } + +/** + * Writes the given message and type to all of the configured log adapters. + * Configured adapters are passed both the $type and $message variables. $type + * is one of the following strings/values. + * + * ### Types: + * + * - `LOG_WARNING` => 'warning', + * - `LOG_NOTICE` => 'notice', + * - `LOG_INFO` => 'info', + * - `LOG_DEBUG` => 'debug', + * - `LOG_ERR` => 'error', + * - `LOG_ERROR` => 'error' + * + * ### Usage: + * + * Write a message to the 'warning' log: + * + * `CakeLog::write('warning', 'Stuff is broken here');` + * + * @param string $type Type of message being written + * @param string $message Message content to log + * @return boolean Success + * @access public + * @static + */ + function write($type, $message) { + if (!defined('LOG_ERROR')) { + define('LOG_ERROR', 2); + } + if (!defined('LOG_ERR')) { + define('LOG_ERR', LOG_ERROR); + } + $levels = array( + LOG_WARNING => 'warning', + LOG_NOTICE => 'notice', + LOG_INFO => 'info', + LOG_DEBUG => 'debug', + LOG_ERR => 'error', + LOG_ERROR => 'error' + ); + + if (is_int($type) && isset($levels[$type])) { + $type = $levels[$type]; + } + $self =& CakeLog::getInstance(); + if (empty($self->_streams)) { + $self->_autoConfig(); + } + $keys = array_keys($self->_streams); + foreach ($keys as $key) { + $logger =& $self->_streams[$key]; + $logger->write($type, $message); + } + return true; + } + +/** + * An error_handler that will log errors to file using CakeLog::write(); + * You can control how verbose and what type of errors this error_handler will + * catch using `Configure::write('log', $value)`. See core.php for more information. + * + * + * @param integer $code Code of error + * @param string $description Error description + * @param string $file File on which error occurred + * @param integer $line Line that triggered the error + * @param array $context Context + * @return void + */ + function handleError($code, $description, $file = null, $line = null, $context = null) { + if ($code === 2048 || $code === 8192) { + return; + } + switch ($code) { + case E_PARSE: + case E_ERROR: + case E_CORE_ERROR: + case E_COMPILE_ERROR: + case E_USER_ERROR: + $error = 'Fatal Error'; + $level = LOG_ERROR; + break; + case E_WARNING: + case E_USER_WARNING: + case E_COMPILE_WARNING: + case E_RECOVERABLE_ERROR: + $error = 'Warning'; + $level = LOG_WARNING; + break; + case E_NOTICE: + case E_USER_NOTICE: + $error = 'Notice'; + $level = LOG_NOTICE; + break; + default: + return; + break; + } + $message = $error . ' (' . $code . '): ' . $description . ' in [' . $file . ', line ' . $line . ']'; + CakeLog::write($level, $message); + } +} + +if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) { + set_error_handler(array('CakeLog', 'handleError')); +} diff --git a/cake/libs/.svn/text-base/cake_session.php.svn-base b/cake/libs/.svn/text-base/cake_session.php.svn-base new file mode 100644 index 0000000..bf599bf --- /dev/null +++ b/cake/libs/.svn/text-base/cake_session.php.svn-base @@ -0,0 +1,788 @@ +time = time(); + + if (Configure::read('Session.checkAgent') === true || Configure::read('Session.checkAgent') === null) { + if (env('HTTP_USER_AGENT') != null) { + $this->_userAgent = md5(env('HTTP_USER_AGENT') . Configure::read('Security.salt')); + } + } + if (Configure::read('Session.save') === 'database') { + $modelName = Configure::read('Session.model'); + $database = Configure::read('Session.database'); + $table = Configure::read('Session.table'); + + if (empty($database)) { + $database = 'default'; + } + $settings = array( + 'class' => 'Session', + 'alias' => 'Session', + 'table' => 'cake_sessions', + 'ds' => $database + ); + if (!empty($modelName)) { + $settings['class'] = $modelName; + } + if (!empty($table)) { + $settings['table'] = $table; + } + ClassRegistry::init($settings); + } + if ($start === true) { + if (!empty($base)) { + $this->path = $base; + if (strpos($base, 'index.php') !== false) { + $this->path = str_replace('index.php', '', $base); + } + if (strpos($base, '?') !== false) { + $this->path = str_replace('?', '', $base); + } + } + $this->host = env('HTTP_HOST'); + + if (strpos($this->host, ':') !== false) { + $this->host = substr($this->host, 0, strpos($this->host, ':')); + } + } + if (isset($_SESSION) || $start === true) { + if (!class_exists('Security')) { + App::import('Core', 'Security'); + } + $this->sessionTime = $this->time + (Security::inactiveMins() * Configure::read('Session.timeout')); + $this->security = Configure::read('Security.level'); + } + parent::__construct(); + } + +/** + * Starts the Session. + * + * @return boolean True if session was started + * @access public + */ + function start() { + if ($this->started()) { + return true; + } + if (function_exists('session_write_close')) { + session_write_close(); + } + $this->__initSession(); + $this->__startSession(); + return $this->started(); + } + +/** + * Determine if Session has been started. + * + * @access public + * @return boolean True if session has been started. + */ + function started() { + if (!empty($_SESSION) && session_id()) { + return true; + } + return false; + } + +/** + * Returns true if given variable is set in session. + * + * @param string $name Variable name to check for + * @return boolean True if variable is there + * @access public + */ + function check($name) { + if (empty($name)) { + return false; + } + $result = Set::classicExtract($_SESSION, $name); + return isset($result); + } + +/** + * Returns the Session id + * + * @param id $name string + * @return string Session id + * @access public + */ + function id($id = null) { + if ($id) { + $this->id = $id; + session_id($this->id); + } + if ($this->started()) { + return session_id(); + } else { + return $this->id; + } + } + +/** + * Removes a variable from session. + * + * @param string $name Session variable to remove + * @return boolean Success + * @access public + */ + function delete($name) { + if ($this->check($name)) { + if (in_array($name, $this->watchKeys)) { + trigger_error(sprintf(__('Deleting session key {%s}', true), $name), E_USER_NOTICE); + } + $this->__overwrite($_SESSION, Set::remove($_SESSION, $name)); + return ($this->check($name) == false); + } + $this->__setError(2, sprintf(__("%s doesn't exist", true), $name)); + return false; + } + +/** + * Used to write new data to _SESSION, since PHP doesn't like us setting the _SESSION var itself + * + * @param array $old Set of old variables => values + * @param array $new New set of variable => value + * @access private + */ + function __overwrite(&$old, $new) { + if (!empty($old)) { + foreach ($old as $key => $var) { + if (!isset($new[$key])) { + unset($old[$key]); + } + } + } + foreach ($new as $key => $var) { + $old[$key] = $var; + } + } + +/** + * Return error description for given error number. + * + * @param integer $errorNumber Error to set + * @return string Error as string + * @access private + */ + function __error($errorNumber) { + if (!is_array($this->error) || !array_key_exists($errorNumber, $this->error)) { + return false; + } else { + return $this->error[$errorNumber]; + } + } + +/** + * Returns last occurred error as a string, if any. + * + * @return mixed Error description as a string, or false. + * @access public + */ + function error() { + if ($this->lastError) { + return $this->__error($this->lastError); + } else { + return false; + } + } + +/** + * Returns true if session is valid. + * + * @return boolean Success + * @access public + */ + function valid() { + if ($this->read('Config')) { + if ((Configure::read('Session.checkAgent') === false || $this->_userAgent == $this->read('Config.userAgent')) && $this->time <= $this->read('Config.time')) { + if ($this->error === false) { + $this->valid = true; + } + } else { + $this->valid = false; + $this->__setError(1, 'Session Highjacking Attempted !!!'); + } + } + return $this->valid; + } + +/** + * Returns given session variable, or all of them, if no parameters given. + * + * @param mixed $name The name of the session variable (or a path as sent to Set.extract) + * @return mixed The value of the session variable + * @access public + */ + function read($name = null) { + if (is_null($name)) { + return $this->__returnSessionVars(); + } + if (empty($name)) { + return false; + } + $result = Set::classicExtract($_SESSION, $name); + + if (!is_null($result)) { + return $result; + } + $this->__setError(2, "$name doesn't exist"); + return null; + } + +/** + * Returns all session variables. + * + * @return mixed Full $_SESSION array, or false on error. + * @access private + */ + function __returnSessionVars() { + if (!empty($_SESSION)) { + return $_SESSION; + } + $this->__setError(2, "No Session vars set"); + return false; + } + +/** + * Tells Session to write a notification when a certain session path or subpath is written to + * + * @param mixed $var The variable path to watch + * @return void + * @access public + */ + function watch($var) { + if (empty($var)) { + return false; + } + if (!in_array($var, $this->watchKeys, true)) { + $this->watchKeys[] = $var; + } + } + +/** + * Tells Session to stop watching a given key path + * + * @param mixed $var The variable path to watch + * @return void + * @access public + */ + function ignore($var) { + if (!in_array($var, $this->watchKeys)) { + return; + } + foreach ($this->watchKeys as $i => $key) { + if ($key == $var) { + unset($this->watchKeys[$i]); + $this->watchKeys = array_values($this->watchKeys); + return; + } + } + } + +/** + * Writes value to given session variable name. + * + * @param mixed $name Name of variable + * @param string $value Value to write + * @return boolean True if the write was successful, false if the write failed + * @access public + */ + function write($name, $value) { + if (empty($name)) { + return false; + } + if (in_array($name, $this->watchKeys)) { + trigger_error(sprintf(__('Writing session key {%s}: %s', true), $name, Debugger::exportVar($value)), E_USER_NOTICE); + } + $this->__overwrite($_SESSION, Set::insert($_SESSION, $name, $value)); + return (Set::classicExtract($_SESSION, $name) === $value); + } + +/** + * Helper method to destroy invalid sessions. + * + * @return void + * @access public + */ + function destroy() { + $_SESSION = array(); + $this->__construct($this->path); + $this->start(); + $this->renew(); + $this->_checkValid(); + } + +/** + * Helper method to initialize a session, based on Cake core settings. + * + * @access private + */ + function __initSession() { + $iniSet = function_exists('ini_set'); + if ($iniSet && env('HTTPS')) { + ini_set('session.cookie_secure', 1); + } + if ($iniSet && ($this->security === 'high' || $this->security === 'medium')) { + ini_set('session.referer_check', $this->host); + } + + if ($this->security == 'high') { + $this->cookieLifeTime = 0; + } else { + $this->cookieLifeTime = Configure::read('Session.timeout') * (Security::inactiveMins() * 60); + } + + switch (Configure::read('Session.save')) { + case 'cake': + if (empty($_SESSION)) { + if ($iniSet) { + ini_set('session.use_trans_sid', 0); + ini_set('url_rewriter.tags', ''); + ini_set('session.serialize_handler', 'php'); + ini_set('session.use_cookies', 1); + ini_set('session.name', Configure::read('Session.cookie')); + ini_set('session.cookie_lifetime', $this->cookieLifeTime); + ini_set('session.cookie_path', $this->path); + ini_set('session.auto_start', 0); + ini_set('session.save_path', TMP . 'sessions'); + } + } + break; + case 'database': + if (empty($_SESSION)) { + if (Configure::read('Session.model') === null) { + trigger_error(__("You must set the all Configure::write('Session.*') in core.php to use database storage"), E_USER_WARNING); + $this->_stop(); + } + if ($iniSet) { + ini_set('session.use_trans_sid', 0); + ini_set('url_rewriter.tags', ''); + ini_set('session.save_handler', 'user'); + ini_set('session.serialize_handler', 'php'); + ini_set('session.use_cookies', 1); + ini_set('session.name', Configure::read('Session.cookie')); + ini_set('session.cookie_lifetime', $this->cookieLifeTime); + ini_set('session.cookie_path', $this->path); + ini_set('session.auto_start', 0); + } + } + session_set_save_handler( + array('CakeSession','__open'), + array('CakeSession', '__close'), + array('CakeSession', '__read'), + array('CakeSession', '__write'), + array('CakeSession', '__destroy'), + array('CakeSession', '__gc') + ); + break; + case 'php': + if (empty($_SESSION)) { + if ($iniSet) { + ini_set('session.use_trans_sid', 0); + ini_set('session.name', Configure::read('Session.cookie')); + ini_set('session.cookie_lifetime', $this->cookieLifeTime); + ini_set('session.cookie_path', $this->path); + } + } + break; + case 'cache': + if (empty($_SESSION)) { + if (!class_exists('Cache')) { + require LIBS . 'cache.php'; + } + if ($iniSet) { + ini_set('session.use_trans_sid', 0); + ini_set('url_rewriter.tags', ''); + ini_set('session.save_handler', 'user'); + ini_set('session.use_cookies', 1); + ini_set('session.name', Configure::read('Session.cookie')); + ini_set('session.cookie_lifetime', $this->cookieLifeTime); + ini_set('session.cookie_path', $this->path); + } + } + session_set_save_handler( + array('CakeSession','__open'), + array('CakeSession', '__close'), + array('Cache', 'read'), + array('Cache', 'write'), + array('Cache', 'delete'), + array('Cache', 'gc') + ); + break; + default: + $config = CONFIGS . Configure::read('Session.save') . '.php'; + + if (is_file($config)) { + require($config); + } + break; + } + } + +/** + * Helper method to start a session + * + * @access private + */ + function __startSession() { + if (headers_sent()) { + if (empty($_SESSION)) { + $_SESSION = array(); + } + return true; + } elseif (!isset($_SESSION)) { + session_cache_limiter ("must-revalidate"); + session_start(); + header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); + return true; + } else { + session_start(); + return true; + } + } + +/** + * Helper method to create a new session. + * + * @return void + * @access protected + */ + function _checkValid() { + if ($this->read('Config')) { + if ((Configure::read('Session.checkAgent') === false || $this->_userAgent == $this->read('Config.userAgent')) && $this->time <= $this->read('Config.time')) { + $time = $this->read('Config.time'); + $this->write('Config.time', $this->sessionTime); + if (Configure::read('Security.level') === 'high') { + $check = $this->read('Config.timeout'); + $check -= 1; + $this->write('Config.timeout', $check); + + if (time() > ($time - (Security::inactiveMins() * Configure::read('Session.timeout')) + 2) || $check < 1) { + $this->renew(); + $this->write('Config.timeout', 10); + } + } + $this->valid = true; + } else { + $this->destroy(); + $this->valid = false; + $this->__setError(1, 'Session Highjacking Attempted !!!'); + } + } else { + $this->write('Config.userAgent', $this->_userAgent); + $this->write('Config.time', $this->sessionTime); + $this->write('Config.timeout', 10); + $this->valid = true; + $this->__setError(1, 'Session is valid'); + } + } + +/** + * Helper method to restart a session. + * + * @return void + * @access private + */ + function __regenerateId() { + $oldSessionId = session_id(); + if ($oldSessionId) { + if (session_id() != ''|| isset($_COOKIE[session_name()])) { + setcookie(Configure::read('Session.cookie'), '', time() - 42000, $this->path); + } + session_regenerate_id(true); + if (PHP_VERSION < 5.1) { + $sessionPath = session_save_path(); + if (empty($sessionPath)) { + $sessionPath = '/tmp'; + } + $newSessid = session_id(); + + if (function_exists('session_write_close')) { + session_write_close(); + } + $this->__initSession(); + session_id($oldSessionId); + session_start(); + session_destroy(); + $file = $sessionPath . DS . 'sess_' . $oldSessionId; + @unlink($file); + $this->__initSession(); + session_id($newSessid); + session_start(); + } + } + } + +/** + * Restarts this session. + * + * @access public + */ + function renew() { + $this->__regenerateId(); + } + +/** + * Helper method to set an internal error message. + * + * @param integer $errorNumber Number of the error + * @param string $errorMessage Description of the error + * @return void + * @access private + */ + function __setError($errorNumber, $errorMessage) { + if ($this->error === false) { + $this->error = array(); + } + $this->error[$errorNumber] = $errorMessage; + $this->lastError = $errorNumber; + } + +/** + * Method called on open of a database session. + * + * @return boolean Success + * @access private + */ + function __open() { + return true; + } + +/** + * Method called on close of a database session. + * + * @return boolean Success + * @access private + */ + function __close() { + $probability = mt_rand(1, 150); + if ($probability <= 3) { + switch (Configure::read('Session.save')) { + case 'cache': + Cache::gc(); + break; + default: + CakeSession::__gc(); + break; + } + } + return true; + } + +/** + * Method used to read from a database session. + * + * @param mixed $id The key of the value to read + * @return mixed The value of the key or false if it does not exist + * @access private + */ + function __read($id) { + $model =& ClassRegistry::getObject('Session'); + + $row = $model->find('first', array( + 'conditions' => array($model->primaryKey => $id) + )); + + if (empty($row[$model->alias]['data'])) { + return false; + } + + return $row[$model->alias]['data']; + } + +/** + * Helper function called on write for database sessions. + * + * @param integer $id ID that uniquely identifies session in database + * @param mixed $data The value of the the data to be saved. + * @return boolean True for successful write, false otherwise. + * @access private + */ + function __write($id, $data) { + $expires = time() + Configure::read('Session.timeout') * Security::inactiveMins(); + $model =& ClassRegistry::getObject('Session'); + $return = $model->save(compact('id', 'data', 'expires')); + return $return; + } + +/** + * Method called on the destruction of a database session. + * + * @param integer $id ID that uniquely identifies session in database + * @return boolean True for successful delete, false otherwise. + * @access private + */ + function __destroy($id) { + $model =& ClassRegistry::getObject('Session'); + $return = $model->delete($id); + + return $return; + } + +/** + * Helper function called on gc for database sessions. + * + * @param integer $expires Timestamp (defaults to current time) + * @return boolean Success + * @access private + */ + function __gc($expires = null) { + $model =& ClassRegistry::getObject('Session'); + + if (!$expires) { + $expires = time(); + } + + $return = $model->deleteAll(array($model->alias . ".expires <" => $expires), false, false); + return $return; + } +} diff --git a/cake/libs/.svn/text-base/cake_socket.php.svn-base b/cake/libs/.svn/text-base/cake_socket.php.svn-base new file mode 100644 index 0000000..e55eb80 --- /dev/null +++ b/cake/libs/.svn/text-base/cake_socket.php.svn-base @@ -0,0 +1,304 @@ + false, + 'host' => 'localhost', + 'protocol' => 'tcp', + 'port' => 80, + 'timeout' => 30 + ); + +/** + * Configuration settings for the socket connection + * + * @var array + * @access public + */ + var $config = array(); + +/** + * Reference to socket connection resource + * + * @var resource + * @access public + */ + var $connection = null; + +/** + * This boolean contains the current state of the CakeSocket class + * + * @var boolean + * @access public + */ + var $connected = false; + +/** + * This variable contains an array with the last error number (num) and string (str) + * + * @var array + * @access public + */ + var $lastError = array(); + +/** + * Constructor. + * + * @param array $config Socket configuration, which will be merged with the base configuration + * @see CakeSocket::$_baseConfig + */ + function __construct($config = array()) { + parent::__construct(); + + $this->config = array_merge($this->_baseConfig, $config); + if (!is_numeric($this->config['protocol'])) { + $this->config['protocol'] = getprotobyname($this->config['protocol']); + } + } + +/** + * Connect the socket to the given host and port. + * + * @return boolean Success + * @access public + */ + function connect() { + if ($this->connection != null) { + $this->disconnect(); + } + + $scheme = null; + if (isset($this->config['request']) && $this->config['request']['uri']['scheme'] == 'https') { + $scheme = 'ssl://'; + } + + if ($this->config['persistent'] == true) { + $tmp = null; + $this->connection = @pfsockopen($scheme.$this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']); + } else { + $this->connection = @fsockopen($scheme.$this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']); + } + + if (!empty($errNum) || !empty($errStr)) { + $this->setLastError($errStr, $errNum); + } + + $this->connected = is_resource($this->connection); + if ($this->connected) { + stream_set_timeout($this->connection, $this->config['timeout']); + } + return $this->connected; + } + +/** + * Get the host name of the current connection. + * + * @return string Host name + * @access public + */ + function host() { + if (Validation::ip($this->config['host'])) { + return gethostbyaddr($this->config['host']); + } else { + return gethostbyaddr($this->address()); + } + } + +/** + * Get the IP address of the current connection. + * + * @return string IP address + * @access public + */ + function address() { + if (Validation::ip($this->config['host'])) { + return $this->config['host']; + } else { + return gethostbyname($this->config['host']); + } + } + +/** + * Get all IP addresses associated with the current connection. + * + * @return array IP addresses + * @access public + */ + function addresses() { + if (Validation::ip($this->config['host'])) { + return array($this->config['host']); + } else { + return gethostbynamel($this->config['host']); + } + } + +/** + * Get the last error as a string. + * + * @return string Last error + * @access public + */ + function lastError() { + if (!empty($this->lastError)) { + return $this->lastError['num'] . ': ' . $this->lastError['str']; + } else { + return null; + } + } + +/** + * Set the last error. + * + * @param integer $errNum Error code + * @param string $errStr Error string + * @access public + */ + function setLastError($errNum, $errStr) { + $this->lastError = array('num' => $errNum, 'str' => $errStr); + } + +/** + * Write data to the socket. + * + * @param string $data The data to write to the socket + * @return boolean Success + * @access public + */ + function write($data) { + if (!$this->connected) { + if (!$this->connect()) { + return false; + } + } + + return fwrite($this->connection, $data, strlen($data)); + } + +/** + * Read data from the socket. Returns false if no data is available or no connection could be + * established. + * + * @param integer $length Optional buffer length to read; defaults to 1024 + * @return mixed Socket data + * @access public + */ + function read($length = 1024) { + if (!$this->connected) { + if (!$this->connect()) { + return false; + } + } + + if (!feof($this->connection)) { + $buffer = fread($this->connection, $length); + $info = stream_get_meta_data($this->connection); + if ($info['timed_out']) { + $this->setLastError(E_WARNING, __('Connection timed out', true)); + return false; + } + return $buffer; + } else { + return false; + } + } + +/** + * Abort socket operation. + * + * @return boolean Success + * @access public + */ + function abort() { + } + +/** + * Disconnect the socket from the current connection. + * + * @return boolean Success + * @access public + */ + function disconnect() { + if (!is_resource($this->connection)) { + $this->connected = false; + return true; + } + $this->connected = !fclose($this->connection); + + if (!$this->connected) { + $this->connection = null; + } + return !$this->connected; + } + +/** + * Destructor, used to disconnect from current connection. + * + * @access private + */ + function __destruct() { + $this->disconnect(); + } + +/** + * Resets the state of this Socket instance to it's initial state (before Object::__construct got executed) + * + * @return boolean True on success + * @access public + */ + function reset($state = null) { + if (empty($state)) { + static $initalState = array(); + if (empty($initalState)) { + $initalState = get_class_vars(__CLASS__); + } + $state = $initalState; + } + + foreach ($state as $property => $value) { + $this->{$property} = $value; + } + return true; + } +} diff --git a/cake/libs/.svn/text-base/class_registry.php.svn-base b/cake/libs/.svn/text-base/class_registry.php.svn-base new file mode 100644 index 0000000..60d9b4b --- /dev/null +++ b/cake/libs/.svn/text-base/class_registry.php.svn-base @@ -0,0 +1,364 @@ + 'ClassName', 'alias' => 'AliasNameStoredInTheRegistry', 'type' => 'TypeOfClass');``` + * + * Model Classes can accept optional ```array('id' => $id, 'table' => $table, 'ds' => $ds, 'alias' => $alias);``` + * + * When $class is a numeric keyed array, multiple class instances will be stored in the registry, + * no instance of the object will be returned + * {{{ + * array( + * array('class' => 'ClassName', 'alias' => 'AliasNameStoredInTheRegistry', 'type' => 'TypeOfClass'), + * array('class' => 'ClassName', 'alias' => 'AliasNameStoredInTheRegistry', 'type' => 'TypeOfClass'), + * array('class' => 'ClassName', 'alias' => 'AliasNameStoredInTheRegistry', 'type' => 'TypeOfClass') + * ); + * }}} + * @param mixed $class as a string or a single key => value array instance will be created, + * stored in the registry and returned. + * @param string $type TypeOfClass + * @return object instance of ClassName + * @access public + * @static + */ + function &init($class, $type = null) { + $_this =& ClassRegistry::getInstance(); + $id = $false = false; + $true = true; + + if (!$type) { + $type = 'Model'; + } + + if (is_array($class)) { + $objects = $class; + if (!isset($class[0])) { + $objects = array($class); + } + } else { + $objects = array(array('class' => $class)); + } + $defaults = isset($_this->__config[$type]) ? $_this->__config[$type] : array(); + $count = count($objects); + + foreach ($objects as $key => $settings) { + if (is_array($settings)) { + $pluginPath = null; + $settings = array_merge($defaults, $settings); + $class = $settings['class']; + + list($plugin, $class) = pluginSplit($class); + if ($plugin) { + $pluginPath = $plugin . '.'; + } + + if (empty($settings['alias'])) { + $settings['alias'] = $class; + } + $alias = $settings['alias']; + + if ($model =& $_this->__duplicate($alias, $class)) { + $_this->map($alias, $class); + return $model; + } + + if (class_exists($class) || App::import($type, $pluginPath . $class)) { + ${$class} =& new $class($settings); + } elseif ($type === 'Model') { + if ($plugin && class_exists($plugin . 'AppModel')) { + $appModel = $plugin . 'AppModel'; + } else { + $appModel = 'AppModel'; + } + $settings['name'] = $class; + ${$class} =& new $appModel($settings); + } + + if (!isset(${$class})) { + trigger_error(sprintf(__('(ClassRegistry::init() could not create instance of %1$s class %2$s ', true), $class, $type), E_USER_WARNING); + return $false; + } + + if ($type !== 'Model') { + $_this->addObject($alias, ${$class}); + } else { + $_this->map($alias, $class); + } + } elseif (is_numeric($settings)) { + trigger_error(__('(ClassRegistry::init() Attempted to create instance of a class with a numeric name', true), E_USER_WARNING); + return $false; + } + } + + if ($count > 1) { + return $true; + } + return ${$class}; + } + +/** + * Add $object to the registry, associating it with the name $key. + * + * @param string $key Key for the object in registry + * @param mixed $object Object to store + * @return boolean True if the object was written, false if $key already exists + * @access public + * @static + */ + function addObject($key, &$object) { + $_this =& ClassRegistry::getInstance(); + $key = Inflector::underscore($key); + if (!isset($_this->__objects[$key])) { + $_this->__objects[$key] =& $object; + return true; + } + return false; + } + +/** + * Remove object which corresponds to given key. + * + * @param string $key Key of object to remove from registry + * @return void + * @access public + * @static + */ + function removeObject($key) { + $_this =& ClassRegistry::getInstance(); + $key = Inflector::underscore($key); + if (isset($_this->__objects[$key])) { + unset($_this->__objects[$key]); + } + } + +/** + * Returns true if given key is present in the ClassRegistry. + * + * @param string $key Key to look for + * @return boolean true if key exists in registry, false otherwise + * @access public + * @static + */ + function isKeySet($key) { + $_this =& ClassRegistry::getInstance(); + $key = Inflector::underscore($key); + if (isset($_this->__objects[$key])) { + return true; + } elseif (isset($_this->__map[$key])) { + return true; + } + return false; + } + +/** + * Get all keys from the registry. + * + * @return array Set of keys stored in registry + * @access public + * @static + */ + function keys() { + $_this =& ClassRegistry::getInstance(); + return array_keys($_this->__objects); + } + +/** + * Return object which corresponds to given key. + * + * @param string $key Key of object to look for + * @return mixed Object stored in registry or boolean false if the object does not exist. + * @access public + * @static + */ + function &getObject($key) { + $_this =& ClassRegistry::getInstance(); + $key = Inflector::underscore($key); + $return = false; + if (isset($_this->__objects[$key])) { + $return =& $_this->__objects[$key]; + } else { + $key = $_this->__getMap($key); + if (isset($_this->__objects[$key])) { + $return =& $_this->__objects[$key]; + } + } + return $return; + } + +/** + * Sets the default constructor parameter for an object type + * + * @param string $type Type of object. If this parameter is omitted, defaults to "Model" + * @param array $param The parameter that will be passed to object constructors when objects + * of $type are created + * @return mixed Void if $param is being set. Otherwise, if only $type is passed, returns + * the previously-set value of $param, or null if not set. + * @access public + * @static + */ + function config($type, $param = array()) { + $_this =& ClassRegistry::getInstance(); + + if (empty($param) && is_array($type)) { + $param = $type; + $type = 'Model'; + } elseif (is_null($param)) { + unset($_this->__config[$type]); + } elseif (empty($param) && is_string($type)) { + return isset($_this->__config[$type]) ? $_this->__config[$type] : null; + } + $_this->__config[$type] = $param; + } + +/** + * Checks to see if $alias is a duplicate $class Object + * + * @param string $alias + * @param string $class + * @return boolean + * @access private + * @static + */ + function &__duplicate($alias, $class) { + $duplicate = false; + if ($this->isKeySet($alias)) { + $model =& $this->getObject($alias); + if (is_object($model) && (is_a($model, $class) || $model->alias === $class)) { + $duplicate =& $model; + } + unset($model); + } + return $duplicate; + } + +/** + * Add a key name pair to the registry to map name to class in the registry. + * + * @param string $key Key to include in map + * @param string $name Key that is being mapped + * @access public + * @static + */ + function map($key, $name) { + $_this =& ClassRegistry::getInstance(); + $key = Inflector::underscore($key); + $name = Inflector::underscore($name); + if (!isset($_this->__map[$key])) { + $_this->__map[$key] = $name; + } + } + +/** + * Get all keys from the map in the registry. + * + * @return array Keys of registry's map + * @access public + * @static + */ + function mapKeys() { + $_this =& ClassRegistry::getInstance(); + return array_keys($_this->__map); + } + +/** + * Return the name of a class in the registry. + * + * @param string $key Key to find in map + * @return string Mapped value + * @access private + * @static + */ + function __getMap($key) { + if (isset($this->__map[$key])) { + return $this->__map[$key]; + } + } + +/** + * Flushes all objects from the ClassRegistry. + * + * @return void + * @access public + * @static + */ + function flush() { + $_this =& ClassRegistry::getInstance(); + $_this->__objects = array(); + $_this->__map = array(); + } +} diff --git a/cake/libs/.svn/text-base/configure.php.svn-base b/cake/libs/.svn/text-base/configure.php.svn-base new file mode 100644 index 0000000..fc2f4ee --- /dev/null +++ b/cake/libs/.svn/text-base/configure.php.svn-base @@ -0,0 +1,1311 @@ +__loadBootstrap($boot); + } + return $instance[0]; + } + +/** + * Used to store a dynamic variable in the Configure instance. + * + * Usage: + * {{{ + * Configure::write('One.key1', 'value of the Configure::One[key1]'); + * Configure::write(array('One.key1' => 'value of the Configure::One[key1]')); + * Configure::write('One', array( + * 'key1' => 'value of the Configure::One[key1]', + * 'key2' => 'value of the Configure::One[key2]' + * ); + * + * Configure::write(array( + * 'One.key1' => 'value of the Configure::One[key1]', + * 'One.key2' => 'value of the Configure::One[key2]' + * )); + * }}} + * + * @link http://book.cakephp.org/view/926/write + * @param array $config Name of var to write + * @param mixed $value Value to set for var + * @return boolean True if write was successful + * @access public + */ + function write($config, $value = null) { + $_this =& Configure::getInstance(); + + if (!is_array($config)) { + $config = array($config => $value); + } + + foreach ($config as $name => $value) { + if (strpos($name, '.') === false) { + $_this->{$name} = $value; + } else { + $names = explode('.', $name, 4); + switch (count($names)) { + case 2: + $_this->{$names[0]}[$names[1]] = $value; + break; + case 3: + $_this->{$names[0]}[$names[1]][$names[2]] = $value; + case 4: + $names = explode('.', $name, 2); + if (!isset($_this->{$names[0]})) { + $_this->{$names[0]} = array(); + } + $_this->{$names[0]} = Set::insert($_this->{$names[0]}, $names[1], $value); + break; + } + } + } + + if (isset($config['debug']) || isset($config['log'])) { + $reporting = 0; + if ($_this->debug) { + if (!class_exists('Debugger')) { + require LIBS . 'debugger.php'; + } + $reporting = E_ALL & ~E_DEPRECATED; + if (function_exists('ini_set')) { + ini_set('display_errors', 1); + } + } elseif (function_exists('ini_set')) { + ini_set('display_errors', 0); + } + + if (isset($_this->log) && $_this->log) { + if (!class_exists('CakeLog')) { + require LIBS . 'cake_log.php'; + } + if (is_integer($_this->log) && !$_this->debug) { + $reporting = $_this->log; + } else { + $reporting = E_ALL & ~E_DEPRECATED; + } + } + error_reporting($reporting); + } + return true; + } + +/** + * Used to read information stored in the Configure instance. + * + * Usage: + * {{{ + * Configure::read('Name'); will return all values for Name + * Configure::read('Name.key'); will return only the value of Configure::Name[key] + * }}} + * + * @link http://book.cakephp.org/view/927/read + * @param string $var Variable to obtain. Use '.' to access array elements. + * @return string value of Configure::$var + * @access public + */ + function read($var = 'debug') { + $_this =& Configure::getInstance(); + + if ($var === 'debug') { + return $_this->debug; + } + + if (strpos($var, '.') !== false) { + $names = explode('.', $var, 3); + $var = $names[0]; + } + if (!isset($_this->{$var})) { + return null; + } + if (!isset($names[1])) { + return $_this->{$var}; + } + switch (count($names)) { + case 2: + if (isset($_this->{$var}[$names[1]])) { + return $_this->{$var}[$names[1]]; + } + break; + case 3: + if (isset($_this->{$var}[$names[1]][$names[2]])) { + return $_this->{$var}[$names[1]][$names[2]]; + } + if (!isset($_this->{$var}[$names[1]])) { + return null; + } + return Set::classicExtract($_this->{$var}[$names[1]], $names[2]); + break; + } + return null; + } + +/** + * Used to delete a variable from the Configure instance. + * + * Usage: + * {{{ + * Configure::delete('Name'); will delete the entire Configure::Name + * Configure::delete('Name.key'); will delete only the Configure::Name[key] + * }}} + * + * @link http://book.cakephp.org/view/928/delete + * @param string $var the var to be deleted + * @return void + * @access public + */ + function delete($var = null) { + $_this =& Configure::getInstance(); + + if (strpos($var, '.') === false) { + unset($_this->{$var}); + return; + } + + $names = explode('.', $var, 2); + $_this->{$names[0]} = Set::remove($_this->{$names[0]}, $names[1]); + } + +/** + * Loads a file from app/config/configure_file.php. + * Config file variables should be formated like: + * `$config['name'] = 'value';` + * These will be used to create dynamic Configure vars. load() is also used to + * load stored config files created with Configure::store() + * + * - To load config files from app/config use `Configure::load('configure_file');`. + * - To load config files from a plugin `Configure::load('plugin.configure_file');`. + * + * @link http://book.cakephp.org/view/929/load + * @param string $fileName name of file to load, extension must be .php and only the name + * should be used, not the extenstion + * @return mixed false if file not found, void if load successful + * @access public + */ + function load($fileName) { + $found = $plugin = $pluginPath = false; + list($plugin, $fileName) = pluginSplit($fileName); + if ($plugin) { + $pluginPath = App::pluginPath($plugin); + } + $pos = strpos($fileName, '..'); + + if ($pos === false) { + if ($pluginPath && file_exists($pluginPath . 'config' . DS . $fileName . '.php')) { + include($pluginPath . 'config' . DS . $fileName . '.php'); + $found = true; + } elseif (file_exists(CONFIGS . $fileName . '.php')) { + include(CONFIGS . $fileName . '.php'); + $found = true; + } elseif (file_exists(CACHE . 'persistent' . DS . $fileName . '.php')) { + include(CACHE . 'persistent' . DS . $fileName . '.php'); + $found = true; + } else { + foreach (App::core('cake') as $key => $path) { + if (file_exists($path . DS . 'config' . DS . $fileName . '.php')) { + include($path . DS . 'config' . DS . $fileName . '.php'); + $found = true; + break; + } + } + } + } + + if (!$found) { + return false; + } + + if (!isset($config)) { + trigger_error(sprintf(__('Configure::load() - no variable $config found in %s.php', true), $fileName), E_USER_WARNING); + return false; + } + return Configure::write($config); + } + +/** + * Used to determine the current version of CakePHP. + * + * Usage `Configure::version();` + * + * @link http://book.cakephp.org/view/930/version + * @return string Current version of CakePHP + * @access public + */ + function version() { + $_this =& Configure::getInstance(); + + if (!isset($_this->Cake['version'])) { + require(CORE_PATH . 'cake' . DS . 'config' . DS . 'config.php'); + $_this->write($config); + } + return $_this->Cake['version']; + } + +/** + * Used to write a config file to disk. + * + * {{{ + * Configure::store('Model', 'class_paths', array('Users' => array( + * 'path' => 'users', 'plugin' => true + * ))); + * }}} + * + * @param string $type Type of config file to write, ex: Models, Controllers, Helpers, Components + * @param string $name file name. + * @param array $data array of values to store. + * @return void + * @access public + */ + function store($type, $name, $data = array()) { + $write = true; + $content = ''; + + foreach ($data as $key => $value) { + $content .= "\$config['$type']['$key'] = " . var_export($value, true) . ";\n"; + } + if (is_null($type)) { + $write = false; + } + Configure::__writeConfig($content, $name, $write); + } + +/** + * Creates a cached version of a configuration file. + * Appends values passed from Configure::store() to the cached file + * + * @param string $content Content to write on file + * @param string $name Name to use for cache file + * @param boolean $write true if content should be written, false otherwise + * @return void + * @access private + */ + function __writeConfig($content, $name, $write = true) { + $file = CACHE . 'persistent' . DS . $name . '.php'; + + if (Configure::read() > 0) { + $expires = "+10 seconds"; + } else { + $expires = "+999 days"; + } + $cache = cache('persistent' . DS . $name . '.php', null, $expires); + + if ($cache === null) { + cache('persistent' . DS . $name . '.php', "writable()) { + $fileClass->append($content); + } + } + } + +/** + * @deprecated + * @see App::objects() + */ + function listObjects($type, $path = null, $cache = true) { + return App::objects($type, $path, $cache); + } + +/** + * @deprecated + * @see App::core() + */ + function corePaths($type = null) { + return App::core($type); + } + +/** + * @deprecated + * @see App::build() + */ + function buildPaths($paths) { + return App::build($paths); + } + +/** + * Loads app/config/bootstrap.php. + * If the alternative paths are set in this file + * they will be added to the paths vars. + * + * @param boolean $boot Load application bootstrap (if true) + * @return void + * @access private + */ + function __loadBootstrap($boot) { + if ($boot) { + Configure::write('App', array('base' => false, 'baseUrl' => false, 'dir' => APP_DIR, 'webroot' => WEBROOT_DIR, 'www_root' => WWW_ROOT)); + + if (!include(CONFIGS . 'core.php')) { + trigger_error(sprintf(__("Can't find application core file. Please create %score.php, and make sure it is readable by PHP.", true), CONFIGS), E_USER_ERROR); + } + + if (Configure::read('Cache.disable') !== true) { + $cache = Cache::config('default'); + + if (empty($cache['settings'])) { + trigger_error(__('Cache not configured properly. Please check Cache::config(); in APP/config/core.php', true), E_USER_WARNING); + $cache = Cache::config('default', array('engine' => 'File')); + } + $path = $prefix = $duration = null; + + if (!empty($cache['settings']['path'])) { + $path = realpath($cache['settings']['path']); + } else { + $prefix = $cache['settings']['prefix']; + } + + if (Configure::read() >= 1) { + $duration = '+10 seconds'; + } else { + $duration = '+999 days'; + } + + if (Cache::config('_cake_core_') === false) { + Cache::config('_cake_core_', array_merge((array)$cache['settings'], array( + 'prefix' => $prefix . 'cake_core_', 'path' => $path . DS . 'persistent' . DS, + 'serialize' => true, 'duration' => $duration + ))); + } + + if (Cache::config('_cake_model_') === false) { + Cache::config('_cake_model_', array_merge((array)$cache['settings'], array( + 'prefix' => $prefix . 'cake_model_', 'path' => $path . DS . 'models' . DS, + 'serialize' => true, 'duration' => $duration + ))); + } + Cache::config('default'); + } + App::build(); + if (!include(CONFIGS . 'bootstrap.php')) { + trigger_error(sprintf(__("Can't find application bootstrap file. Please create %sbootstrap.php, and make sure it is readable by PHP.", true), CONFIGS), E_USER_ERROR); + } + } + } +} + +/** + * Class/file loader and path management. + * + * @link http://book.cakephp.org/view/933/The-App-Class + * @since CakePHP(tm) v 1.2.0.6001 + * @package cake + * @subpackage cake.cake.libs + */ +class App extends Object { + +/** + * List of object types and their properties + * + * @var array + * @access public + */ + var $types = array( + 'class' => array('suffix' => '.php', 'extends' => null, 'core' => true), + 'file' => array('suffix' => '.php', 'extends' => null, 'core' => true), + 'model' => array('suffix' => '.php', 'extends' => 'AppModel', 'core' => false), + 'behavior' => array('suffix' => '.php', 'extends' => 'ModelBehavior', 'core' => true), + 'controller' => array('suffix' => '_controller.php', 'extends' => 'AppController', 'core' => true), + 'component' => array('suffix' => '.php', 'extends' => null, 'core' => true), + 'lib' => array('suffix' => '.php', 'extends' => null, 'core' => true), + 'view' => array('suffix' => '.php', 'extends' => null, 'core' => true), + 'helper' => array('suffix' => '.php', 'extends' => 'AppHelper', 'core' => true), + 'vendor' => array('suffix' => '', 'extends' => null, 'core' => true), + 'shell' => array('suffix' => '.php', 'extends' => 'Shell', 'core' => true), + 'plugin' => array('suffix' => '', 'extends' => null, 'core' => true) + ); + +/** + * List of additional path(s) where model files reside. + * + * @var array + * @access public + */ + var $models = array(); + +/** + * List of additional path(s) where behavior files reside. + * + * @var array + * @access public + */ + var $behaviors = array(); + +/** + * List of additional path(s) where controller files reside. + * + * @var array + * @access public + */ + var $controllers = array(); + +/** + * List of additional path(s) where component files reside. + * + * @var array + * @access public + */ + var $components = array(); + +/** + * List of additional path(s) where datasource files reside. + * + * @var array + * @access public + */ + var $datasources = array(); + +/** + * List of additional path(s) where libs files reside. + * + * @var array + * @access public + */ + var $libs = array(); +/** + * List of additional path(s) where view files reside. + * + * @var array + * @access public + */ + var $views = array(); + +/** + * List of additional path(s) where helper files reside. + * + * @var array + * @access public + */ + var $helpers = array(); + +/** + * List of additional path(s) where plugins reside. + * + * @var array + * @access public + */ + var $plugins = array(); + +/** + * List of additional path(s) where vendor packages reside. + * + * @var array + * @access public + */ + var $vendors = array(); + +/** + * List of additional path(s) where locale files reside. + * + * @var array + * @access public + */ + var $locales = array(); + +/** + * List of additional path(s) where console shell files reside. + * + * @var array + * @access public + */ + var $shells = array(); + +/** + * Paths to search for files. + * + * @var array + * @access public + */ + var $search = array(); + +/** + * Whether or not to return the file that is loaded. + * + * @var boolean + * @access public + */ + var $return = false; + +/** + * Determines if $__maps and $__paths cache should be written. + * + * @var boolean + * @access private + */ + var $__cache = false; + +/** + * Holds key/value pairs of $type => file path. + * + * @var array + * @access private + */ + var $__map = array(); + +/** + * Holds paths for deep searching of files. + * + * @var array + * @access private + */ + var $__paths = array(); + +/** + * Holds loaded files. + * + * @var array + * @access private + */ + var $__loaded = array(); + +/** + * Holds and key => value array of object types. + * + * @var array + * @access private + */ + var $__objects = array(); + +/** + * Used to read information stored path + * + * Usage: + * + * `App::path('models'); will return all paths for models` + * + * @param string $type type of path + * @return string array + * @access public + */ + function path($type) { + $_this =& App::getInstance(); + if (!isset($_this->{$type})) { + return array(); + } + return $_this->{$type}; + } + +/** + * Build path references. Merges the supplied $paths + * with the base paths and the default core paths. + * + * @param array $paths paths defines in config/bootstrap.php + * @param boolean $reset true will set paths, false merges paths [default] false + * @return void + * @access public + */ + function build($paths = array(), $reset = false) { + $_this =& App::getInstance(); + $defaults = array( + 'models' => array(MODELS), + 'behaviors' => array(BEHAVIORS), + 'datasources' => array(MODELS . 'datasources'), + 'controllers' => array(CONTROLLERS), + 'components' => array(COMPONENTS), + 'libs' => array(APPLIBS), + 'views' => array(VIEWS), + 'helpers' => array(HELPERS), + 'locales' => array(APP . 'locale' . DS), + 'shells' => array(APP . 'vendors' . DS . 'shells' . DS, VENDORS . 'shells' . DS), + 'vendors' => array(APP . 'vendors' . DS, VENDORS), + 'plugins' => array(APP . 'plugins' . DS) + ); + + if ($reset == true) { + foreach ($paths as $type => $new) { + $_this->{$type} = (array)$new; + } + return $paths; + } + + $core = $_this->core(); + $app = array('models' => true, 'controllers' => true, 'helpers' => true); + + foreach ($defaults as $type => $default) { + $merge = array(); + + if (isset($app[$type])) { + $merge = array(APP); + } + if (isset($core[$type])) { + $merge = array_merge($merge, (array)$core[$type]); + } + + if (empty($_this->{$type}) || empty($paths)) { + $_this->{$type} = $default; + } + + if (!empty($paths[$type])) { + $path = array_flip(array_flip(array_merge( + (array)$paths[$type], $_this->{$type}, $merge + ))); + $_this->{$type} = array_values($path); + } else { + $path = array_flip(array_flip(array_merge($_this->{$type}, $merge))); + $_this->{$type} = array_values($path); + } + } + } + +/** + * Get the path that a plugin is on. Searches through the defined plugin paths. + * + * @param string $plugin CamelCased/lower_cased plugin name to find the path of. + * @return string full path to the plugin. + */ + function pluginPath($plugin) { + $_this =& App::getInstance(); + $pluginDir = Inflector::underscore($plugin); + for ($i = 0, $length = count($_this->plugins); $i < $length; $i++) { + if (is_dir($_this->plugins[$i] . $pluginDir)) { + return $_this->plugins[$i] . $pluginDir . DS ; + } + } + return $_this->plugins[0] . $pluginDir . DS; + } + +/** + * Find the path that a theme is on. Search through the defined theme paths. + * + * @param string $theme lower_cased theme name to find the path of. + * @return string full path to the theme. + */ + function themePath($theme) { + $_this =& App::getInstance(); + $themeDir = 'themed' . DS . Inflector::underscore($theme); + for ($i = 0, $length = count($_this->views); $i < $length; $i++) { + if (is_dir($_this->views[$i] . $themeDir)) { + return $_this->views[$i] . $themeDir . DS ; + } + } + return $_this->views[0] . $themeDir . DS; + } + +/** + * Returns a key/value list of all paths where core libs are found. + * Passing $type only returns the values for a given value of $key. + * + * @param string $type valid values are: 'model', 'behavior', 'controller', 'component', + * 'view', 'helper', 'datasource', 'libs', and 'cake' + * @return array numeric keyed array of core lib paths + * @access public + */ + function core($type = null) { + static $paths = false; + if ($paths === false) { + $paths = Cache::read('core_paths', '_cake_core_'); + } + if (!$paths) { + $paths = array(); + $libs = dirname(__FILE__) . DS; + $cake = dirname($libs) . DS; + $path = dirname($cake) . DS; + + $paths['cake'][] = $cake; + $paths['libs'][] = $libs; + $paths['models'][] = $libs . 'model' . DS; + $paths['datasources'][] = $libs . 'model' . DS . 'datasources' . DS; + $paths['behaviors'][] = $libs . 'model' . DS . 'behaviors' . DS; + $paths['controllers'][] = $libs . 'controller' . DS; + $paths['components'][] = $libs . 'controller' . DS . 'components' . DS; + $paths['views'][] = $libs . 'view' . DS; + $paths['helpers'][] = $libs . 'view' . DS . 'helpers' . DS; + $paths['plugins'][] = $path . 'plugins' . DS; + $paths['vendors'][] = $path . 'vendors' . DS; + $paths['shells'][] = $cake . 'console' . DS . 'libs' . DS; + + Cache::write('core_paths', array_filter($paths), '_cake_core_'); + } + if ($type && isset($paths[$type])) { + return $paths[$type]; + } + return $paths; + } + +/** + * Returns an array of objects of the given type. + * + * Example usage: + * + * `App::objects('plugin');` returns `array('DebugKit', 'Blog', 'User');` + * + * @param string $type Type of object, i.e. 'model', 'controller', 'helper', or 'plugin' + * @param mixed $path Optional Scan only the path given. If null, paths for the chosen + * type will be used. + * @param boolean $cache Set to false to rescan objects of the chosen type. Defaults to true. + * @return mixed Either false on incorrect / miss. Or an array of found objects. + * @access public + */ + function objects($type, $path = null, $cache = true) { + $objects = array(); + $extension = false; + $name = $type; + + if ($type === 'file' && !$path) { + return false; + } elseif ($type === 'file') { + $extension = true; + $name = $type . str_replace(DS, '', $path); + } + $_this =& App::getInstance(); + + if (empty($_this->__objects) && $cache === true) { + $_this->__objects = Cache::read('object_map', '_cake_core_'); + } + + if (!isset($_this->__objects[$name]) || $cache !== true) { + $types = $_this->types; + + if (!isset($types[$type])) { + return false; + } + $objects = array(); + + if (empty($path)) { + $path = $_this->{"{$type}s"}; + if (isset($types[$type]['core']) && $types[$type]['core'] === false) { + array_pop($path); + } + } + $items = array(); + + foreach ((array)$path as $dir) { + if ($dir != APP) { + $items = $_this->__list($dir, $types[$type]['suffix'], $extension); + $objects = array_merge($items, array_diff($objects, $items)); + } + } + + if ($type !== 'file') { + foreach ($objects as $key => $value) { + $objects[$key] = Inflector::camelize($value); + } + } + + if ($cache === true) { + $_this->__cache = true; + } + $_this->__objects[$name] = $objects; + } + + return $_this->__objects[$name]; + } + +/** + * Finds classes based on $name or specific file(s) to search. + * + * @link http://book.cakephp.org/view/934/Using-App-import + * @param mixed $type The type of Class if passed as a string, or all params can be passed as + * an single array to $type, + * @param string $name Name of the Class or a unique name for the file + * @param mixed $parent boolean true if Class Parent should be searched, accepts key => value + * array('parent' => $parent ,'file' => $file, 'search' => $search, 'ext' => '$ext'); + * $ext allows setting the extension of the file name + * based on Inflector::underscore($name) . ".$ext"; + * @param array $search paths to search for files, array('path 1', 'path 2', 'path 3'); + * @param string $file full name of the file to search for including extension + * @param boolean $return, return the loaded file, the file must have a return + * statement in it to work: return $variable; + * @return boolean true if Class is already in memory or if file is found and loaded, false if not + * @access public + */ + function import($type = null, $name = null, $parent = true, $search = array(), $file = null, $return = false) { + $plugin = $directory = null; + + if (is_array($type)) { + extract($type, EXTR_OVERWRITE); + } + + if (is_array($parent)) { + extract($parent, EXTR_OVERWRITE); + } + + if ($name === null && $file === null) { + $name = $type; + $type = 'Core'; + } elseif ($name === null) { + $type = 'File'; + } + + if (is_array($name)) { + foreach ($name as $class) { + $tempType = $type; + $plugin = null; + + if (strpos($class, '.') !== false) { + $value = explode('.', $class); + $count = count($value); + + if ($count > 2) { + $tempType = $value[0]; + $plugin = $value[1] . '.'; + $class = $value[2]; + } elseif ($count === 2 && ($type === 'Core' || $type === 'File')) { + $tempType = $value[0]; + $class = $value[1]; + } else { + $plugin = $value[0] . '.'; + $class = $value[1]; + } + } + + if (!App::import($tempType, $plugin . $class, $parent)) { + return false; + } + } + return true; + } + + if ($name != null && strpos($name, '.') !== false) { + list($plugin, $name) = explode('.', $name); + $plugin = Inflector::camelize($plugin); + } + $_this =& App::getInstance(); + $_this->return = $return; + + if (isset($ext)) { + $file = Inflector::underscore($name) . ".{$ext}"; + } + $ext = $_this->__settings($type, $plugin, $parent); + if ($name != null && !class_exists($name . $ext['class'])) { + if ($load = $_this->__mapped($name . $ext['class'], $type, $plugin)) { + if ($_this->__load($load)) { + $_this->__overload($type, $name . $ext['class'], $parent); + + if ($_this->return) { + return include($load); + } + return true; + } else { + $_this->__remove($name . $ext['class'], $type, $plugin); + $_this->__cache = true; + } + } + if (!empty($search)) { + $_this->search = $search; + } elseif ($plugin) { + $_this->search = $_this->__paths('plugin'); + } else { + $_this->search = $_this->__paths($type); + } + $find = $file; + + if ($find === null) { + $find = Inflector::underscore($name . $ext['suffix']).'.php'; + + if ($plugin) { + $paths = $_this->search; + foreach ($paths as $key => $value) { + $_this->search[$key] = $value . $ext['path']; + } + } + } + + if (strtolower($type) !== 'vendor' && empty($search) && $_this->__load($file)) { + $directory = false; + } else { + $file = $find; + $directory = $_this->__find($find, true); + } + + if ($directory !== null) { + $_this->__cache = true; + $_this->__map($directory . $file, $name . $ext['class'], $type, $plugin); + $_this->__overload($type, $name . $ext['class'], $parent); + + if ($_this->return) { + return include($directory . $file); + } + return true; + } + return false; + } + return true; + } + +/** + * Returns a single instance of App. + * + * @return object + * @access public + */ + function &getInstance() { + static $instance = array(); + if (!$instance) { + $instance[0] =& new App(); + $instance[0]->__map = (array)Cache::read('file_map', '_cake_core_'); + } + return $instance[0]; + } + +/** + * Locates the $file in $__paths, searches recursively. + * + * @param string $file full file name + * @param boolean $recursive search $__paths recursively + * @return mixed boolean on fail, $file directory path on success + * @access private + */ + function __find($file, $recursive = true) { + static $appPath = false; + + if (empty($this->search)) { + return null; + } elseif (is_string($this->search)) { + $this->search = array($this->search); + } + + if (empty($this->__paths)) { + $this->__paths = Cache::read('dir_map', '_cake_core_'); + } + + foreach ($this->search as $path) { + if ($appPath === false) { + $appPath = rtrim(APP, DS); + } + $path = rtrim($path, DS); + + if ($path === $appPath) { + $recursive = false; + } + if ($recursive === false) { + if ($this->__load($path . DS . $file)) { + return $path . DS; + } + continue; + } + + if (!isset($this->__paths[$path])) { + if (!class_exists('Folder')) { + require LIBS . 'folder.php'; + } + $Folder =& new Folder(); + $directories = $Folder->tree($path, array('.svn', '.git', 'CVS', 'tests', 'templates'), 'dir'); + sort($directories); + $this->__paths[$path] = $directories; + } + + foreach ($this->__paths[$path] as $directory) { + if ($this->__load($directory . DS . $file)) { + return $directory . DS; + } + } + } + return null; + } + +/** + * Attempts to load $file. + * + * @param string $file full path to file including file name + * @return boolean + * @access private + */ + function __load($file) { + if (empty($file)) { + return false; + } + if (!$this->return && isset($this->__loaded[$file])) { + return true; + } + if (file_exists($file)) { + if (!$this->return) { + require($file); + $this->__loaded[$file] = true; + } + return true; + } + return false; + } + +/** + * Maps the $name to the $file. + * + * @param string $file full path to file + * @param string $name unique name for this map + * @param string $type type object being mapped + * @param string $plugin camelized if object is from a plugin, the name of the plugin + * @return void + * @access private + */ + function __map($file, $name, $type, $plugin) { + if ($plugin) { + $this->__map['Plugin'][$plugin][$type][$name] = $file; + } else { + $this->__map[$type][$name] = $file; + } + } + +/** + * Returns a file's complete path. + * + * @param string $name unique name + * @param string $type type object + * @param string $plugin camelized if object is from a plugin, the name of the plugin + * @return mixed, file path if found, false otherwise + * @access private + */ + function __mapped($name, $type, $plugin) { + if ($plugin) { + if (isset($this->__map['Plugin'][$plugin][$type]) && isset($this->__map['Plugin'][$plugin][$type][$name])) { + return $this->__map['Plugin'][$plugin][$type][$name]; + } + return false; + } + + if (isset($this->__map[$type]) && isset($this->__map[$type][$name])) { + return $this->__map[$type][$name]; + } + return false; + } + +/** + * Used to overload objects as needed. + * + * @param string $type Model or Helper + * @param string $name Class name to overload + * @access private + */ + function __overload($type, $name, $parent) { + if (($type === 'Model' || $type === 'Helper') && $parent !== false) { + Overloadable::overload($name); + } + } + +/** + * Loads parent classes based on $type. + * Returns a prefix or suffix needed for loading files. + * + * @param string $type type of object + * @param string $plugin camelized name of plugin + * @param boolean $parent false will not attempt to load parent + * @return array + * @access private + */ + function __settings($type, $plugin, $parent) { + if (!$parent) { + return array('class' => null, 'suffix' => null, 'path' => null); + } + + if ($plugin) { + $pluginPath = Inflector::underscore($plugin); + } + $path = null; + $load = strtolower($type); + + switch ($load) { + case 'model': + if (!class_exists('Model')) { + require LIBS . 'model' . DS . 'model.php'; + } + if (!class_exists('AppModel')) { + App::import($type, 'AppModel', false); + } + if ($plugin) { + if (!class_exists($plugin . 'AppModel')) { + App::import($type, $plugin . '.' . $plugin . 'AppModel', false, array(), $pluginPath . DS . $pluginPath . '_app_model.php'); + } + $path = $pluginPath . DS . 'models' . DS; + } + return array('class' => null, 'suffix' => null, 'path' => $path); + break; + case 'behavior': + if ($plugin) { + $path = $pluginPath . DS . 'models' . DS . 'behaviors' . DS; + } + return array('class' => $type, 'suffix' => null, 'path' => $path); + break; + case 'datasource': + if ($plugin) { + $path = $pluginPath . DS . 'models' . DS . 'datasources' . DS; + } + return array('class' => $type, 'suffix' => null, 'path' => $path); + case 'controller': + App::import($type, 'AppController', false); + if ($plugin) { + App::import($type, $plugin . '.' . $plugin . 'AppController', false, array(), $pluginPath . DS . $pluginPath . '_app_controller.php'); + $path = $pluginPath . DS . 'controllers' . DS; + } + return array('class' => $type, 'suffix' => $type, 'path' => $path); + break; + case 'component': + if ($plugin) { + $path = $pluginPath . DS . 'controllers' . DS . 'components' . DS; + } + return array('class' => $type, 'suffix' => null, 'path' => $path); + break; + case 'lib': + if ($plugin) { + $path = $pluginPath . DS . 'libs' . DS; + } + return array('class' => null, 'suffix' => null, 'path' => $path); + break; + case 'view': + if ($plugin) { + $path = $pluginPath . DS . 'views' . DS; + } + return array('class' => $type, 'suffix' => null, 'path' => $path); + break; + case 'helper': + if (!class_exists('AppHelper')) { + App::import($type, 'AppHelper', false); + } + if ($plugin) { + $path = $pluginPath . DS . 'views' . DS . 'helpers' . DS; + } + return array('class' => $type, 'suffix' => null, 'path' => $path); + break; + case 'vendor': + if ($plugin) { + $path = $pluginPath . DS . 'vendors' . DS; + } + return array('class' => null, 'suffix' => null, 'path' => $path); + break; + default: + $type = $suffix = $path = null; + break; + } + return array('class' => null, 'suffix' => null, 'path' => null); + } + +/** + * Returns default search paths. + * + * @param string $type type of object to be searched + * @return array list of paths + * @access private + */ + function __paths($type) { + $type = strtolower($type); + $paths = array(); + + if ($type === 'core') { + return App::core('libs'); + } + if (isset($this->{$type . 's'})) { + return $this->{$type . 's'}; + } + return $paths; + } + +/** + * Removes file location from map if the file has been deleted. + * + * @param string $name name of object + * @param string $type type of object + * @param string $plugin camelized name of plugin + * @return void + * @access private + */ + function __remove($name, $type, $plugin) { + if ($plugin) { + unset($this->__map['Plugin'][$plugin][$type][$name]); + } else { + unset($this->__map[$type][$name]); + } + } + +/** + * Returns an array of filenames of PHP files in the given directory. + * + * @param string $path Path to scan for files + * @param string $suffix if false, return only directories. if string, match and return files + * @return array List of directories or files in directory + * @access private + */ + function __list($path, $suffix = false, $extension = false) { + if (!class_exists('Folder')) { + require LIBS . 'folder.php'; + } + $items = array(); + $Folder =& new Folder($path); + $contents = $Folder->read(false, true); + + if (is_array($contents)) { + if (!$suffix) { + return $contents[0]; + } else { + foreach ($contents[1] as $item) { + if (substr($item, - strlen($suffix)) === $suffix) { + if ($extension) { + $items[] = $item; + } else { + $items[] = substr($item, 0, strlen($item) - strlen($suffix)); + } + } + } + } + } + return $items; + } + +/** + * Object destructor. + * + * Writes cache file if changes have been made to the $__map or $__paths + * + * @return void + * @access private + */ + function __destruct() { + if ($this->__cache) { + $core = App::core('cake'); + unset($this->__paths[rtrim($core[0], DS)]); + Cache::write('dir_map', array_filter($this->__paths), '_cake_core_'); + Cache::write('file_map', array_filter($this->__map), '_cake_core_'); + Cache::write('object_map', $this->__objects, '_cake_core_'); + } + } +} diff --git a/cake/libs/.svn/text-base/debugger.php.svn-base b/cake/libs/.svn/text-base/debugger.php.svn-base new file mode 100644 index 0000000..b28a488 --- /dev/null +++ b/cake/libs/.svn/text-base/debugger.php.svn-base @@ -0,0 +1,708 @@ + array( + 'trace' => '{:reference} - {:path}, line {:line}', + 'error' => "{:error} ({:code}): {:description} in [{:file}, line {:line}]" + ), + 'js' => array( + 'error' => '', + 'info' => '', + 'trace' => '
      {:trace}
      ', + 'code' => '', + 'context' => '', + 'links' => array() + ), + 'html' => array( + 'trace' => '
      Trace 

      {:trace}

      ', + 'context' => '
      Context 

      {:context}

      ' + ), + 'txt' => array( + 'error' => "{:error}: {:code} :: {:description} on line {:line} of {:path}\n{:info}", + 'context' => "Context:\n{:context}\n", + 'trace' => "Trace:\n{:trace}\n", + 'code' => '', + 'info' => '' + ), + 'base' => array( + 'traceLine' => '{:reference} - {:path}, line {:line}' + ) + ); + +/** + * Holds current output data when outputFormat is false. + * + * @var string + * @access private + */ + var $_data = array(); + +/** + * Constructor. + * + */ + function __construct() { + $docRef = ini_get('docref_root'); + + if (empty($docRef)) { + ini_set('docref_root', 'http://php.net/'); + } + if (!defined('E_RECOVERABLE_ERROR')) { + define('E_RECOVERABLE_ERROR', 4096); + } + if (!defined('E_DEPRECATED')) { + define('E_DEPRECATED', 8192); + } + + $e = '
      ';
      +		$e .= '{:error} ({:code}): {:description} ';
      +		$e .= '[{:path}, line {:line}]';
      +
      +		$e .= '';
      +		$e .= '
      '; + $this->_templates['js']['error'] = $e; + + $t = ''; + $this->_templates['js']['info'] = $t; + + $links = array(); + $link = 'Code'; + $links['code'] = $link; + + $link = 'Context'; + $links['context'] = $link; + + $links['help'] = 'Help'; + $this->_templates['js']['links'] = $links; + + $this->_templates['js']['context'] = '
      _templates['js']['context'] .= 'style="display: none;">{:context}
      '; + + $this->_templates['js']['code'] = '
      _templates['js']['code'] .= 'style="display: none;">
      {:code}
      '; + + $e = '
      {:error} ({:code}) : {:description} ';
      +		$e .= '[{:path}, line {:line}]
      '; + $this->_templates['html']['error'] = $e; + + $this->_templates['html']['context'] = '
      Context ';
      +		$this->_templates['html']['context'] .= '

      {:context}

      '; + } + +/** + * Returns a reference to the Debugger singleton object instance. + * + * @return object + * @access public + * @static + */ + function &getInstance($class = null) { + static $instance = array(); + if (!empty($class)) { + if (!$instance || strtolower($class) != strtolower(get_class($instance[0]))) { + $instance[0] = & new $class(); + if (Configure::read() > 0) { + Configure::version(); // Make sure the core config is loaded + $instance[0]->helpPath = Configure::read('Cake.Debugger.HelpPath'); + } + } + } + + if (!$instance) { + $instance[0] =& new Debugger(); + if (Configure::read() > 0) { + Configure::version(); // Make sure the core config is loaded + $instance[0]->helpPath = Configure::read('Cake.Debugger.HelpPath'); + } + } + return $instance[0]; + } + +/** + * Formats and outputs the contents of the supplied variable. + * + * @param $var mixed the variable to dump + * @return void + * @see Debugger::exportVar() + * @access public + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class +*/ + function dump($var) { + $_this =& Debugger::getInstance(); + pr($_this->exportVar($var)); + } + +/** + * Creates an entry in the log file. The log entry will contain a stack trace from where it was called. + * as well as export the variable using exportVar. By default the log is written to the debug log. + * + * @param $var mixed Variable or content to log + * @param $level int type of log to use. Defaults to LOG_DEBUG + * @return void + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class + */ + function log($var, $level = LOG_DEBUG) { + $_this =& Debugger::getInstance(); + $source = $_this->trace(array('start' => 1)) . "\n"; + CakeLog::write($level, "\n" . $source . $_this->exportVar($var)); + } + +/** + * Overrides PHP's default error handling. + * + * @param integer $code Code of error + * @param string $description Error description + * @param string $file File on which error occurred + * @param integer $line Line that triggered the error + * @param array $context Context + * @return boolean true if error was handled + * @access public + */ + function handleError($code, $description, $file = null, $line = null, $context = null) { + if (error_reporting() == 0 || $code === 2048 || $code === 8192) { + return; + } + + $_this =& Debugger::getInstance(); + + if (empty($file)) { + $file = '[internal]'; + } + if (empty($line)) { + $line = '??'; + } + $path = $_this->trimPath($file); + + $info = compact('code', 'description', 'file', 'line'); + if (!in_array($info, $_this->errors)) { + $_this->errors[] = $info; + } else { + return; + } + + switch ($code) { + case E_PARSE: + case E_ERROR: + case E_CORE_ERROR: + case E_COMPILE_ERROR: + case E_USER_ERROR: + $error = 'Fatal Error'; + $level = LOG_ERROR; + break; + case E_WARNING: + case E_USER_WARNING: + case E_COMPILE_WARNING: + case E_RECOVERABLE_ERROR: + $error = 'Warning'; + $level = LOG_WARNING; + break; + case E_NOTICE: + case E_USER_NOTICE: + $error = 'Notice'; + $level = LOG_NOTICE; + break; + default: + return; + break; + } + + $helpCode = null; + if (!empty($_this->helpPath) && preg_match('/.*\[([0-9]+)\]$/', $description, $codes)) { + if (isset($codes[1])) { + $helpID = $codes[1]; + $description = trim(preg_replace('/\[[0-9]+\]$/', '', $description)); + } + } + + $data = compact( + 'level', 'error', 'code', 'helpID', 'description', 'file', 'path', 'line', 'context' + ); + echo $_this->_output($data); + + if (Configure::read('log')) { + $tpl = $_this->_templates['log']['error']; + $options = array('before' => '{:', 'after' => '}'); + CakeLog::write($level, String::insert($tpl, $data, $options)); + } + + if ($error == 'Fatal Error') { + exit(); + } + return true; + } + +/** + * Outputs a stack trace based on the supplied options. + * + * ### Options + * + * - `depth` - The number of stack frames to return. Defaults to 999 + * - `format` - The format you want the return. Defaults to the currently selected format. If + * format is 'array' or 'points' the return will be an array. + * - `args` - Should arguments for functions be shown? If true, the arguments for each method call + * will be displayed. + * - `start` - The stack frame to start generating a trace from. Defaults to 0 + * + * @param array $options Format for outputting stack trace + * @return mixed Formatted stack trace + * @access public + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class + */ + function trace($options = array()) { + $_this =& Debugger::getInstance(); + $defaults = array( + 'depth' => 999, + 'format' => $_this->_outputFormat, + 'args' => false, + 'start' => 0, + 'scope' => null, + 'exclude' => null + ); + $options += $defaults; + + $backtrace = debug_backtrace(); + $count = count($backtrace); + $back = array(); + + $_trace = array( + 'line' => '??', + 'file' => '[internal]', + 'class' => null, + 'function' => '[main]' + ); + + for ($i = $options['start']; $i < $count && $i < $options['depth']; $i++) { + $trace = array_merge(array('file' => '[internal]', 'line' => '??'), $backtrace[$i]); + + if (isset($backtrace[$i + 1])) { + $next = array_merge($_trace, $backtrace[$i + 1]); + $reference = $next['function']; + + if (!empty($next['class'])) { + $reference = $next['class'] . '::' . $reference . '('; + if ($options['args'] && isset($next['args'])) { + $args = array(); + foreach ($next['args'] as $arg) { + $args[] = Debugger::exportVar($arg); + } + $reference .= join(', ', $args); + } + $reference .= ')'; + } + } else { + $reference = '[main]'; + } + if (in_array($reference, array('call_user_func_array', 'trigger_error'))) { + continue; + } + if ($options['format'] == 'points' && $trace['file'] != '[internal]') { + $back[] = array('file' => $trace['file'], 'line' => $trace['line']); + } elseif ($options['format'] == 'array') { + $back[] = $trace; + } else { + if (isset($_this->_templates[$options['format']]['traceLine'])) { + $tpl = $_this->_templates[$options['format']]['traceLine']; + } else { + $tpl = $_this->_templates['base']['traceLine']; + } + $trace['path'] = Debugger::trimPath($trace['file']); + $trace['reference'] = $reference; + unset($trace['object'], $trace['args']); + $back[] = String::insert($tpl, $trace, array('before' => '{:', 'after' => '}')); + } + } + + if ($options['format'] == 'array' || $options['format'] == 'points') { + return $back; + } + return implode("\n", $back); + } + +/** + * Shortens file paths by replacing the application base path with 'APP', and the CakePHP core + * path with 'CORE'. + * + * @param string $path Path to shorten + * @return string Normalized path + * @access public + * @static + */ + function trimPath($path) { + if (!defined('CAKE_CORE_INCLUDE_PATH') || !defined('APP')) { + return $path; + } + + if (strpos($path, APP) === 0) { + return str_replace(APP, 'APP' . DS, $path); + } elseif (strpos($path, CAKE_CORE_INCLUDE_PATH) === 0) { + return str_replace(CAKE_CORE_INCLUDE_PATH, 'CORE', $path); + } elseif (strpos($path, ROOT) === 0) { + return str_replace(ROOT, 'ROOT', $path); + } + $corePaths = App::core('cake'); + + foreach ($corePaths as $corePath) { + if (strpos($path, $corePath) === 0) { + return str_replace($corePath, 'CORE' .DS . 'cake' .DS, $path); + } + } + return $path; + } + +/** + * Grabs an excerpt from a file and highlights a given line of code + * + * @param string $file Absolute path to a PHP file + * @param integer $line Line number to highlight + * @param integer $context Number of lines of context to extract above and below $line + * @return array Set of lines highlighted + * @access public + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class + */ + function excerpt($file, $line, $context = 2) { + $data = $lines = array(); + if (!file_exists($file)) { + return array(); + } + $data = @explode("\n", file_get_contents($file)); + + if (empty($data) || !isset($data[$line])) { + return; + } + for ($i = $line - ($context + 1); $i < $line + $context; $i++) { + if (!isset($data[$i])) { + continue; + } + $string = str_replace(array("\r\n", "\n"), "", highlight_string($data[$i], true)); + if ($i == $line) { + $lines[] = '' . $string . ''; + } else { + $lines[] = $string; + } + } + return $lines; + } + +/** + * Converts a variable to a string for debug output. + * + * @param string $var Variable to convert + * @return string Variable as a formatted string + * @access public + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class + */ + function exportVar($var, $recursion = 0) { + $_this =& Debugger::getInstance(); + switch (strtolower(gettype($var))) { + case 'boolean': + return ($var) ? 'true' : 'false'; + break; + case 'integer': + case 'double': + return $var; + break; + case 'string': + if (trim($var) == "") { + return '""'; + } + return '"' . h($var) . '"'; + break; + case 'object': + return get_class($var) . "\n" . $_this->__object($var); + case 'array': + $out = "array("; + $vars = array(); + foreach ($var as $key => $val) { + if ($recursion >= 0) { + if (is_numeric($key)) { + $vars[] = "\n\t" . $_this->exportVar($val, $recursion - 1); + } else { + $vars[] = "\n\t" .$_this->exportVar($key, $recursion - 1) + . ' => ' . $_this->exportVar($val, $recursion - 1); + } + } + } + $n = null; + if (!empty($vars)) { + $n = "\n"; + } + return $out . implode(",", $vars) . "{$n})"; + break; + case 'resource': + return strtolower(gettype($var)); + break; + case 'null': + return 'null'; + break; + } + } + +/** + * Handles object to string conversion. + * + * @param string $var Object to convert + * @return string + * @access private + * @see Debugger::exportVar() + */ + function __object($var) { + $out = array(); + + if (is_object($var)) { + $className = get_class($var); + $objectVars = get_object_vars($var); + + foreach ($objectVars as $key => $value) { + if (is_object($value)) { + $value = get_class($value) . ' object'; + } elseif (is_array($value)) { + $value = 'array'; + } elseif ($value === null) { + $value = 'NULL'; + } elseif (in_array(gettype($value), array('boolean', 'integer', 'double', 'string', 'array', 'resource'))) { + $value = Debugger::exportVar($value); + } + $out[] = "$className::$$key = " . $value; + } + } + return implode("\n", $out); + } + +/** + * Switches output format, updates format strings + * + * @param string $format Format to use, including 'js' for JavaScript-enhanced HTML, 'html' for + * straight HTML output, or 'txt' for unformatted text. + * @param array $strings Template strings to be used for the output format. + * @access protected + */ + function output($format = null, $strings = array()) { + $_this =& Debugger::getInstance(); + $data = null; + + if (is_null($format)) { + return $_this->_outputFormat; + } + + if (!empty($strings)) { + if (isset($_this->_templates[$format])) { + if (isset($strings['links'])) { + $_this->_templates[$format]['links'] = array_merge( + $_this->_templates[$format]['links'], + $strings['links'] + ); + unset($strings['links']); + } + $_this->_templates[$format] = array_merge($_this->_templates[$format], $strings); + } else { + $_this->_templates[$format] = $strings; + } + return $_this->_templates[$format]; + } + + if ($format === true && !empty($_this->_data)) { + $data = $_this->_data; + $_this->_data = array(); + $format = false; + } + $_this->_outputFormat = $format; + + return $data; + } + +/** + * Renders error messages + * + * @param array $data Data about the current error + * @access private + */ + function _output($data = array()) { + $defaults = array( + 'level' => 0, + 'error' => 0, + 'code' => 0, + 'helpID' => null, + 'description' => '', + 'file' => '', + 'line' => 0, + 'context' => array() + ); + $data += $defaults; + + $files = $this->trace(array('start' => 2, 'format' => 'points')); + $code = $this->excerpt($files[0]['file'], $files[0]['line'] - 1, 1); + $trace = $this->trace(array('start' => 2, 'depth' => '20')); + $insertOpts = array('before' => '{:', 'after' => '}'); + $context = array(); + $links = array(); + $info = ''; + + foreach ((array)$data['context'] as $var => $value) { + $context[] = "\${$var}\t=\t" . $this->exportVar($value, 1); + } + + switch ($this->_outputFormat) { + case false: + $this->_data[] = compact('context', 'trace') + $data; + return; + case 'log': + $this->log(compact('context', 'trace') + $data); + return; + } + + if (empty($this->_outputFormat) || !isset($this->_templates[$this->_outputFormat])) { + $this->_outputFormat = 'js'; + } + + $data['id'] = 'cakeErr' . count($this->errors); + $tpl = array_merge($this->_templates['base'], $this->_templates[$this->_outputFormat]); + $insert = array('context' => join("\n", $context), 'helpPath' => $this->helpPath) + $data; + + $detect = array('help' => 'helpID', 'context' => 'context'); + + if (isset($tpl['links'])) { + foreach ($tpl['links'] as $key => $val) { + if (isset($detect[$key]) && empty($insert[$detect[$key]])) { + continue; + } + $links[$key] = String::insert($val, $insert, $insertOpts); + } + } + + foreach (array('code', 'context', 'trace') as $key) { + if (empty($$key) || !isset($tpl[$key])) { + continue; + } + if (is_array($$key)) { + $$key = join("\n", $$key); + } + $info .= String::insert($tpl[$key], compact($key) + $insert, $insertOpts); + } + $links = join(' | ', $links); + unset($data['context']); + + echo String::insert($tpl['error'], compact('links', 'info') + $data, $insertOpts); + } + +/** + * Verifies that the application's salt and cipher seed value has been changed from the default value. + * + * @access public + * @static + */ + function checkSecurityKeys() { + if (Configure::read('Security.salt') == 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi') { + trigger_error(__('Please change the value of \'Security.salt\' in app/config/core.php to a salt value specific to your application', true), E_USER_NOTICE); + } + + if (Configure::read('Security.cipherSeed') === '76859309657453542496749683645') { + trigger_error(__('Please change the value of \'Security.cipherSeed\' in app/config/core.php to a numeric (digits only) seed value specific to your application', true), E_USER_NOTICE); + } + } + +/** + * Invokes the given debugger object as the current error handler, taking over control from the + * previous handler in a stack-like hierarchy. + * + * @param object $debugger A reference to the Debugger object + * @access public + * @static + * @link http://book.cakephp.org/view/1191/Using-the-Debugger-Class + */ + function invoke(&$debugger) { + set_error_handler(array(&$debugger, 'handleError')); + } +} + +if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) { + Debugger::invoke(Debugger::getInstance()); +} diff --git a/cake/libs/.svn/text-base/error.php.svn-base b/cake/libs/.svn/text-base/error.php.svn-base new file mode 100644 index 0000000..45c043b --- /dev/null +++ b/cake/libs/.svn/text-base/error.php.svn-base @@ -0,0 +1,461 @@ +_set(Router::getPaths()); + $this->params = Router::getParams(); + $this->constructClasses(); + $this->Component->initialize($this); + $this->_set(array('cacheAction' => false, 'viewPath' => 'errors')); + } +} + +/** + * Error Handler. + * + * Captures and handles all cakeError() calls. + * Displays helpful framework errors when debug > 1. + * When debug < 1 cakeError() will render 404 or 500 errors. + * + * @package cake + * @subpackage cake.cake.libs + */ +class ErrorHandler extends Object { + +/** + * Controller instance. + * + * @var Controller + * @access public + */ + var $controller = null; + +/** + * Class constructor. + * + * @param string $method Method producing the error + * @param array $messages Error messages + */ + function __construct($method, $messages) { + App::import('Core', 'Sanitize'); + static $__previousError = null; + + if ($__previousError != array($method, $messages)) { + $__previousError = array($method, $messages); + $this->controller =& new CakeErrorController(); + } else { + $this->controller =& new Controller(); + $this->controller->viewPath = 'errors'; + } + $options = array('escape' => false); + $messages = Sanitize::clean($messages, $options); + + if (!isset($messages[0])) { + $messages = array($messages); + } + + if (method_exists($this->controller, 'apperror')) { + return $this->controller->appError($method, $messages); + } + + if (!in_array(strtolower($method), array_map('strtolower', get_class_methods($this)))) { + $method = 'error'; + } + if ($method !== 'error') { + if (Configure::read('debug') == 0) { + $parentClass = get_parent_class($this); + if (strtolower($parentClass) != 'errorhandler') { + $method = 'error404'; + } + $parentMethods = array_map('strtolower', get_class_methods($parentClass)); + if (in_array(strtolower($method), $parentMethods)) { + $method = 'error404'; + } + if (isset($code) && $code == 500) { + $method = 'error500'; + } + } + } + $this->dispatchMethod($method, $messages); + $this->_stop(); + } + +/** + * Displays an error page (e.g. 404 Not found). + * + * @param array $params Parameters for controller + * @access public + */ + function error($params) { + extract($params, EXTR_OVERWRITE); + $this->controller->set(array( + 'code' => $code, + 'name' => $name, + 'message' => $message, + 'title' => $code . ' ' . $name + )); + $this->_outputMessage('error404'); + } + +/** + * Convenience method to display a 404 page. + * + * @param array $params Parameters for controller + * @access public + */ + function error404($params) { + extract($params, EXTR_OVERWRITE); + + if (!isset($url)) { + $url = $this->controller->here; + } + $url = Router::normalize($url); + $this->controller->header("HTTP/1.0 404 Not Found"); + $this->controller->set(array( + 'code' => '404', + 'name' => __('Not Found', true), + 'message' => h($url), + 'base' => $this->controller->base + )); + $this->_outputMessage('error404'); + } + +/** + * Convenience method to display a 500 page. + * + * @param array $params Parameters for controller + * @access public + */ + function error500($params) { + extract($params, EXTR_OVERWRITE); + + if (!isset($url)) { + $url = $this->controller->here; + } + $url = Router::normalize($url); + $this->controller->header("HTTP/1.0 500 Internal Server Error"); + $this->controller->set(array( + 'code' => '500', + 'name' => __('An Internal Error Has Occurred', true), + 'message' => h($url), + 'base' => $this->controller->base + )); + $this->_outputMessage('error500'); + } +/** + * Renders the Missing Controller web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingController($params) { + extract($params, EXTR_OVERWRITE); + + $controllerName = str_replace('Controller', '', $className); + $this->controller->set(array( + 'controller' => $className, + 'controllerName' => $controllerName, + 'title' => __('Missing Controller', true) + )); + $this->_outputMessage('missingController'); + } + +/** + * Renders the Missing Action web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingAction($params) { + extract($params, EXTR_OVERWRITE); + + $controllerName = str_replace('Controller', '', $className); + $this->controller->set(array( + 'controller' => $className, + 'controllerName' => $controllerName, + 'action' => $action, + 'title' => __('Missing Method in Controller', true) + )); + $this->_outputMessage('missingAction'); + } + +/** + * Renders the Private Action web page. + * + * @param array $params Parameters for controller + * @access public + */ + function privateAction($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'controller' => $className, + 'action' => $action, + 'title' => __('Trying to access private method in class', true) + )); + $this->_outputMessage('privateAction'); + } + +/** + * Renders the Missing Table web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingTable($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->header("HTTP/1.0 500 Internal Server Error"); + $this->controller->set(array( + 'code' => '500', + 'model' => $className, + 'table' => $table, + 'title' => __('Missing Database Table', true) + )); + $this->_outputMessage('missingTable'); + } + +/** + * Renders the Missing Database web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingDatabase($params = array()) { + $this->controller->header("HTTP/1.0 500 Internal Server Error"); + $this->controller->set(array( + 'code' => '500', + 'title' => __('Scaffold Missing Database Connection', true) + )); + $this->_outputMessage('missingScaffolddb'); + } + +/** + * Renders the Missing View web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingView($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'controller' => $className, + 'action' => $action, + 'file' => $file, + 'title' => __('Missing View', true) + )); + $this->_outputMessage('missingView'); + } + +/** + * Renders the Missing Layout web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingLayout($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->layout = 'default'; + $this->controller->set(array( + 'file' => $file, + 'title' => __('Missing Layout', true) + )); + $this->_outputMessage('missingLayout'); + } + +/** + * Renders the Database Connection web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingConnection($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->header("HTTP/1.0 500 Internal Server Error"); + $this->controller->set(array( + 'code' => '500', + 'model' => $className, + 'title' => __('Missing Database Connection', true) + )); + $this->_outputMessage('missingConnection'); + } + +/** + * Renders the Missing Helper file web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingHelperFile($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'helperClass' => Inflector::camelize($helper) . "Helper", + 'file' => $file, + 'title' => __('Missing Helper File', true) + )); + $this->_outputMessage('missingHelperFile'); + } + +/** + * Renders the Missing Helper class web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingHelperClass($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'helperClass' => Inflector::camelize($helper) . "Helper", + 'file' => $file, + 'title' => __('Missing Helper Class', true) + )); + $this->_outputMessage('missingHelperClass'); + } + +/** + * Renders the Missing Behavior file web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingBehaviorFile($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'behaviorClass' => Inflector::camelize($behavior) . "Behavior", + 'file' => $file, + 'title' => __('Missing Behavior File', true) + )); + $this->_outputMessage('missingBehaviorFile'); + } + +/** + * Renders the Missing Behavior class web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingBehaviorClass($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'behaviorClass' => Inflector::camelize($behavior) . "Behavior", + 'file' => $file, + 'title' => __('Missing Behavior Class', true) + )); + $this->_outputMessage('missingBehaviorClass'); + } + +/** + * Renders the Missing Component file web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingComponentFile($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'controller' => $className, + 'component' => $component, + 'file' => $file, + 'title' => __('Missing Component File', true) + )); + $this->_outputMessage('missingComponentFile'); + } + +/** + * Renders the Missing Component class web page. + * + * @param array $params Parameters for controller + * @access public + */ + function missingComponentClass($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'controller' => $className, + 'component' => $component, + 'file' => $file, + 'title' => __('Missing Component Class', true) + )); + $this->_outputMessage('missingComponentClass'); + } + +/** + * Renders the Missing Model class web page. + * + * @param unknown_type $params Parameters for controller + * @access public + */ + function missingModel($params) { + extract($params, EXTR_OVERWRITE); + + $this->controller->set(array( + 'model' => $className, + 'title' => __('Missing Model', true) + )); + $this->_outputMessage('missingModel'); + } + +/** + * Output message + * + * @access protected + */ + function _outputMessage($template) { + $this->controller->render($template); + $this->controller->afterFilter(); + echo $this->controller->output; + } +} diff --git a/cake/libs/.svn/text-base/file.php.svn-base b/cake/libs/.svn/text-base/file.php.svn-base new file mode 100644 index 0000000..6d01fa2 --- /dev/null +++ b/cake/libs/.svn/text-base/file.php.svn-base @@ -0,0 +1,544 @@ +Folder =& new Folder(dirname($path), $create, $mode); + if (!is_dir($path)) { + $this->name = basename($path); + } + $this->pwd(); + !$this->exists() && $create && $this->safe($path) && $this->create(); + } + +/** + * Closes the current file if it is opened + * + * @access private + */ + function __destruct() { + $this->close(); + } + +/** + * Creates the File. + * + * @return boolean Success + * @access public + */ + function create() { + $dir = $this->Folder->pwd(); + if (is_dir($dir) && is_writable($dir) && !$this->exists()) { + $old = umask(0); + if (touch($this->path)) { + umask($old); + return true; + } + } + return false; + } + +/** + * Opens the current file with a given $mode + * + * @param string $mode A valid 'fopen' mode string (r|w|a ...) + * @param boolean $force If true then the file will be re-opened even if its already opened, otherwise it won't + * @return boolean True on success, false on failure + * @access public + */ + function open($mode = 'r', $force = false) { + if (!$force && is_resource($this->handle)) { + return true; + } + clearstatcache(); + if ($this->exists() === false) { + if ($this->create() === false) { + return false; + } + } + + $this->handle = fopen($this->path, $mode); + if (is_resource($this->handle)) { + return true; + } + return false; + } + +/** + * Return the contents of this File as a string. + * + * @param string $bytes where to start + * @param string $mode A `fread` compatible mode. + * @param boolean $force If true then the file will be re-opened even if its already opened, otherwise it won't + * @return mixed string on success, false on failure + * @access public + */ + function read($bytes = false, $mode = 'rb', $force = false) { + if ($bytes === false && $this->lock === null) { + return file_get_contents($this->path); + } + if ($this->open($mode, $force) === false) { + return false; + } + if ($this->lock !== null && flock($this->handle, LOCK_SH) === false) { + return false; + } + if (is_int($bytes)) { + return fread($this->handle, $bytes); + } + + $data = ''; + while (!feof($this->handle)) { + $data .= fgets($this->handle, 4096); + } + + if ($this->lock !== null) { + flock($this->handle, LOCK_UN); + } + if ($bytes === false) { + $this->close(); + } + return trim($data); + } + +/** + * Sets or gets the offset for the currently opened file. + * + * @param mixed $offset The $offset in bytes to seek. If set to false then the current offset is returned. + * @param integer $seek PHP Constant SEEK_SET | SEEK_CUR | SEEK_END determining what the $offset is relative to + * @return mixed True on success, false on failure (set mode), false on failure or integer offset on success (get mode) + * @access public + */ + function offset($offset = false, $seek = SEEK_SET) { + if ($offset === false) { + if (is_resource($this->handle)) { + return ftell($this->handle); + } + } elseif ($this->open() === true) { + return fseek($this->handle, $offset, $seek) === 0; + } + return false; + } + +/** + * Prepares a ascii string for writing. Converts line endings to the + * correct terminator for the current platform. If windows "\r\n" will be used + * all other platforms will use "\n" + * + * @param string $data Data to prepare for writing. + * @return string The with converted line endings. + * @access public + */ + function prepare($data, $forceWindows = false) { + $lineBreak = "\n"; + if (DIRECTORY_SEPARATOR == '\\' || $forceWindows === true) { + $lineBreak = "\r\n"; + } + return strtr($data, array("\r\n" => $lineBreak, "\n" => $lineBreak, "\r" => $lineBreak)); + } + +/** + * Write given data to this File. + * + * @param string $data Data to write to this File. + * @param string $mode Mode of writing. {@link http://php.net/fwrite See fwrite()}. + * @param string $force force the file to open + * @return boolean Success + * @access public + */ + function write($data, $mode = 'w', $force = false) { + $success = false; + if ($this->open($mode, $force) === true) { + if ($this->lock !== null) { + if (flock($this->handle, LOCK_EX) === false) { + return false; + } + } + + if (fwrite($this->handle, $data) !== false) { + $success = true; + } + if ($this->lock !== null) { + flock($this->handle, LOCK_UN); + } + } + return $success; + } + +/** + * Append given data string to this File. + * + * @param string $data Data to write + * @param string $force force the file to open + * @return boolean Success + * @access public + */ + function append($data, $force = false) { + return $this->write($data, 'a', $force); + } + +/** + * Closes the current file if it is opened. + * + * @return boolean True if closing was successful or file was already closed, otherwise false + * @access public + */ + function close() { + if (!is_resource($this->handle)) { + return true; + } + return fclose($this->handle); + } + +/** + * Deletes the File. + * + * @return boolean Success + * @access public + */ + function delete() { + clearstatcache(); + if ($this->exists()) { + return unlink($this->path); + } + return false; + } + +/** + * Returns the File info. + * + * @return string The File extension + * @access public + */ + function info() { + if ($this->info == null) { + $this->info = pathinfo($this->path); + } + if (!isset($this->info['filename'])) { + $this->info['filename'] = $this->name(); + } + return $this->info; + } + +/** + * Returns the File extension. + * + * @return string The File extension + * @access public + */ + function ext() { + if ($this->info == null) { + $this->info(); + } + if (isset($this->info['extension'])) { + return $this->info['extension']; + } + return false; + } + +/** + * Returns the File name without extension. + * + * @return string The File name without extension. + * @access public + */ + function name() { + if ($this->info == null) { + $this->info(); + } + if (isset($this->info['extension'])) { + return basename($this->name, '.'.$this->info['extension']); + } elseif ($this->name) { + return $this->name; + } + return false; + } + +/** + * makes filename safe for saving + * + * @param string $name The name of the file to make safe if different from $this->name + * @param strin $ext The name of the extension to make safe if different from $this->ext + * @return string $ext the extension of the file + * @access public + */ + function safe($name = null, $ext = null) { + if (!$name) { + $name = $this->name; + } + if (!$ext) { + $ext = $this->ext(); + } + return preg_replace( "/(?:[^\w\.-]+)/", "_", basename($name, $ext)); + } + +/** + * Get md5 Checksum of file with previous check of Filesize + * + * @param mixed $maxsize in MB or true to force + * @return string md5 Checksum {@link http://php.net/md5_file See md5_file()} + * @access public + */ + function md5($maxsize = 5) { + if ($maxsize === true) { + return md5_file($this->path); + } + + $size = $this->size(); + if ($size && $size < ($maxsize * 1024) * 1024) { + return md5_file($this->path); + } + + return false; + } + +/** + * Returns the full path of the File. + * + * @return string Full path to file + * @access public + */ + function pwd() { + if (is_null($this->path)) { + $this->path = $this->Folder->slashTerm($this->Folder->pwd()) . $this->name; + } + return $this->path; + } + +/** + * Returns true if the File exists. + * + * @return boolean true if it exists, false otherwise + * @access public + */ + function exists() { + return (file_exists($this->path) && is_file($this->path)); + } + +/** + * Returns the "chmod" (permissions) of the File. + * + * @return string Permissions for the file + * @access public + */ + function perms() { + if ($this->exists()) { + return substr(sprintf('%o', fileperms($this->path)), -4); + } + return false; + } + +/** + * Returns the Filesize + * + * @return integer size of the file in bytes, or false in case of an error + * @access public + */ + function size() { + if ($this->exists()) { + return filesize($this->path); + } + return false; + } + +/** + * Returns true if the File is writable. + * + * @return boolean true if its writable, false otherwise + * @access public + */ + function writable() { + return is_writable($this->path); + } + +/** + * Returns true if the File is executable. + * + * @return boolean true if its executable, false otherwise + * @access public + */ + function executable() { + return is_executable($this->path); + } + +/** + * Returns true if the File is readable. + * + * @return boolean true if file is readable, false otherwise + * @access public + */ + function readable() { + return is_readable($this->path); + } + +/** + * Returns the File's owner. + * + * @return integer the Fileowner + * @access public + */ + function owner() { + if ($this->exists()) { + return fileowner($this->path); + } + return false; + } + +/** + * Returns the File's group. + * + * @return integer the Filegroup + * @access public + */ + function group() { + if ($this->exists()) { + return filegroup($this->path); + } + return false; + } + +/** + * Returns last access time. + * + * @return integer timestamp Timestamp of last access time + * @access public + */ + function lastAccess() { + if ($this->exists()) { + return fileatime($this->path); + } + return false; + } + +/** + * Returns last modified time. + * + * @return integer timestamp Timestamp of last modification + * @access public + */ + function lastChange() { + if ($this->exists()) { + return filemtime($this->path); + } + return false; + } + +/** + * Returns the current folder. + * + * @return Folder Current folder + * @access public + */ + function &Folder() { + return $this->Folder; + } + +/** + * Copy the File to $dest + * + * @param string $dest destination for the copy + * @param boolean $overwrite Overwrite $dest if exists + * @return boolean Succes + * @access public + */ + function copy($dest, $overwrite = true) { + if (!$this->exists() || is_file($dest) && !$overwrite) { + return false; + } + return copy($this->path, $dest); + } +} diff --git a/cake/libs/.svn/text-base/folder.php.svn-base b/cake/libs/.svn/text-base/folder.php.svn-base new file mode 100644 index 0000000..0f96f7d --- /dev/null +++ b/cake/libs/.svn/text-base/folder.php.svn-base @@ -0,0 +1,786 @@ +mode = $mode; + } + + if (!file_exists($path) && $create === true) { + $this->create($path, $this->mode); + } + if (!Folder::isAbsolute($path)) { + $path = realpath($path); + } + if (!empty($path)) { + $this->cd($path); + } + } + +/** + * Return current path. + * + * @return string Current path + * @access public + */ + function pwd() { + return $this->path; + } + +/** + * Change directory to $path. + * + * @param string $path Path to the directory to change to + * @return string The new path. Returns false on failure + * @access public + */ + function cd($path) { + $path = $this->realpath($path); + if (is_dir($path)) { + return $this->path = $path; + } + return false; + } + +/** + * Returns an array of the contents of the current directory. + * The returned array holds two arrays: One of directories and one of files. + * + * @param boolean $sort Whether you want the results sorted, set this and the sort property + * to false to get unsorted results. + * @param mixed $exceptions Either an array or boolean true will not grab dot files + * @param boolean $fullPath True returns the full path + * @return mixed Contents of current directory as an array, an empty array on failure + * @access public + */ + function read($sort = true, $exceptions = false, $fullPath = false) { + $dirs = $files = array(); + + if (!$this->pwd()) { + return array($dirs, $files); + } + if (is_array($exceptions)) { + $exceptions = array_flip($exceptions); + } + $skipHidden = isset($exceptions['.']) || $exceptions === true; + + if (false === ($dir = @opendir($this->path))) { + return array($dirs, $files); + } + + while (false !== ($item = readdir($dir))) { + if ($item === '.' || $item === '..' || ($skipHidden && $item[0] === '.') || isset($exceptions[$item])) { + continue; + } + + $path = Folder::addPathElement($this->path, $item); + if (is_dir($path)) { + $dirs[] = $fullPath ? $path : $item; + } else { + $files[] = $fullPath ? $path : $item; + } + } + + if ($sort || $this->sort) { + sort($dirs); + sort($files); + } + + closedir($dir); + return array($dirs, $files); + } + +/** + * Returns an array of all matching files in current directory. + * + * @param string $pattern Preg_match pattern (Defaults to: .*) + * @param boolean $sort Whether results should be sorted. + * @return array Files that match given pattern + * @access public + */ + function find($regexpPattern = '.*', $sort = false) { + list($dirs, $files) = $this->read($sort); + return array_values(preg_grep('/^' . $regexpPattern . '$/i', $files)); ; + } + +/** + * Returns an array of all matching files in and below current directory. + * + * @param string $pattern Preg_match pattern (Defaults to: .*) + * @param boolean $sort Whether results should be sorted. + * @return array Files matching $pattern + * @access public + */ + function findRecursive($pattern = '.*', $sort = false) { + if (!$this->pwd()) { + return array(); + } + $startsOn = $this->path; + $out = $this->_findRecursive($pattern, $sort); + $this->cd($startsOn); + return $out; + } + +/** + * Private helper function for findRecursive. + * + * @param string $pattern Pattern to match against + * @param boolean $sort Whether results should be sorted. + * @return array Files matching pattern + * @access private + */ + function _findRecursive($pattern, $sort = false) { + list($dirs, $files) = $this->read($sort); + $found = array(); + + foreach ($files as $file) { + if (preg_match('/^' . $pattern . '$/i', $file)) { + $found[] = Folder::addPathElement($this->path, $file); + } + } + $start = $this->path; + + foreach ($dirs as $dir) { + $this->cd(Folder::addPathElement($start, $dir)); + $found = array_merge($found, $this->findRecursive($pattern, $sort)); + } + return $found; + } + +/** + * Returns true if given $path is a Windows path. + * + * @param string $path Path to check + * @return boolean true if windows path, false otherwise + * @access public + * @static + */ + function isWindowsPath($path) { + return (bool)preg_match('/^[A-Z]:\\\\/i', $path); + } + +/** + * Returns true if given $path is an absolute path. + * + * @param string $path Path to check + * @return bool true if path is absolute. + * @access public + * @static + */ + function isAbsolute($path) { + return !empty($path) && ($path[0] === '/' || preg_match('/^[A-Z]:\\\\/i', $path)); + } + +/** + * Returns a correct set of slashes for given $path. (\\ for Windows paths and / for other paths.) + * + * @param string $path Path to check + * @return string Set of slashes ("\\" or "/") + * @access public + * @static + */ + function normalizePath($path) { + return Folder::correctSlashFor($path); + } + +/** + * Returns a correct set of slashes for given $path. (\\ for Windows paths and / for other paths.) + * + * @param string $path Path to check + * @return string Set of slashes ("\\" or "/") + * @access public + * @static + */ + function correctSlashFor($path) { + return (Folder::isWindowsPath($path)) ? '\\' : '/'; + } + +/** + * Returns $path with added terminating slash (corrected for Windows or other OS). + * + * @param string $path Path to check + * @return string Path with ending slash + * @access public + * @static + */ + function slashTerm($path) { + if (Folder::isSlashTerm($path)) { + return $path; + } + return $path . Folder::correctSlashFor($path); + } + +/** + * Returns $path with $element added, with correct slash in-between. + * + * @param string $path Path + * @param string $element Element to and at end of path + * @return string Combined path + * @access public + * @static + */ + function addPathElement($path, $element) { + return rtrim($path, DS) . DS . $element; + } + +/** + * Returns true if the File is in a given CakePath. + * + * @param string $path The path to check. + * @return bool + * @access public + */ + function inCakePath($path = '') { + $dir = substr(Folder::slashTerm(ROOT), 0, -1); + $newdir = $dir . $path; + + return $this->inPath($newdir); + } + +/** + * Returns true if the File is in given path. + * + * @param string $path The path to check that the current pwd() resides with in. + * @param boolean $reverse + * @return bool + * @access public + */ + function inPath($path = '', $reverse = false) { + $dir = Folder::slashTerm($path); + $current = Folder::slashTerm($this->pwd()); + + if (!$reverse) { + $return = preg_match('/^(.*)' . preg_quote($dir, '/') . '(.*)/', $current); + } else { + $return = preg_match('/^(.*)' . preg_quote($current, '/') . '(.*)/', $dir); + } + return (bool)$return; + } + +/** + * Change the mode on a directory structure recursively. This includes changing the mode on files as well. + * + * @param string $path The path to chmod + * @param integer $mode octal value 0755 + * @param boolean $recursive chmod recursively, set to false to only change the current directory. + * @param array $exceptions array of files, directories to skip + * @return boolean Returns TRUE on success, FALSE on failure + * @access public + */ + function chmod($path, $mode = false, $recursive = true, $exceptions = array()) { + if (!$mode) { + $mode = $this->mode; + } + + if ($recursive === false && is_dir($path)) { + if (@chmod($path, intval($mode, 8))) { + $this->__messages[] = sprintf(__('%s changed to %s', true), $path, $mode); + return true; + } + + $this->__errors[] = sprintf(__('%s NOT changed to %s', true), $path, $mode); + return false; + } + + if (is_dir($path)) { + $paths = $this->tree($path); + + foreach ($paths as $type) { + foreach ($type as $key => $fullpath) { + $check = explode(DS, $fullpath); + $count = count($check); + + if (in_array($check[$count - 1], $exceptions)) { + continue; + } + + if (@chmod($fullpath, intval($mode, 8))) { + $this->__messages[] = sprintf(__('%s changed to %s', true), $fullpath, $mode); + } else { + $this->__errors[] = sprintf(__('%s NOT changed to %s', true), $fullpath, $mode); + } + } + } + + if (empty($this->__errors)) { + return true; + } + } + return false; + } + +/** + * Returns an array of nested directories and files in each directory + * + * @param string $path the directory path to build the tree from + * @param mixed $exceptions Array of files to exclude, defaults to excluding hidden files. + * @param string $type either file or dir. null returns both files and directories + * @return mixed array of nested directories and files in each directory + * @access public + */ + function tree($path, $exceptions = true, $type = null) { + $original = $this->path; + $path = rtrim($path, DS); + if (!$this->cd($path)) { + if ($type === null) { + return array(array(), array()); + } + return array(); + } + $this->__files = array(); + $this->__directories = array($this->realpath($path)); + $directories = array(); + + if ($exceptions === false) { + $exceptions = true; + } + while (!empty($this->__directories)) { + $dir = array_pop($this->__directories); + $this->__tree($dir, $exceptions); + $directories[] = $dir; + } + + if ($type === null) { + return array($directories, $this->__files); + } + if ($type === 'dir') { + return $directories; + } + $this->cd($original); + + return $this->__files; + } + +/** + * Private method to list directories and files in each directory + * + * @param string $path The Path to read. + * @param mixed $exceptions Array of files to exclude from the read that will be performed. + * @access private + */ + function __tree($path, $exceptions) { + $this->path = $path; + list($dirs, $files) = $this->read(false, $exceptions, true); + $this->__directories = array_merge($this->__directories, $dirs); + $this->__files = array_merge($this->__files, $files); + } + +/** + * Create a directory structure recursively. Can be used to create + * deep path structures like `/foo/bar/baz/shoe/horn` + * + * @param string $pathname The directory structure to create + * @param integer $mode octal value 0755 + * @return boolean Returns TRUE on success, FALSE on failure + * @access public + */ + function create($pathname, $mode = false) { + if (is_dir($pathname) || empty($pathname)) { + return true; + } + + if (!$mode) { + $mode = $this->mode; + } + + if (is_file($pathname)) { + $this->__errors[] = sprintf(__('%s is a file', true), $pathname); + return false; + } + $nextPathname = substr($pathname, 0, strrpos($pathname, DS)); + + if ($this->create($nextPathname, $mode)) { + if (!file_exists($pathname)) { + $old = umask(0); + if (mkdir($pathname, $mode)) { + umask($old); + $this->__messages[] = sprintf(__('%s created', true), $pathname); + return true; + } else { + umask($old); + $this->__errors[] = sprintf(__('%s NOT created', true), $pathname); + return false; + } + } + } + return false; + } + +/** + * Returns the size in bytes of this Folder and its contents. + * + * @param string $directory Path to directory + * @return int size in bytes of current folder + * @access public + */ + function dirsize() { + $size = 0; + $directory = Folder::slashTerm($this->path); + $stack = array($directory); + $count = count($stack); + for ($i = 0, $j = $count; $i < $j; ++$i) { + if (is_file($stack[$i])) { + $size += filesize($stack[$i]); + } elseif (is_dir($stack[$i])) { + $dir = dir($stack[$i]); + if ($dir) { + while (false !== ($entry = $dir->read())) { + if ($entry === '.' || $entry === '..') { + continue; + } + $add = $stack[$i] . $entry; + + if (is_dir($stack[$i] . $entry)) { + $add = Folder::slashTerm($add); + } + $stack[] = $add; + } + $dir->close(); + } + } + $j = count($stack); + } + return $size; + } + +/** + * Recursively Remove directories if the system allows. + * + * @param string $path Path of directory to delete + * @return boolean Success + * @access public + */ + function delete($path = null) { + if (!$path) { + $path = $this->pwd(); + } + if (!$path) { + return null; + } + $path = Folder::slashTerm($path); + if (is_dir($path) === true) { + $normalFiles = glob($path . '*'); + $hiddenFiles = glob($path . '\.?*'); + + $normalFiles = $normalFiles ? $normalFiles : array(); + $hiddenFiles = $hiddenFiles ? $hiddenFiles : array(); + + $files = array_merge($normalFiles, $hiddenFiles); + if (is_array($files)) { + foreach ($files as $file) { + if (preg_match('/(\.|\.\.)$/', $file)) { + continue; + } + if (is_file($file) === true) { + if (@unlink($file)) { + $this->__messages[] = sprintf(__('%s removed', true), $file); + } else { + $this->__errors[] = sprintf(__('%s NOT removed', true), $file); + } + } elseif (is_dir($file) === true && $this->delete($file) === false) { + return false; + } + } + } + $path = substr($path, 0, strlen($path) - 1); + if (rmdir($path) === false) { + $this->__errors[] = sprintf(__('%s NOT removed', true), $path); + return false; + } else { + $this->__messages[] = sprintf(__('%s removed', true), $path); + } + } + return true; + } + +/** + * Recursive directory copy. + * + * ### Options + * + * - `to` The directory to copy to. + * - `from` The directory to copy from, this will cause a cd() to occur, changing the results of pwd(). + * - `chmod` The mode to copy the files/directories with. + * - `skip` Files/directories to skip. + * + * @param mixed $options Either an array of options (see above) or a string of the destination directory. + * @return bool Success + * @access public + */ + function copy($options = array()) { + if (!$this->pwd()) { + return false; + } + $to = null; + if (is_string($options)) { + $to = $options; + $options = array(); + } + $options = array_merge(array('to' => $to, 'from' => $this->path, 'mode' => $this->mode, 'skip' => array()), $options); + + $fromDir = $options['from']; + $toDir = $options['to']; + $mode = $options['mode']; + + if (!$this->cd($fromDir)) { + $this->__errors[] = sprintf(__('%s not found', true), $fromDir); + return false; + } + + if (!is_dir($toDir)) { + $this->create($toDir, $mode); + } + + if (!is_writable($toDir)) { + $this->__errors[] = sprintf(__('%s not writable', true), $toDir); + return false; + } + + $exceptions = array_merge(array('.', '..', '.svn'), $options['skip']); + if ($handle = @opendir($fromDir)) { + while (false !== ($item = readdir($handle))) { + if (!in_array($item, $exceptions)) { + $from = Folder::addPathElement($fromDir, $item); + $to = Folder::addPathElement($toDir, $item); + if (is_file($from)) { + if (copy($from, $to)) { + chmod($to, intval($mode, 8)); + touch($to, filemtime($from)); + $this->__messages[] = sprintf(__('%s copied to %s', true), $from, $to); + } else { + $this->__errors[] = sprintf(__('%s NOT copied to %s', true), $from, $to); + } + } + + if (is_dir($from) && !file_exists($to)) { + $old = umask(0); + if (mkdir($to, $mode)) { + umask($old); + $old = umask(0); + chmod($to, $mode); + umask($old); + $this->__messages[] = sprintf(__('%s created', true), $to); + $options = array_merge($options, array('to'=> $to, 'from'=> $from)); + $this->copy($options); + } else { + $this->__errors[] = sprintf(__('%s not created', true), $to); + } + } + } + } + closedir($handle); + } else { + return false; + } + + if (!empty($this->__errors)) { + return false; + } + return true; + } + +/** + * Recursive directory move. + * + * ### Options + * + * - `to` The directory to copy to. + * - `from` The directory to copy from, this will cause a cd() to occur, changing the results of pwd(). + * - `chmod` The mode to copy the files/directories with. + * - `skip` Files/directories to skip. + * + * @param array $options (to, from, chmod, skip) + * @return boolean Success + * @access public + */ + function move($options) { + $to = null; + if (is_string($options)) { + $to = $options; + $options = (array)$options; + } + $options = array_merge(array('to' => $to, 'from' => $this->path, 'mode' => $this->mode, 'skip' => array()), $options); + + if ($this->copy($options)) { + if ($this->delete($options['from'])) { + return $this->cd($options['to']); + } + } + return false; + } + +/** + * get messages from latest method + * + * @return array + * @access public + */ + function messages() { + return $this->__messages; + } + +/** + * get error from latest method + * + * @return array + * @access public + */ + function errors() { + return $this->__errors; + } + +/** + * Get the real path (taking ".." and such into account) + * + * @param string $path Path to resolve + * @return string The resolved path + */ + function realpath($path) { + $path = str_replace('/', DS, trim($path)); + if (strpos($path, '..') === false) { + if (!Folder::isAbsolute($path)) { + $path = Folder::addPathElement($this->path, $path); + } + return $path; + } + $parts = explode(DS, $path); + $newparts = array(); + $newpath = ''; + if ($path[0] === DS) { + $newpath = DS; + } + + while (($part = array_shift($parts)) !== NULL) { + if ($part === '.' || $part === '') { + continue; + } + if ($part === '..') { + if (!empty($newparts)) { + array_pop($newparts); + continue; + } else { + return false; + } + } + $newparts[] = $part; + } + $newpath .= implode(DS, $newparts); + + return Folder::slashTerm($newpath); + } + +/** + * Returns true if given $path ends in a slash (i.e. is slash-terminated). + * + * @param string $path Path to check + * @return boolean true if path ends with slash, false otherwise + * @access public + * @static + */ + function isSlashTerm($path) { + $lastChar = $path[strlen($path) - 1]; + return $lastChar === '/' || $lastChar === '\\'; + } +} diff --git a/cake/libs/.svn/text-base/http_socket.php.svn-base b/cake/libs/.svn/text-base/http_socket.php.svn-base new file mode 100644 index 0000000..5d1198f --- /dev/null +++ b/cake/libs/.svn/text-base/http_socket.php.svn-base @@ -0,0 +1,1065 @@ + 'GET', + 'uri' => array( + 'scheme' => 'http', + 'host' => null, + 'port' => 80, + 'user' => null, + 'pass' => null, + 'path' => null, + 'query' => null, + 'fragment' => null + ), + 'auth' => array( + 'method' => 'Basic', + 'user' => null, + 'pass' => null + ), + 'version' => '1.1', + 'body' => '', + 'line' => null, + 'header' => array( + 'Connection' => 'close', + 'User-Agent' => 'CakePHP' + ), + 'raw' => null, + 'cookies' => array() + ); + +/** +* The default structure for storing the response +* +* @var array +* @access public +*/ + var $response = array( + 'raw' => array( + 'status-line' => null, + 'header' => null, + 'body' => null, + 'response' => null + ), + 'status' => array( + 'http-version' => null, + 'code' => null, + 'reason-phrase' => null + ), + 'header' => array(), + 'body' => '', + 'cookies' => array() + ); + +/** + * Default configuration settings for the HttpSocket + * + * @var array + * @access public + */ + var $config = array( + 'persistent' => false, + 'host' => 'localhost', + 'protocol' => 'tcp', + 'port' => 80, + 'timeout' => 30, + 'request' => array( + 'uri' => array( + 'scheme' => 'http', + 'host' => 'localhost', + 'port' => 80 + ), + 'auth' => array( + 'method' => 'Basic', + 'user' => null, + 'pass' => null + ), + 'cookies' => array() + ) + ); + +/** + * String that represents a line break. + * + * @var string + * @access public + */ + var $lineBreak = "\r\n"; + +/** + * Build an HTTP Socket using the specified configuration. + * + * You can use a url string to set the url and use default configurations for + * all other options: + * + * `$http =& new HttpSockect('http://cakephp.org/');` + * + * Or use an array to configure multiple options: + * + * {{{ + * $http =& new HttpSocket(array( + * 'host' => 'cakephp.org', + * 'timeout' => 20 + * )); + * }}} + * + * See HttpSocket::$config for options that can be used. + * + * @param mixed $config Configuration information, either a string url or an array of options. + * @access public + */ + function __construct($config = array()) { + if (is_string($config)) { + $this->_configUri($config); + } elseif (is_array($config)) { + if (isset($config['request']['uri']) && is_string($config['request']['uri'])) { + $this->_configUri($config['request']['uri']); + unset($config['request']['uri']); + } + $this->config = Set::merge($this->config, $config); + } + parent::__construct($this->config); + } + +/** + * Issue the specified request. HttpSocket::get() and HttpSocket::post() wrap this + * method and provide a more granular interface. + * + * @param mixed $request Either an URI string, or an array defining host/uri + * @return mixed false on error, request body on success + * @access public + */ + function request($request = array()) { + $this->reset(false); + + if (is_string($request)) { + $request = array('uri' => $request); + } elseif (!is_array($request)) { + return false; + } + + if (!isset($request['uri'])) { + $request['uri'] = null; + } + $uri = $this->_parseUri($request['uri']); + $hadAuth = false; + if (is_array($uri) && array_key_exists('user', $uri)) { + $hadAuth = true; + } + if (!isset($uri['host'])) { + $host = $this->config['host']; + } + if (isset($request['host'])) { + $host = $request['host']; + unset($request['host']); + } + $request['uri'] = $this->url($request['uri']); + $request['uri'] = $this->_parseUri($request['uri'], true); + $this->request = Set::merge($this->request, $this->config['request'], $request); + + if (!$hadAuth && !empty($this->config['request']['auth']['user'])) { + $this->request['uri']['user'] = $this->config['request']['auth']['user']; + $this->request['uri']['pass'] = $this->config['request']['auth']['pass']; + } + $this->_configUri($this->request['uri']); + + if (isset($host)) { + $this->config['host'] = $host; + } + $cookies = null; + + if (is_array($this->request['header'])) { + $this->request['header'] = $this->_parseHeader($this->request['header']); + if (!empty($this->request['cookies'])) { + $cookies = $this->buildCookies($this->request['cookies']); + } + $this->request['header'] = array_merge(array('Host' => $this->request['uri']['host']), $this->request['header']); + } + + if (isset($this->request['auth']['user']) && isset($this->request['auth']['pass'])) { + $this->request['header']['Authorization'] = $this->request['auth']['method'] . " " . base64_encode($this->request['auth']['user'] . ":" . $this->request['auth']['pass']); + } + if (isset($this->request['uri']['user']) && isset($this->request['uri']['pass'])) { + $this->request['header']['Authorization'] = $this->request['auth']['method'] . " " . base64_encode($this->request['uri']['user'] . ":" . $this->request['uri']['pass']); + } + + if (is_array($this->request['body'])) { + $this->request['body'] = $this->_httpSerialize($this->request['body']); + } + + if (!empty($this->request['body']) && !isset($this->request['header']['Content-Type'])) { + $this->request['header']['Content-Type'] = 'application/x-www-form-urlencoded'; + } + + if (!empty($this->request['body']) && !isset($this->request['header']['Content-Length'])) { + $this->request['header']['Content-Length'] = strlen($this->request['body']); + } + + $connectionType = null; + if (isset($this->request['header']['Connection'])) { + $connectionType = $this->request['header']['Connection']; + } + $this->request['header'] = $this->_buildHeader($this->request['header']) . $cookies; + + if (empty($this->request['line'])) { + $this->request['line'] = $this->_buildRequestLine($this->request); + } + + if ($this->quirksMode === false && $this->request['line'] === false) { + return $this->response = false; + } + + if ($this->request['line'] !== false) { + $this->request['raw'] = $this->request['line']; + } + + if ($this->request['header'] !== false) { + $this->request['raw'] .= $this->request['header']; + } + + $this->request['raw'] .= "\r\n"; + $this->request['raw'] .= $this->request['body']; + $this->write($this->request['raw']); + + $response = null; + while ($data = $this->read()) { + $response .= $data; + } + + if ($connectionType == 'close') { + $this->disconnect(); + } + + $this->response = $this->_parseResponse($response); + if (!empty($this->response['cookies'])) { + $this->config['request']['cookies'] = array_merge($this->config['request']['cookies'], $this->response['cookies']); + } + + return $this->response['body']; + } + +/** + * Issues a GET request to the specified URI, query, and request. + * + * Using a string uri and an array of query string parameters: + * + * `$response = $http->get('http://google.com/search', array('q' => 'cakephp', 'client' => 'safari'));` + * + * Would do a GET request to `http://google.com/search?q=cakephp&client=safari` + * + * You could express the same thing using a uri array and query string parameters: + * + * {{{ + * $response = $http->get( + * array('host' => 'google.com', 'path' => '/search'), + * array('q' => 'cakephp', 'client' => 'safari') + * ); + * }}} + * + * @param mixed $uri URI to request. Either a string uri, or a uri array, see HttpSocket::_parseUri() + * @param array $query Querystring parameters to append to URI + * @param array $request An indexed array with indexes such as 'method' or uri + * @return mixed Result of request, either false on failure or the response to the request. + * @access public + */ + function get($uri = null, $query = array(), $request = array()) { + if (!empty($query)) { + $uri = $this->_parseUri($uri); + if (isset($uri['query'])) { + $uri['query'] = array_merge($uri['query'], $query); + } else { + $uri['query'] = $query; + } + $uri = $this->_buildUri($uri); + } + + $request = Set::merge(array('method' => 'GET', 'uri' => $uri), $request); + return $this->request($request); + } + +/** + * Issues a POST request to the specified URI, query, and request. + * + * `post()` can be used to post simple data arrays to a url: + * + * {{{ + * $response = $http->post('http://example.com', array( + * 'username' => 'batman', + * 'password' => 'bruce_w4yne' + * )); + * }}} + * + * @param mixed $uri URI to request. See HttpSocket::_parseUri() + * @param array $data Array of POST data keys and values. + * @param array $request An indexed array with indexes such as 'method' or uri + * @return mixed Result of request, either false on failure or the response to the request. + * @access public + */ + function post($uri = null, $data = array(), $request = array()) { + $request = Set::merge(array('method' => 'POST', 'uri' => $uri, 'body' => $data), $request); + return $this->request($request); + } + +/** + * Issues a PUT request to the specified URI, query, and request. + * + * @param mixed $uri URI to request, See HttpSocket::_parseUri() + * @param array $data Array of PUT data keys and values. + * @param array $request An indexed array with indexes such as 'method' or uri + * @return mixed Result of request + * @access public + */ + function put($uri = null, $data = array(), $request = array()) { + $request = Set::merge(array('method' => 'PUT', 'uri' => $uri, 'body' => $data), $request); + return $this->request($request); + } + +/** + * Issues a DELETE request to the specified URI, query, and request. + * + * @param mixed $uri URI to request (see {@link _parseUri()}) + * @param array $data Query to append to URI + * @param array $request An indexed array with indexes such as 'method' or uri + * @return mixed Result of request + * @access public + */ + function delete($uri = null, $data = array(), $request = array()) { + $request = Set::merge(array('method' => 'DELETE', 'uri' => $uri, 'body' => $data), $request); + return $this->request($request); + } + +/** + * Normalizes urls into a $uriTemplate. If no template is provided + * a default one will be used. Will generate the url using the + * current config information. + * + * ### Usage: + * + * After configuring part of the request parameters, you can use url() to generate + * urls. + * + * {{{ + * $http->configUri('http://www.cakephp.org'); + * $url = $http->url('/search?q=bar'); + * }}} + * + * Would return `http://www.cakephp.org/search?q=bar` + * + * url() can also be used with custom templates: + * + * `$url = $http->url('http://www.cakephp/search?q=socket', '/%path?%query');` + * + * Would return `/search?q=socket`. + * + * @param mixed $url Either a string or array of url options to create a url with. + * @param string $uriTemplate A template string to use for url formatting. + * @return mixed Either false on failure or a string containing the composed url. + * @access public + */ + function url($url = null, $uriTemplate = null) { + if (is_null($url)) { + $url = '/'; + } + if (is_string($url)) { + if ($url{0} == '/') { + $url = $this->config['request']['uri']['host'].':'.$this->config['request']['uri']['port'] . $url; + } + if (!preg_match('/^.+:\/\/|\*|^\//', $url)) { + $url = $this->config['request']['uri']['scheme'].'://'.$url; + } + } elseif (!is_array($url) && !empty($url)) { + return false; + } + + $base = array_merge($this->config['request']['uri'], array('scheme' => array('http', 'https'), 'port' => array(80, 443))); + $url = $this->_parseUri($url, $base); + + if (empty($url)) { + $url = $this->config['request']['uri']; + } + + if (!empty($uriTemplate)) { + return $this->_buildUri($url, $uriTemplate); + } + return $this->_buildUri($url); + } + +/** + * Parses the given message and breaks it down in parts. + * + * @param string $message Message to parse + * @return array Parsed message (with indexed elements such as raw, status, header, body) + * @access protected + */ + function _parseResponse($message) { + if (is_array($message)) { + return $message; + } elseif (!is_string($message)) { + return false; + } + + static $responseTemplate; + + if (empty($responseTemplate)) { + $classVars = get_class_vars(__CLASS__); + $responseTemplate = $classVars['response']; + } + + $response = $responseTemplate; + + if (!preg_match("/^(.+\r\n)(.*)(?<=\r\n)\r\n/Us", $message, $match)) { + return false; + } + + list($null, $response['raw']['status-line'], $response['raw']['header']) = $match; + $response['raw']['response'] = $message; + $response['raw']['body'] = substr($message, strlen($match[0])); + + if (preg_match("/(.+) ([0-9]{3}) (.+)\r\n/DU", $response['raw']['status-line'], $match)) { + $response['status']['http-version'] = $match[1]; + $response['status']['code'] = (int)$match[2]; + $response['status']['reason-phrase'] = $match[3]; + } + + $response['header'] = $this->_parseHeader($response['raw']['header']); + $transferEncoding = null; + if (isset($response['header']['Transfer-Encoding'])) { + $transferEncoding = $response['header']['Transfer-Encoding']; + } + $decoded = $this->_decodeBody($response['raw']['body'], $transferEncoding); + $response['body'] = $decoded['body']; + + if (!empty($decoded['header'])) { + $response['header'] = $this->_parseHeader($this->_buildHeader($response['header']).$this->_buildHeader($decoded['header'])); + } + + if (!empty($response['header'])) { + $response['cookies'] = $this->parseCookies($response['header']); + } + + foreach ($response['raw'] as $field => $val) { + if ($val === '') { + $response['raw'][$field] = null; + } + } + + return $response; + } + +/** + * Generic function to decode a $body with a given $encoding. Returns either an array with the keys + * 'body' and 'header' or false on failure. + * + * @param string $body A string continaing the body to decode. + * @param mixed $encoding Can be false in case no encoding is being used, or a string representing the encoding. + * @return mixed Array of response headers and body or false. + * @access protected + */ + function _decodeBody($body, $encoding = 'chunked') { + if (!is_string($body)) { + return false; + } + if (empty($encoding)) { + return array('body' => $body, 'header' => false); + } + $decodeMethod = '_decode'.Inflector::camelize(str_replace('-', '_', $encoding)).'Body'; + + if (!is_callable(array(&$this, $decodeMethod))) { + if (!$this->quirksMode) { + trigger_error(sprintf(__('HttpSocket::_decodeBody - Unknown encoding: %s. Activate quirks mode to surpress error.', true), h($encoding)), E_USER_WARNING); + } + return array('body' => $body, 'header' => false); + } + return $this->{$decodeMethod}($body); + } + +/** + * Decodes a chunked message $body and returns either an array with the keys 'body' and 'header' or false as + * a result. + * + * @param string $body A string continaing the chunked body to decode. + * @return mixed Array of response headers and body or false. + * @access protected + */ + function _decodeChunkedBody($body) { + if (!is_string($body)) { + return false; + } + + $decodedBody = null; + $chunkLength = null; + + while ($chunkLength !== 0) { + if (!preg_match("/^([0-9a-f]+) *(?:;(.+)=(.+))?\r\n/iU", $body, $match)) { + if (!$this->quirksMode) { + trigger_error(__('HttpSocket::_decodeChunkedBody - Could not parse malformed chunk. Activate quirks mode to do this.', true), E_USER_WARNING); + return false; + } + break; + } + + $chunkSize = 0; + $hexLength = 0; + $chunkExtensionName = ''; + $chunkExtensionValue = ''; + if (isset($match[0])) { + $chunkSize = $match[0]; + } + if (isset($match[1])) { + $hexLength = $match[1]; + } + if (isset($match[2])) { + $chunkExtensionName = $match[2]; + } + if (isset($match[3])) { + $chunkExtensionValue = $match[3]; + } + + $body = substr($body, strlen($chunkSize)); + $chunkLength = hexdec($hexLength); + $chunk = substr($body, 0, $chunkLength); + if (!empty($chunkExtensionName)) { + /** + * @todo See if there are popular chunk extensions we should implement + */ + } + $decodedBody .= $chunk; + if ($chunkLength !== 0) { + $body = substr($body, $chunkLength+strlen("\r\n")); + } + } + + $entityHeader = false; + if (!empty($body)) { + $entityHeader = $this->_parseHeader($body); + } + return array('body' => $decodedBody, 'header' => $entityHeader); + } + +/** + * Parses and sets the specified URI into current request configuration. + * + * @param mixed $uri URI, See HttpSocket::_parseUri() + * @return array Current configuration settings + * @access protected + */ + function _configUri($uri = null) { + if (empty($uri)) { + return false; + } + + if (is_array($uri)) { + $uri = $this->_parseUri($uri); + } else { + $uri = $this->_parseUri($uri, true); + } + + if (!isset($uri['host'])) { + return false; + } + $config = array( + 'request' => array( + 'uri' => array_intersect_key($uri, $this->config['request']['uri']), + 'auth' => array_intersect_key($uri, $this->config['request']['auth']) + ) + ); + $this->config = Set::merge($this->config, $config); + $this->config = Set::merge($this->config, array_intersect_key($this->config['request']['uri'], $this->config)); + return $this->config; + } + +/** + * Takes a $uri array and turns it into a fully qualified URL string + * + * @param mixed $uri Either A $uri array, or a request string. Will use $this->config if left empty. + * @param string $uriTemplate The Uri template/format to use. + * @return mixed A fully qualified URL formated according to $uriTemplate, or false on failure + * @access protected + */ + function _buildUri($uri = array(), $uriTemplate = '%scheme://%user:%pass@%host:%port/%path?%query#%fragment') { + if (is_string($uri)) { + $uri = array('host' => $uri); + } + $uri = $this->_parseUri($uri, true); + + if (!is_array($uri) || empty($uri)) { + return false; + } + + $uri['path'] = preg_replace('/^\//', null, $uri['path']); + $uri['query'] = $this->_httpSerialize($uri['query']); + $stripIfEmpty = array( + 'query' => '?%query', + 'fragment' => '#%fragment', + 'user' => '%user:%pass@', + 'host' => '%host:%port/' + ); + + foreach ($stripIfEmpty as $key => $strip) { + if (empty($uri[$key])) { + $uriTemplate = str_replace($strip, null, $uriTemplate); + } + } + + $defaultPorts = array('http' => 80, 'https' => 443); + if (array_key_exists($uri['scheme'], $defaultPorts) && $defaultPorts[$uri['scheme']] == $uri['port']) { + $uriTemplate = str_replace(':%port', null, $uriTemplate); + } + foreach ($uri as $property => $value) { + $uriTemplate = str_replace('%'.$property, $value, $uriTemplate); + } + + if ($uriTemplate === '/*') { + $uriTemplate = '*'; + } + return $uriTemplate; + } + +/** + * Parses the given URI and breaks it down into pieces as an indexed array with elements + * such as 'scheme', 'port', 'query'. + * + * @param string $uri URI to parse + * @param mixed $base If true use default URI config, otherwise indexed array to set 'scheme', 'host', 'port', etc. + * @return array Parsed URI + * @access protected + */ + function _parseUri($uri = null, $base = array()) { + $uriBase = array( + 'scheme' => array('http', 'https'), + 'host' => null, + 'port' => array(80, 443), + 'user' => null, + 'pass' => null, + 'path' => '/', + 'query' => null, + 'fragment' => null + ); + + if (is_string($uri)) { + $uri = parse_url($uri); + } + if (!is_array($uri) || empty($uri)) { + return false; + } + if ($base === true) { + $base = $uriBase; + } + + if (isset($base['port'], $base['scheme']) && is_array($base['port']) && is_array($base['scheme'])) { + if (isset($uri['scheme']) && !isset($uri['port'])) { + $base['port'] = $base['port'][array_search($uri['scheme'], $base['scheme'])]; + } elseif (isset($uri['port']) && !isset($uri['scheme'])) { + $base['scheme'] = $base['scheme'][array_search($uri['port'], $base['port'])]; + } + } + + if (is_array($base) && !empty($base)) { + $uri = array_merge($base, $uri); + } + + if (isset($uri['scheme']) && is_array($uri['scheme'])) { + $uri['scheme'] = array_shift($uri['scheme']); + } + if (isset($uri['port']) && is_array($uri['port'])) { + $uri['port'] = array_shift($uri['port']); + } + + if (array_key_exists('query', $uri)) { + $uri['query'] = $this->_parseQuery($uri['query']); + } + + if (!array_intersect_key($uriBase, $uri)) { + return false; + } + return $uri; + } + +/** + * This function can be thought of as a reverse to PHP5's http_build_query(). It takes a given query string and turns it into an array and + * supports nesting by using the php bracket syntax. So this menas you can parse queries like: + * + * - ?key[subKey]=value + * - ?key[]=value1&key[]=value2 + * + * A leading '?' mark in $query is optional and does not effect the outcome of this function. + * For the complete capabilities of this implementation take a look at HttpSocketTest::testparseQuery() + * + * @param mixed $query A query string to parse into an array or an array to return directly "as is" + * @return array The $query parsed into a possibly multi-level array. If an empty $query is + * given, an empty array is returned. + * @access protected + */ + function _parseQuery($query) { + if (is_array($query)) { + return $query; + } + $parsedQuery = array(); + + if (is_string($query) && !empty($query)) { + $query = preg_replace('/^\?/', '', $query); + $items = explode('&', $query); + + foreach ($items as $item) { + if (strpos($item, '=') !== false) { + list($key, $value) = explode('=', $item, 2); + } else { + $key = $item; + $value = null; + } + + $key = urldecode($key); + $value = urldecode($value); + + if (preg_match_all('/\[([^\[\]]*)\]/iUs', $key, $matches)) { + $subKeys = $matches[1]; + $rootKey = substr($key, 0, strpos($key, '[')); + if (!empty($rootKey)) { + array_unshift($subKeys, $rootKey); + } + $queryNode =& $parsedQuery; + + foreach ($subKeys as $subKey) { + if (!is_array($queryNode)) { + $queryNode = array(); + } + + if ($subKey === '') { + $queryNode[] = array(); + end($queryNode); + $subKey = key($queryNode); + } + $queryNode =& $queryNode[$subKey]; + } + $queryNode = $value; + } else { + $parsedQuery[$key] = $value; + } + } + } + return $parsedQuery; + } + +/** + * Builds a request line according to HTTP/1.1 specs. Activate quirks mode to work outside specs. + * + * @param array $request Needs to contain a 'uri' key. Should also contain a 'method' key, otherwise defaults to GET. + * @param string $versionToken The version token to use, defaults to HTTP/1.1 + * @return string Request line + * @access protected + */ + function _buildRequestLine($request = array(), $versionToken = 'HTTP/1.1') { + $asteriskMethods = array('OPTIONS'); + + if (is_string($request)) { + $isValid = preg_match("/(.+) (.+) (.+)\r\n/U", $request, $match); + if (!$this->quirksMode && (!$isValid || ($match[2] == '*' && !in_array($match[3], $asteriskMethods)))) { + trigger_error(__('HttpSocket::_buildRequestLine - Passed an invalid request line string. Activate quirks mode to do this.', true), E_USER_WARNING); + return false; + } + return $request; + } elseif (!is_array($request)) { + return false; + } elseif (!array_key_exists('uri', $request)) { + return false; + } + + $request['uri'] = $this->_parseUri($request['uri']); + $request = array_merge(array('method' => 'GET'), $request); + $request['uri'] = $this->_buildUri($request['uri'], '/%path?%query'); + + if (!$this->quirksMode && $request['uri'] === '*' && !in_array($request['method'], $asteriskMethods)) { + trigger_error(sprintf(__('HttpSocket::_buildRequestLine - The "*" asterisk character is only allowed for the following methods: %s. Activate quirks mode to work outside of HTTP/1.1 specs.', true), join(',', $asteriskMethods)), E_USER_WARNING); + return false; + } + return $request['method'].' '.$request['uri'].' '.$versionToken.$this->lineBreak; + } + +/** + * Serializes an array for transport. + * + * @param array $data Data to serialize + * @return string Serialized variable + * @access protected + */ + function _httpSerialize($data = array()) { + if (is_string($data)) { + return $data; + } + if (empty($data) || !is_array($data)) { + return false; + } + return substr(Router::queryString($data), 1); + } + +/** + * Builds the header. + * + * @param array $header Header to build + * @return string Header built from array + * @access protected + */ + function _buildHeader($header, $mode = 'standard') { + if (is_string($header)) { + return $header; + } elseif (!is_array($header)) { + return false; + } + + $returnHeader = ''; + foreach ($header as $field => $contents) { + if (is_array($contents) && $mode == 'standard') { + $contents = implode(',', $contents); + } + foreach ((array)$contents as $content) { + $contents = preg_replace("/\r\n(?![\t ])/", "\r\n ", $content); + $field = $this->_escapeToken($field); + + $returnHeader .= $field.': '.$contents.$this->lineBreak; + } + } + return $returnHeader; + } + +/** + * Parses an array based header. + * + * @param array $header Header as an indexed array (field => value) + * @return array Parsed header + * @access protected + */ + function _parseHeader($header) { + if (is_array($header)) { + foreach ($header as $field => $value) { + unset($header[$field]); + $field = strtolower($field); + preg_match_all('/(?:^|(?<=-))[a-z]/U', $field, $offsets, PREG_OFFSET_CAPTURE); + + foreach ($offsets[0] as $offset) { + $field = substr_replace($field, strtoupper($offset[0]), $offset[1], 1); + } + $header[$field] = $value; + } + return $header; + } elseif (!is_string($header)) { + return false; + } + + preg_match_all("/(.+):(.+)(?:(?lineBreak . "|\$)/Uis", $header, $matches, PREG_SET_ORDER); + + $header = array(); + foreach ($matches as $match) { + list(, $field, $value) = $match; + + $value = trim($value); + $value = preg_replace("/[\t ]\r\n/", "\r\n", $value); + + $field = $this->_unescapeToken($field); + + $field = strtolower($field); + preg_match_all('/(?:^|(?<=-))[a-z]/U', $field, $offsets, PREG_OFFSET_CAPTURE); + foreach ($offsets[0] as $offset) { + $field = substr_replace($field, strtoupper($offset[0]), $offset[1], 1); + } + + if (!isset($header[$field])) { + $header[$field] = $value; + } else { + $header[$field] = array_merge((array)$header[$field], (array)$value); + } + } + return $header; + } + +/** + * Parses cookies in response headers. + * + * @param array $header Header array containing one ore more 'Set-Cookie' headers. + * @return mixed Either false on no cookies, or an array of cookies recieved. + * @access public + * @todo Make this 100% RFC 2965 confirm + */ + function parseCookies($header) { + if (!isset($header['Set-Cookie'])) { + return false; + } + + $cookies = array(); + foreach ((array)$header['Set-Cookie'] as $cookie) { + if (strpos($cookie, '";"') !== false) { + $cookie = str_replace('";"', "{__cookie_replace__}", $cookie); + $parts = str_replace("{__cookie_replace__}", '";"', explode(';', $cookie)); + } else { + $parts = preg_split('/\;[ \t]*/', $cookie); + } + + list($name, $value) = explode('=', array_shift($parts), 2); + $cookies[$name] = compact('value'); + + foreach ($parts as $part) { + if (strpos($part, '=') !== false) { + list($key, $value) = explode('=', $part); + } else { + $key = $part; + $value = true; + } + + $key = strtolower($key); + if (!isset($cookies[$name][$key])) { + $cookies[$name][$key] = $value; + } + } + } + return $cookies; + } + +/** + * Builds cookie headers for a request. + * + * @param array $cookies Array of cookies to send with the request. + * @return string Cookie header string to be sent with the request. + * @access public + * @todo Refactor token escape mechanism to be configurable + */ + function buildCookies($cookies) { + $header = array(); + foreach ($cookies as $name => $cookie) { + $header[] = $name.'='.$this->_escapeToken($cookie['value'], array(';')); + } + $header = $this->_buildHeader(array('Cookie' => implode('; ', $header)), 'pragmatic'); + return $header; + } + +/** + * Unescapes a given $token according to RFC 2616 (HTTP 1.1 specs) + * + * @param string $token Token to unescape + * @return string Unescaped token + * @access protected + * @todo Test $chars parameter + */ + function _unescapeToken($token, $chars = null) { + $regex = '/"(['.join('', $this->_tokenEscapeChars(true, $chars)).'])"/'; + $token = preg_replace($regex, '\\1', $token); + return $token; + } + +/** + * Escapes a given $token according to RFC 2616 (HTTP 1.1 specs) + * + * @param string $token Token to escape + * @return string Escaped token + * @access protected + * @todo Test $chars parameter + */ + function _escapeToken($token, $chars = null) { + $regex = '/(['.join('', $this->_tokenEscapeChars(true, $chars)).'])/'; + $token = preg_replace($regex, '"\\1"', $token); + return $token; + } + +/** + * Gets escape chars according to RFC 2616 (HTTP 1.1 specs). + * + * @param boolean $hex true to get them as HEX values, false otherwise + * @return array Escape chars + * @access protected + * @todo Test $chars parameter + */ + function _tokenEscapeChars($hex = true, $chars = null) { + if (!empty($chars)) { + $escape = $chars; + } else { + $escape = array('"', "(", ")", "<", ">", "@", ",", ";", ":", "\\", "/", "[", "]", "?", "=", "{", "}", " "); + for ($i = 0; $i <= 31; $i++) { + $escape[] = chr($i); + } + $escape[] = chr(127); + } + + if ($hex == false) { + return $escape; + } + $regexChars = ''; + foreach ($escape as $key => $char) { + $escape[$key] = '\\x'.str_pad(dechex(ord($char)), 2, '0', STR_PAD_LEFT); + } + return $escape; + } + +/** + * Resets the state of this HttpSocket instance to it's initial state (before Object::__construct got executed) or does + * the same thing partially for the request and the response property only. + * + * @param boolean $full If set to false only HttpSocket::response and HttpSocket::request are reseted + * @return boolean True on success + * @access public + */ + function reset($full = true) { + static $initalState = array(); + if (empty($initalState)) { + $initalState = get_class_vars(__CLASS__); + } + if ($full == false) { + $this->request = $initalState['request']; + $this->response = $initalState['response']; + return true; + } + parent::reset($initalState); + return true; + } +} diff --git a/cake/libs/.svn/text-base/i18n.php.svn-base b/cake/libs/.svn/text-base/i18n.php.svn-base new file mode 100644 index 0000000..b775223 --- /dev/null +++ b/cake/libs/.svn/text-base/i18n.php.svn-base @@ -0,0 +1,575 @@ +l10n =& new L10n(); + } + return $instance[0]; + } + +/** + * Used by the translation functions in basics.php + * Can also be used like I18n::translate(); but only if the App::import('I18n'); has been used to load the class. + * + * @param string $singular String to translate + * @param string $plural Plural string (if any) + * @param string $domain Domain The domain of the translation. Domains are often used by plugin translations + * @param string $category Category The integer value of the category to use. + * @param integer $count Count Count is used with $plural to choose the correct plural form. + * @return string translated string. + * @access public + */ + function translate($singular, $plural = null, $domain = null, $category = 6, $count = null) { + $_this =& I18n::getInstance(); + + if (strpos($singular, "\r\n") !== false) { + $singular = str_replace("\r\n", "\n", $singular); + } + if ($plural !== null && strpos($plural, "\r\n") !== false) { + $plural = str_replace("\r\n", "\n", $plural); + } + + if (is_numeric($category)) { + $_this->category = $_this->__categories[$category]; + } + $language = Configure::read('Config.language'); + + if (!empty($_SESSION['Config']['language'])) { + $language = $_SESSION['Config']['language']; + } + + if (($_this->__lang && $_this->__lang !== $language) || !$_this->__lang) { + $lang = $_this->l10n->get($language); + $_this->__lang = $lang; + } + + if (is_null($domain)) { + $domain = 'default'; + } + $_this->domain = $domain . '_' . $_this->l10n->locale; + + if (empty($_this->__domains)) { + $_this->__domains = Cache::read($_this->domain, '_cake_core_'); + } + + if (!isset($_this->__domains[$_this->category][$_this->__lang][$domain])) { + $_this->__bindTextDomain($domain); + $_this->__cache = true; + } + + if ($_this->category == 'LC_TIME') { + return $_this->__translateTime($singular,$domain); + } + + if (!isset($count)) { + $plurals = 0; + } elseif (!empty($_this->__domains[$_this->category][$_this->__lang][$domain]["%plural-c"]) && $_this->__noLocale === false) { + $header = $_this->__domains[$_this->category][$_this->__lang][$domain]["%plural-c"]; + $plurals = $_this->__pluralGuess($header, $count); + } else { + if ($count != 1) { + $plurals = 1; + } else { + $plurals = 0; + } + } + + if (!empty($_this->__domains[$_this->category][$_this->__lang][$domain][$singular])) { + if (($trans = $_this->__domains[$_this->category][$_this->__lang][$domain][$singular]) || ($plurals) && ($trans = $_this->__domains[$_this->category][$_this->__lang][$domain][$plural])) { + if (is_array($trans)) { + if (isset($trans[$plurals])) { + $trans = $trans[$plurals]; + } + } + if (strlen($trans)) { + return $trans; + } + } + } + + if (!empty($plurals)) { + return $plural; + } + return $singular; + } + +/** + * Attempts to find the plural form of a string. + * + * @param string $header Type + * @param integrer $n Number + * @return integer plural match + * @access private + */ + function __pluralGuess($header, $n) { + if (!is_string($header) || $header === "nplurals=1;plural=0;" || !isset($header[0])) { + return 0; + } + + if ($header === "nplurals=2;plural=n!=1;") { + return $n != 1 ? 1 : 0; + } elseif ($header === "nplurals=2;plural=n>1;") { + return $n > 1 ? 1 : 0; + } + + if (strpos($header, "plurals=3")) { + if (strpos($header, "100!=11")) { + if (strpos($header, "10<=4")) { + return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); + } elseif (strpos($header, "100<10")) { + return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); + } + return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n != 0 ? 1 : 2); + } elseif (strpos($header, "n==2")) { + return $n == 1 ? 0 : ($n == 2 ? 1 : 2); + } elseif (strpos($header, "n==0")) { + return $n == 1 ? 0 : ($n == 0 || ($n % 100 > 0 && $n % 100 < 20) ? 1 : 2); + } elseif (strpos($header, "n>=2")) { + return $n == 1 ? 0 : ($n >= 2 && $n <= 4 ? 1 : 2); + } elseif (strpos($header, "10>=2")) { + return $n == 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); + } + return $n % 10 == 1 ? 0 : ($n % 10 == 2 ? 1 : 2); + } elseif (strpos($header, "plurals=4")) { + if (strpos($header, "100==2")) { + return $n % 100 == 1 ? 0 : ($n % 100 == 2 ? 1 : ($n % 100 == 3 || $n % 100 == 4 ? 2 : 3)); + } elseif (strpos($header, "n>=3")) { + return $n == 1 ? 0 : ($n == 2 ? 1 : ($n == 0 || ($n >= 3 && $n <= 10) ? 2 : 3)); + } elseif (strpos($header, "100>=1")) { + return $n == 1 ? 0 : ($n == 0 || ($n % 100 >= 1 && $n % 100 <= 10) ? 1 : ($n % 100 >= 11 && $n % 100 <= 20 ? 2 : 3)); + } + } elseif (strpos($header, "plurals=5")) { + return $n == 1 ? 0 : ($n == 2 ? 1 : ($n >= 3 && $n <= 6 ? 2 : ($n >= 7 && $n <= 10 ? 3 : 4))); + } + } + +/** + * Binds the given domain to a file in the specified directory. + * + * @param string $domain Domain to bind + * @return string Domain binded + * @access private + */ + function __bindTextDomain($domain) { + $this->__noLocale = true; + $core = true; + $merge = array(); + $searchPaths = App::path('locales'); + $plugins = App::objects('plugin'); + + if (!empty($plugins)) { + foreach ($plugins as $plugin) { + $plugin = Inflector::underscore($plugin); + if ($plugin === $domain) { + $searchPaths[] = App::pluginPath($plugin) . DS . 'locale' . DS; + $searchPaths = array_reverse($searchPaths); + break; + } + } + } + + + foreach ($searchPaths as $directory) { + + foreach ($this->l10n->languagePath as $lang) { + $file = $directory . $lang . DS . $this->category . DS . $domain; + $localeDef = $directory . $lang . DS . $this->category; + + if ($core) { + $app = $directory . $lang . DS . $this->category . DS . 'core'; + + if (file_exists($fn = "$app.mo")) { + $this->__loadMo($fn, $domain); + $this->__noLocale = false; + $merge[$this->category][$this->__lang][$domain] = $this->__domains[$this->category][$this->__lang][$domain]; + $core = null; + } elseif (file_exists($fn = "$app.po") && ($f = fopen($fn, "r"))) { + $this->__loadPo($f, $domain); + $this->__noLocale = false; + $merge[$this->category][$this->__lang][$domain] = $this->__domains[$this->category][$this->__lang][$domain]; + $core = null; + } + } + + if (file_exists($fn = "$file.mo")) { + $this->__loadMo($fn, $domain); + $this->__noLocale = false; + break 2; + } elseif (file_exists($fn = "$file.po") && ($f = fopen($fn, "r"))) { + $this->__loadPo($f, $domain); + $this->__noLocale = false; + break 2; + } elseif (is_file($localeDef) && ($f = fopen($localeDef, "r"))) { + $this->__loadLocaleDefinition($f, $domain); + $this->__noLocale = false; + return $domain; + } + } + } + + if (empty($this->__domains[$this->category][$this->__lang][$domain])) { + $this->__domains[$this->category][$this->__lang][$domain] = array(); + return $domain; + } + + if ($head = $this->__domains[$this->category][$this->__lang][$domain][""]) { + foreach (explode("\n", $head) as $line) { + $header = strtok($line,":"); + $line = trim(strtok("\n")); + $this->__domains[$this->category][$this->__lang][$domain]["%po-header"][strtolower($header)] = $line; + } + + if (isset($this->__domains[$this->category][$this->__lang][$domain]["%po-header"]["plural-forms"])) { + $switch = preg_replace("/(?:[() {}\\[\\]^\\s*\\]]+)/", "", $this->__domains[$this->category][$this->__lang][$domain]["%po-header"]["plural-forms"]); + $this->__domains[$this->category][$this->__lang][$domain]["%plural-c"] = $switch; + unset($this->__domains[$this->category][$this->__lang][$domain]["%po-header"]); + } + $this->__domains = Set::pushDiff($this->__domains, $merge); + + if (isset($this->__domains[$this->category][$this->__lang][$domain][null])) { + unset($this->__domains[$this->category][$this->__lang][$domain][null]); + } + } + return $domain; + } + +/** + * Loads the binary .mo file for translation and sets the values for this translation in the var I18n::__domains + * + * @param resource $file Binary .mo file to load + * @param string $domain Domain where to load file in + * @access private + */ + function __loadMo($file, $domain) { + $data = file_get_contents($file); + + if ($data) { + $header = substr($data, 0, 20); + $header = unpack("L1magic/L1version/L1count/L1o_msg/L1o_trn", $header); + extract($header); + + if ((dechex($magic) == '950412de' || dechex($magic) == 'ffffffff950412de') && $version == 0) { + for ($n = 0; $n < $count; $n++) { + $r = unpack("L1len/L1offs", substr($data, $o_msg + $n * 8, 8)); + $msgid = substr($data, $r["offs"], $r["len"]); + unset($msgid_plural); + + if (strpos($msgid, "\000")) { + list($msgid, $msgid_plural) = explode("\000", $msgid); + } + $r = unpack("L1len/L1offs", substr($data, $o_trn + $n * 8, 8)); + $msgstr = substr($data, $r["offs"], $r["len"]); + + if (strpos($msgstr, "\000")) { + $msgstr = explode("\000", $msgstr); + } + $this->__domains[$this->category][$this->__lang][$domain][$msgid] = $msgstr; + + if (isset($msgid_plural)) { + $this->__domains[$this->category][$this->__lang][$domain][$msgid_plural] =& $this->__domains[$this->category][$this->__lang][$domain][$msgid]; + } + } + } + } + } + +/** + * Loads the text .po file for translation and sets the values for this translation in the var I18n::__domains + * + * @param resource $file Text .po file to load + * @param string $domain Domain to load file in + * @return array Binded domain elements + * @access private + */ + function __loadPo($file, $domain) { + $type = 0; + $translations = array(); + $translationKey = ""; + $plural = 0; + $header = ""; + + do { + $line = trim(fgets($file)); + if ($line == "" || $line[0] == "#") { + continue; + } + if (preg_match("/msgid[[:space:]]+\"(.+)\"$/i", $line, $regs)) { + $type = 1; + $translationKey = stripcslashes($regs[1]); + } elseif (preg_match("/msgid[[:space:]]+\"\"$/i", $line, $regs)) { + $type = 2; + $translationKey = ""; + } elseif (preg_match("/^\"(.*)\"$/i", $line, $regs) && ($type == 1 || $type == 2 || $type == 3)) { + $type = 3; + $translationKey .= stripcslashes($regs[1]); + } elseif (preg_match("/msgstr[[:space:]]+\"(.+)\"$/i", $line, $regs) && ($type == 1 || $type == 3) && $translationKey) { + $translations[$translationKey] = stripcslashes($regs[1]); + $type = 4; + } elseif (preg_match("/msgstr[[:space:]]+\"\"$/i", $line, $regs) && ($type == 1 || $type == 3) && $translationKey) { + $type = 4; + $translations[$translationKey] = ""; + } elseif (preg_match("/^\"(.*)\"$/i", $line, $regs) && $type == 4 && $translationKey) { + $translations[$translationKey] .= stripcslashes($regs[1]); + } elseif (preg_match("/msgid_plural[[:space:]]+\".*\"$/i", $line, $regs)) { + $type = 6; + } elseif (preg_match("/^\"(.*)\"$/i", $line, $regs) && $type == 6 && $translationKey) { + $type = 6; + } elseif (preg_match("/msgstr\[(\d+)\][[:space:]]+\"(.+)\"$/i", $line, $regs) && ($type == 6 || $type == 7) && $translationKey) { + $plural = $regs[1]; + $translations[$translationKey][$plural] = stripcslashes($regs[2]); + $type = 7; + } elseif (preg_match("/msgstr\[(\d+)\][[:space:]]+\"\"$/i", $line, $regs) && ($type == 6 || $type == 7) && $translationKey) { + $plural = $regs[1]; + $translations[$translationKey][$plural] = ""; + $type = 7; + } elseif (preg_match("/^\"(.*)\"$/i", $line, $regs) && $type == 7 && $translationKey) { + $translations[$translationKey][$plural] .= stripcslashes($regs[1]); + } elseif (preg_match("/msgstr[[:space:]]+\"(.+)\"$/i", $line, $regs) && $type == 2 && !$translationKey) { + $header .= stripcslashes($regs[1]); + $type = 5; + } elseif (preg_match("/msgstr[[:space:]]+\"\"$/i", $line, $regs) && !$translationKey) { + $header = ""; + $type = 5; + } elseif (preg_match("/^\"(.*)\"$/i", $line, $regs) && $type == 5) { + $header .= stripcslashes($regs[1]); + } else { + unset($translations[$translationKey]); + $type = 0; + $translationKey = ""; + $plural = 0; + } + } while (!feof($file)); + fclose($file); + $merge[""] = $header; + return $this->__domains[$this->category][$this->__lang][$domain] = array_merge($merge ,$translations); + } + +/** + * Parses a locale definition file following the POSIX standard + * + * @param resource $file file handler + * @param string $domain Domain where locale definitions will be stored + * @return void + * @access private + */ + function __loadLocaleDefinition($file, $domain = null) { + $comment = '#'; + $escape = '\\'; + $currentToken = false; + $value = ''; + while ($line = fgets($file)) { + $line = trim($line); + if (empty($line) || $line[0] === $comment) { + continue; + } + $parts = preg_split("/[[:space:]]+/",$line); + if ($parts[0] === 'comment_char') { + $comment = $parts[1]; + continue; + } + if ($parts[0] === 'escape_char') { + $escape = $parts[1]; + continue; + } + $count = count($parts); + if ($count == 2) { + $currentToken = $parts[0]; + $value = $parts[1]; + } elseif ($count == 1) { + $value .= $parts[0]; + } else { + continue; + } + + $len = strlen($value) - 1; + if ($value[$len] === $escape) { + $value = substr($value, 0, $len); + continue; + } + + $mustEscape = array($escape . ',' , $escape . ';', $escape . '<', $escape . '>', $escape . $escape); + $replacements = array_map('crc32', $mustEscape); + $value = str_replace($mustEscape, $replacements, $value); + $value = explode(';', $value); + $this->__escape = $escape; + foreach ($value as $i => $val) { + $val = trim($val, '"'); + $val = preg_replace_callback('/(?:<)?(.[^>]*)(?:>)?/', array(&$this, '__parseLiteralValue'), $val); + $val = str_replace($replacements, $mustEscape, $val); + $value[$i] = $val; + } + if (count($value) == 1) { + $this->__domains[$this->category][$this->__lang][$domain][$currentToken] = array_pop($value); + } else { + $this->__domains[$this->category][$this->__lang][$domain][$currentToken] = $value; + } + } + } + +/** + * Auxiliary function to parse a symbol from a locale definition file + * + * @param string $string Symbol to be parsed + * @return string parsed symbol + * @access private + */ + function __parseLiteralValue($string) { + $string = $string[1]; + if (substr($string, 0, 2) === $this->__escape . 'x') { + $delimiter = $this->__escape . 'x'; + return join('', array_map('chr', array_map('hexdec',array_filter(explode($delimiter, $string))))); + } + if (substr($string, 0, 2) === $this->__escape . 'd') { + $delimiter = $this->__escape . 'd'; + return join('', array_map('chr', array_filter(explode($delimiter, $string)))); + } + if ($string[0] === $this->__escape && isset($string[1]) && is_numeric($string[1])) { + $delimiter = $this->__escape; + return join('', array_map('chr', array_filter(explode($delimiter, $string)))); + } + if (substr($string, 0, 3) === 'U00') { + $delimiter = 'U00'; + return join('', array_map('chr', array_map('hexdec', array_filter(explode($delimiter, $string))))); + } + if (preg_match('/U([0-9a-fA-F]{4})/', $string, $match)) { + return Multibyte::ascii(array(hexdec($match[1]))); + } + return $string; + } + +/** + * Returns a Time format definition from corresponding domain + * + * @param string $format Format to be translated + * @param string $domain Domain where format is stored + * @return mixed translated format string if only value or array of translated strings for corresponding format. + * @access private + */ + function __translateTime($format, $domain) { + if (!empty($this->__domains['LC_TIME'][$this->__lang][$domain][$format])) { + if (($trans = $this->__domains[$this->category][$this->__lang][$domain][$format])) { + return $trans; + } + } + return $format; + } + +/** + * Object destructor + * + * Write cache file if changes have been made to the $__map or $__paths + * @access private + */ + function __destruct() { + if ($this->__cache) { + Cache::write($this->domain, array_filter($this->__domains), '_cake_core_'); + } + } +} diff --git a/cake/libs/.svn/text-base/inflector.php.svn-base b/cake/libs/.svn/text-base/inflector.php.svn-base new file mode 100644 index 0000000..dc0f78f --- /dev/null +++ b/cake/libs/.svn/text-base/inflector.php.svn-base @@ -0,0 +1,626 @@ + array( + '/(s)tatus$/i' => '\1\2tatuses', + '/(quiz)$/i' => '\1zes', + '/^(ox)$/i' => '\1\2en', + '/([m|l])ouse$/i' => '\1ice', + '/(matr|vert|ind)(ix|ex)$/i' => '\1ices', + '/(x|ch|ss|sh)$/i' => '\1es', + '/([^aeiouy]|qu)y$/i' => '\1ies', + '/(hive)$/i' => '\1s', + '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', + '/sis$/i' => 'ses', + '/([ti])um$/i' => '\1a', + '/(p)erson$/i' => '\1eople', + '/(m)an$/i' => '\1en', + '/(c)hild$/i' => '\1hildren', + '/(buffal|tomat)o$/i' => '\1\2oes', + '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i', + '/us$/' => 'uses', + '/(alias)$/i' => '\1es', + '/(ax|cris|test)is$/i' => '\1es', + '/s$/' => 's', + '/^$/' => '', + '/$/' => 's', + ), + 'uninflected' => array( + '.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*sheep', 'people' + ), + 'irregular' => array( + 'atlas' => 'atlases', + 'beef' => 'beefs', + 'brother' => 'brothers', + 'child' => 'children', + 'corpus' => 'corpuses', + 'cow' => 'cows', + 'ganglion' => 'ganglions', + 'genie' => 'genies', + 'genus' => 'genera', + 'graffito' => 'graffiti', + 'hoof' => 'hoofs', + 'loaf' => 'loaves', + 'man' => 'men', + 'money' => 'monies', + 'mongoose' => 'mongooses', + 'move' => 'moves', + 'mythos' => 'mythoi', + 'niche' => 'niches', + 'numen' => 'numina', + 'occiput' => 'occiputs', + 'octopus' => 'octopuses', + 'opus' => 'opuses', + 'ox' => 'oxen', + 'penis' => 'penises', + 'person' => 'people', + 'sex' => 'sexes', + 'soliloquy' => 'soliloquies', + 'testis' => 'testes', + 'trilby' => 'trilbys', + 'turf' => 'turfs' + ) + ); + +/** + * Singular inflector rules + * + * @var array + * @access protected + */ + var $_singular = array( + 'rules' => array( + '/(s)tatuses$/i' => '\1\2tatus', + '/^(.*)(menu)s$/i' => '\1\2', + '/(quiz)zes$/i' => '\\1', + '/(matr)ices$/i' => '\1ix', + '/(vert|ind)ices$/i' => '\1ex', + '/^(ox)en/i' => '\1', + '/(alias)(es)*$/i' => '\1', + '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us', + '/([ftw]ax)es/i' => '\1', + '/(cris|ax|test)es$/i' => '\1is', + '/(shoe|slave)s$/i' => '\1', + '/(o)es$/i' => '\1', + '/ouses$/' => 'ouse', + '/([^a])uses$/' => '\1us', + '/([m|l])ice$/i' => '\1ouse', + '/(x|ch|ss|sh)es$/i' => '\1', + '/(m)ovies$/i' => '\1\2ovie', + '/(s)eries$/i' => '\1\2eries', + '/([^aeiouy]|qu)ies$/i' => '\1y', + '/([lr])ves$/i' => '\1f', + '/(tive)s$/i' => '\1', + '/(hive)s$/i' => '\1', + '/(drive)s$/i' => '\1', + '/([^fo])ves$/i' => '\1fe', + '/(^analy)ses$/i' => '\1sis', + '/(analy|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', + '/([ti])a$/i' => '\1um', + '/(p)eople$/i' => '\1\2erson', + '/(m)en$/i' => '\1an', + '/(c)hildren$/i' => '\1\2hild', + '/(n)ews$/i' => '\1\2ews', + '/eaus$/' => 'eau', + '/^(.*us)$/' => '\\1', + '/s$/i' => '' + ), + 'uninflected' => array( + '.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*sheep', '.*ss' + ), + 'irregular' => array( + 'waves' => 'wave' + ) + ); + +/** + * Words that should not be inflected + * + * @var array + * @access protected + */ + var $_uninflected = array( + 'Amoyese', 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus', + 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'Congoese', 'contretemps', 'corps', + 'debris', 'diabetes', 'djinn', 'eland', 'elk', 'equipment', 'Faroese', 'flounder', + 'Foochowese', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti', + 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', + 'jackanapes', 'Kiplingese', 'Kongoese', 'Lucchese', 'mackerel', 'Maltese', 'media', + 'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', + 'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese', + 'proceedings', 'rabies', 'rice', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors', + 'sea[- ]bass', 'series', 'Shavese', 'shears', 'siemens', 'species', 'swine', 'testes', + 'trousers', 'trout','tuna', 'Vermontese', 'Wenchowese', 'whiting', 'wildebeest', + 'Yengeese' + ); + +/** + * Default map of accented and special characters to ASCII characters + * + * @var array + * @access protected + */ + var $_transliteration = array( + '/ä|æ|ǽ/' => 'ae', + '/ö|œ/' => 'oe', + '/ü/' => 'ue', + '/Ä/' => 'Ae', + '/Ü/' => 'Ue', + '/Ö/' => 'Oe', + '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A', + '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a', + '/Ç|Ć|Ĉ|Ċ|Č/' => 'C', + '/ç|ć|ĉ|ċ|č/' => 'c', + '/Ð|Ď|Đ/' => 'D', + '/ð|ď|đ/' => 'd', + '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E', + '/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e', + '/Ĝ|Ğ|Ġ|Ģ/' => 'G', + '/ĝ|ğ|ġ|ģ/' => 'g', + '/Ĥ|Ħ/' => 'H', + '/ĥ|ħ/' => 'h', + '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I', + '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i', + '/Ĵ/' => 'J', + '/ĵ/' => 'j', + '/Ķ/' => 'K', + '/ķ/' => 'k', + '/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L', + '/ĺ|ļ|ľ|ŀ|ł/' => 'l', + '/Ñ|Ń|Ņ|Ň/' => 'N', + '/ñ|ń|ņ|ň|ʼn/' => 'n', + '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O', + '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o', + '/Ŕ|Ŗ|Ř/' => 'R', + '/ŕ|ŗ|ř/' => 'r', + '/Ś|Ŝ|Ş|Š/' => 'S', + '/ś|ŝ|ş|š|ſ/' => 's', + '/Ţ|Ť|Ŧ/' => 'T', + '/ţ|ť|ŧ/' => 't', + '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U', + '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u', + '/Ý|Ÿ|Ŷ/' => 'Y', + '/ý|ÿ|ŷ/' => 'y', + '/Ŵ/' => 'W', + '/ŵ/' => 'w', + '/Ź|Ż|Ž/' => 'Z', + '/ź|ż|ž/' => 'z', + '/Æ|Ǽ/' => 'AE', + '/ß/'=> 'ss', + '/IJ/' => 'IJ', + '/ij/' => 'ij', + '/Œ/' => 'OE', + '/ƒ/' => 'f' + ); + +/** + * Cached array identity map of pluralized words. + * + * @var array + * @access protected + */ + var $_pluralized = array(); + +/** + * Cached array identity map of singularized words. + * + * @var array + * @access protected + */ + var $_singularized = array(); + +/** + * Cached Underscore Inflections + * + * @var array + * @access protected + */ + var $_underscore = array(); + +/** + * Cached Camelize Inflections + * + * @var array + * @access protected + */ + var $_camelize = array(); + +/** + * Classify cached inflecctions + * + * @var array + * @access protected + */ + var $_classify = array(); + +/** + * Tablize cached inflections + * + * @var array + * @access protected + */ + var $_tableize = array(); + +/** + * Humanize cached inflections + * + * @var array + * @access protected + */ + var $_humanize = array(); + +/** + * Gets a reference to the Inflector object instance + * + * @return object + * @access public + */ + function &getInstance() { + static $instance = array(); + + if (!$instance) { + $instance[0] =& new Inflector(); + } + return $instance[0]; + } + +/** + * Cache inflected values, and return if already available + * + * @param string $type Inflection type + * @param string $key Original value + * @param string $value Inflected value + * @return string Inflected value, from cache + * @access protected + */ + function _cache($type, $key, $value = false) { + $key = '_' . $key; + $type = '_' . $type; + if ($value !== false) { + $this->{$type}[$key] = $value; + return $value; + } + + if (!isset($this->{$type}[$key])) { + return false; + } + return $this->{$type}[$key]; + } + +/** + * Adds custom inflection $rules, of either 'plural', 'singular' or 'transliteration' $type. + * + * ### Usage: + * + * {{{ + * Inflector::rules('plural', array('/^(inflect)or$/i' => '\1ables')); + * Inflector::rules('plural', array( + * 'rules' => array('/^(inflect)ors$/i' => '\1ables'), + * 'uninflected' => array('dontinflectme'), + * 'irregular' => array('red' => 'redlings') + * )); + * Inflector::rules('transliteration', array('/å/' => 'aa')); + * }}} + * + * @param string $type The type of inflection, either 'plural', 'singular' or 'transliteration' + * @param array $rules Array of rules to be added. + * @param boolean $reset If true, will unset default inflections for all + * new rules that are being defined in $rules. + * @access public + * @return void + * @static + */ + function rules($type, $rules, $reset = false) { + $_this =& Inflector::getInstance(); + $var = '_'.$type; + + switch ($type) { + case 'transliteration': + if ($reset) { + $_this->_transliteration = $rules; + } else { + $_this->_transliteration = $rules + $_this->_transliteration; + } + break; + + default: + foreach ($rules as $rule => $pattern) { + if (is_array($pattern)) { + if ($reset) { + $_this->{$var}[$rule] = $pattern; + } else { + $_this->{$var}[$rule] = array_merge($pattern, $_this->{$var}[$rule]); + } + unset($rules[$rule], $_this->{$var}['cache' . ucfirst($rule)]); + if (isset($_this->{$var}['merged'][$rule])) { + unset($_this->{$var}['merged'][$rule]); + } + if ($type === 'plural') { + $_this->_pluralized = $_this->_tableize = array(); + } elseif ($type === 'singular') { + $_this->_singularized = array(); + } + } + } + $_this->{$var}['rules'] = array_merge($rules, $_this->{$var}['rules']); + break; + } + } + +/** + * Return $word in plural form. + * + * @param string $word Word in singular + * @return string Word in plural + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function pluralize($word) { + $_this =& Inflector::getInstance(); + + if (isset($_this->_pluralized[$word])) { + return $_this->_pluralized[$word]; + } + + if (!isset($_this->_plural['merged']['irregular'])) { + $_this->_plural['merged']['irregular'] = $_this->_plural['irregular']; + } + + if (!isset($_this->plural['merged']['uninflected'])) { + $_this->_plural['merged']['uninflected'] = array_merge($_this->_plural['uninflected'], $_this->_uninflected); + } + + if (!isset($_this->_plural['cacheUninflected']) || !isset($_this->_plural['cacheIrregular'])) { + $_this->_plural['cacheUninflected'] = '(?:' . implode('|', $_this->_plural['merged']['uninflected']) . ')'; + $_this->_plural['cacheIrregular'] = '(?:' . implode('|', array_keys($_this->_plural['merged']['irregular'])) . ')'; + } + + if (preg_match('/(.*)\\b(' . $_this->_plural['cacheIrregular'] . ')$/i', $word, $regs)) { + $_this->_pluralized[$word] = $regs[1] . substr($word, 0, 1) . substr($_this->_plural['merged']['irregular'][strtolower($regs[2])], 1); + return $_this->_pluralized[$word]; + } + + if (preg_match('/^(' . $_this->_plural['cacheUninflected'] . ')$/i', $word, $regs)) { + $_this->_pluralized[$word] = $word; + return $word; + } + + foreach ($_this->_plural['rules'] as $rule => $replacement) { + if (preg_match($rule, $word)) { + $_this->_pluralized[$word] = preg_replace($rule, $replacement, $word); + return $_this->_pluralized[$word]; + } + } + } + +/** + * Return $word in singular form. + * + * @param string $word Word in plural + * @return string Word in singular + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function singularize($word) { + $_this =& Inflector::getInstance(); + + if (isset($_this->_singularized[$word])) { + return $_this->_singularized[$word]; + } + + if (!isset($_this->_singular['merged']['uninflected'])) { + $_this->_singular['merged']['uninflected'] = array_merge($_this->_singular['uninflected'], $_this->_uninflected); + } + + if (!isset($_this->_singular['merged']['irregular'])) { + $_this->_singular['merged']['irregular'] = array_merge($_this->_singular['irregular'], array_flip($_this->_plural['irregular'])); + } + + if (!isset($_this->_singular['cacheUninflected']) || !isset($_this->_singular['cacheIrregular'])) { + $_this->_singular['cacheUninflected'] = '(?:' . join( '|', $_this->_singular['merged']['uninflected']) . ')'; + $_this->_singular['cacheIrregular'] = '(?:' . join( '|', array_keys($_this->_singular['merged']['irregular'])) . ')'; + } + + if (preg_match('/(.*)\\b(' . $_this->_singular['cacheIrregular'] . ')$/i', $word, $regs)) { + $_this->_singularized[$word] = $regs[1] . substr($word, 0, 1) . substr($_this->_singular['merged']['irregular'][strtolower($regs[2])], 1); + return $_this->_singularized[$word]; + } + + if (preg_match('/^(' . $_this->_singular['cacheUninflected'] . ')$/i', $word, $regs)) { + $_this->_singularized[$word] = $word; + return $word; + } + + foreach ($_this->_singular['rules'] as $rule => $replacement) { + if (preg_match($rule, $word)) { + $_this->_singularized[$word] = preg_replace($rule, $replacement, $word); + return $_this->_singularized[$word]; + } + } + $_this->_singularized[$word] = $word; + return $word; + } + +/** + * Returns the given lower_case_and_underscored_word as a CamelCased word. + * + * @param string $lower_case_and_underscored_word Word to camelize + * @return string Camelized word. LikeThis. + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function camelize($lowerCaseAndUnderscoredWord) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $lowerCaseAndUnderscoredWord))) { + $result = str_replace(' ', '', Inflector::humanize($lowerCaseAndUnderscoredWord)); + $_this->_cache(__FUNCTION__, $lowerCaseAndUnderscoredWord, $result); + } + return $result; + } + +/** + * Returns the given camelCasedWord as an underscored_word. + * + * @param string $camelCasedWord Camel-cased word to be "underscorized" + * @return string Underscore-syntaxed version of the $camelCasedWord + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function underscore($camelCasedWord) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $camelCasedWord))) { + $result = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $camelCasedWord)); + $_this->_cache(__FUNCTION__, $camelCasedWord, $result); + } + return $result; + } + +/** + * Returns the given underscored_word_group as a Human Readable Word Group. + * (Underscores are replaced by spaces and capitalized following words.) + * + * @param string $lower_case_and_underscored_word String to be made more readable + * @return string Human-readable string + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function humanize($lowerCaseAndUnderscoredWord) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $lowerCaseAndUnderscoredWord))) { + $result = ucwords(str_replace('_', ' ', $lowerCaseAndUnderscoredWord)); + $_this->_cache(__FUNCTION__, $lowerCaseAndUnderscoredWord, $result); + } + return $result; + } + +/** + * Returns corresponding table name for given model $className. ("people" for the model class "Person"). + * + * @param string $className Name of class to get database table name for + * @return string Name of the database table for given class + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function tableize($className) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $className))) { + $result = Inflector::pluralize(Inflector::underscore($className)); + $_this->_cache(__FUNCTION__, $className, $result); + } + return $result; + } + +/** + * Returns Cake model class name ("Person" for the database table "people".) for given database table. + * + * @param string $tableName Name of database table to get class name for + * @return string Class name + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function classify($tableName) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $tableName))) { + $result = Inflector::camelize(Inflector::singularize($tableName)); + $_this->_cache(__FUNCTION__, $tableName, $result); + } + return $result; + } + +/** + * Returns camelBacked version of an underscored string. + * + * @param string $string + * @return string in variable form + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function variable($string) { + $_this =& Inflector::getInstance(); + if (!($result = $_this->_cache(__FUNCTION__, $string))) { + $string2 = Inflector::camelize(Inflector::underscore($string)); + $replace = strtolower(substr($string2, 0, 1)); + $result = preg_replace('/\\w/', $replace, $string2, 1); + $_this->_cache(__FUNCTION__, $string, $result); + } + return $result; + } + +/** + * Returns a string with all spaces converted to underscores (by default), accented + * characters converted to non-accented characters, and non word characters removed. + * + * @param string $string the string you want to slug + * @param string $replacement will replace keys in map + * @param array $map extra elements to map to the replacement + * @deprecated $map param will be removed in future versions. Use Inflector::rules() instead + * @return string + * @access public + * @static + * @link http://book.cakephp.org/view/1479/Class-methods + */ + function slug($string, $replacement = '_', $map = array()) { + $_this =& Inflector::getInstance(); + + if (is_array($replacement)) { + $map = $replacement; + $replacement = '_'; + } + $quotedReplacement = preg_quote($replacement, '/'); + + $merge = array( + '/[^\s\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ', + '/\\s+/' => $replacement, + sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '', + ); + + $map = $map + $_this->_transliteration + $merge; + return preg_replace(array_keys($map), array_values($map), $string); + } +} diff --git a/cake/libs/.svn/text-base/l10n.php.svn-base b/cake/libs/.svn/text-base/l10n.php.svn-base new file mode 100644 index 0000000..801112e --- /dev/null +++ b/cake/libs/.svn/text-base/l10n.php.svn-base @@ -0,0 +1,488 @@ + 'af', + /* Albanian */ 'alb' => 'sq', + /* Arabic */ 'ara' => 'ar', + /* Armenian - Armenia */ 'hye' => 'hy', + /* Basque */ 'baq' => 'eu', + /* Bosnian */ 'bos' => 'bs', + /* Bulgarian */ 'bul' => 'bg', + /* Byelorussian */ 'bel' => 'be', + /* Catalan */ 'cat' => 'ca', + /* Chinese */ 'chi' => 'zh', + /* Chinese */ 'zho' => 'zh', + /* Croatian */ 'hrv' => 'hr', + /* Czech */ 'cze' => 'cs', + /* Czech */ 'ces' => 'cs', + /* Danish */ 'dan' => 'da', + /* Dutch (Standard) */ 'dut' => 'nl', + /* Dutch (Standard) */ 'nld' => 'nl', + /* English */ 'eng' => 'en', + /* Estonian */ 'est' => 'et', + /* Faeroese */ 'fao' => 'fo', + /* Farsi */ 'fas' => 'fa', + /* Farsi */ 'per' => 'fa', + /* Finnish */ 'fin' => 'fi', + /* French (Standard) */ 'fre' => 'fr', + /* French (Standard) */ 'fra' => 'fr', + /* Gaelic (Scots) */ 'gla' => 'gd', + /* Galician */ 'glg' => 'gl', + /* German (Standard) */ 'deu' => 'de', + /* German (Standard) */ 'ger' => 'de', + /* Greek */ 'gre' => 'el', + /* Greek */ 'ell' => 'el', + /* Hebrew */ 'heb' => 'he', + /* Hindi */ 'hin' => 'hi', + /* Hungarian */ 'hun' => 'hu', + /* Icelandic */ 'ice' => 'is', + /* Icelandic */ 'isl' => 'is', + /* Indonesian */ 'ind' => 'id', + /* Irish */ 'gle' => 'ga', + /* Italian */ 'ita' => 'it', + /* Japanese */ 'jpn' => 'ja', + /* Korean */ 'kor' => 'ko', + /* Latvian */ 'lav' => 'lv', + /* Lithuanian */ 'lit' => 'lt', + /* Macedonian */ 'mac' => 'mk', + /* Macedonian */ 'mkd' => 'mk', + /* Malaysian */ 'may' => 'ms', + /* Malaysian */ 'msa' => 'ms', + /* Maltese */ 'mlt' => 'mt', + /* Norwegian */ 'nor' => 'no', + /* Norwegian Bokmal */ 'nob' => 'nb', + /* Norwegian Nynorsk */ 'nno' => 'nn', + /* Polish */ 'pol' => 'pl', + /* Portuguese (Portugal) */ 'por' => 'pt', + /* Rhaeto-Romanic */ 'roh' => 'rm', + /* Romanian */ 'rum' => 'ro', + /* Romanian */ 'ron' => 'ro', + /* Russian */ 'rus' => 'ru', + /* Sami (Lappish) */ 'smi' => 'sz', + /* Serbian */ 'scc' => 'sr', + /* Serbian */ 'srp' => 'sr', + /* Slovak */ 'slo' => 'sk', + /* Slovak */ 'slk' => 'sk', + /* Slovenian */ 'slv' => 'sl', + /* Sorbian */ 'wen' => 'sb', + /* Spanish (Spain - Traditional) */ 'spa' => 'es', + /* Swedish */ 'swe' => 'sv', + /* Thai */ 'tha' => 'th', + /* Tsonga */ 'tso' => 'ts', + /* Tswana */ 'tsn' => 'tn', + /* Turkish */ 'tur' => 'tr', + /* Ukrainian */ 'ukr' => 'uk', + /* Urdu */ 'urd' => 'ur', + /* Venda */ 'ven' => 've', + /* Vietnamese */ 'vie' => 'vi', + /* Welsh */ 'cym' => 'cy', + /* Xhosa */ 'xho' => 'xh', + /* Yiddish */ 'yid' => 'yi', + /* Zulu */ 'zul' => 'zu'); + +/** + * HTTP_ACCEPT_LANGUAGE catalog + * + * holds all information related to a language + * + * @var array + * @access private + */ + var $__l10nCatalog = array('af' => array('language' => 'Afrikaans', 'locale' => 'afr', 'localeFallback' => 'afr', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ar' => array('language' => 'Arabic', 'locale' => 'ara', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-ae' => array('language' => 'Arabic (U.A.E.)', 'locale' => 'ar_ae', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-bh' => array('language' => 'Arabic (Bahrain)', 'locale' => 'ar_bh', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-dz' => array('language' => 'Arabic (Algeria)', 'locale' => 'ar_dz', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-eg' => array('language' => 'Arabic (Egypt)', 'locale' => 'ar_eg', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-iq' => array('language' => 'Arabic (Iraq)', 'locale' => 'ar_iq', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-jo' => array('language' => 'Arabic (Jordan)', 'locale' => 'ar_jo', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-kw' => array('language' => 'Arabic (Kuwait)', 'locale' => 'ar_kw', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-lb' => array('language' => 'Arabic (Lebanon)', 'locale' => 'ar_lb', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-ly' => array('language' => 'Arabic (Libya)', 'locale' => 'ar_ly', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-ma' => array('language' => 'Arabic (Morocco)', 'locale' => 'ar_ma', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-om' => array('language' => 'Arabic (Oman)', 'locale' => 'ar_om', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-qa' => array('language' => 'Arabic (Qatar)', 'locale' => 'ar_qa', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-sa' => array('language' => 'Arabic (Saudi Arabia)', 'locale' => 'ar_sa', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-sy' => array('language' => 'Arabic (Syria)', 'locale' => 'ar_sy', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-tn' => array('language' => 'Arabic (Tunisia)', 'locale' => 'ar_tn', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'ar-ye' => array('language' => 'Arabic (Yemen)', 'locale' => 'ar_ye', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'be' => array('language' => 'Byelorussian', 'locale' => 'bel', 'localeFallback' => 'bel', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'bg' => array('language' => 'Bulgarian', 'locale' => 'bul', 'localeFallback' => 'bul', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'bs' => array('language' => 'Bosnian', 'locale' => 'bos', 'localeFallback' => 'bos', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ca' => array('language' => 'Catalan', 'locale' => 'cat', 'localeFallback' => 'cat', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'cs' => array('language' => 'Czech', 'locale' => 'cze', 'localeFallback' => 'cze', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'da' => array('language' => 'Danish', 'locale' => 'dan', 'localeFallback' => 'dan', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de' => array('language' => 'German (Standard)', 'locale' => 'deu', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de-at' => array('language' => 'German (Austria)', 'locale' => 'de_at', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de-ch' => array('language' => 'German (Swiss)', 'locale' => 'de_ch', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de-de' => array('language' => 'German (Germany)', 'locale' => 'de_de', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de-li' => array('language' => 'German (Liechtenstein)', 'locale' => 'de_li', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'de-lu' => array('language' => 'German (Luxembourg)', 'locale' => 'de_lu', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'e' => array('language' => 'Greek', 'locale' => 'gre', 'localeFallback' => 'gre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'el' => array('language' => 'Greek', 'locale' => 'gre', 'localeFallback' => 'gre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en' => array('language' => 'English', 'locale' => 'eng', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-au' => array('language' => 'English (Australian)', 'locale' => 'en_au', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-bz' => array('language' => 'English (Belize)', 'locale' => 'en_bz', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-ca' => array('language' => 'English (Canadian)', 'locale' => 'en_ca', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-gb' => array('language' => 'English (British)', 'locale' => 'en_gb', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-ie' => array('language' => 'English (Ireland)', 'locale' => 'en_ie', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-jm' => array('language' => 'English (Jamaica)', 'locale' => 'en_jm', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-nz' => array('language' => 'English (New Zealand)', 'locale' => 'en_nz', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-tt' => array('language' => 'English (Trinidad)', 'locale' => 'en_tt', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-us' => array('language' => 'English (United States)', 'locale' => 'en_us', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'en-za' => array('language' => 'English (South Africa)', 'locale' => 'en_za', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es' => array('language' => 'Spanish (Spain - Traditional)', 'locale' => 'spa', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-ar' => array('language' => 'Spanish (Argentina)', 'locale' => 'es_ar', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-bo' => array('language' => 'Spanish (Bolivia)', 'locale' => 'es_bo', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-cl' => array('language' => 'Spanish (Chile)', 'locale' => 'es_cl', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-co' => array('language' => 'Spanish (Colombia)', 'locale' => 'es_co', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-cr' => array('language' => 'Spanish (Costa Rica)', 'locale' => 'es_cr', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-do' => array('language' => 'Spanish (Dominican Republic)', 'locale' => 'es_do', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-ec' => array('language' => 'Spanish (Ecuador)', 'locale' => 'es_ec', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-es' => array('language' => 'Spanish (Spain)', 'locale' => 'es_es', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-gt' => array('language' => 'Spanish (Guatemala)', 'locale' => 'es_gt', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-hn' => array('language' => 'Spanish (Honduras)', 'locale' => 'es_hn', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-mx' => array('language' => 'Spanish (Mexican)', 'locale' => 'es_mx', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-ni' => array('language' => 'Spanish (Nicaragua)', 'locale' => 'es_ni', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-pa' => array('language' => 'Spanish (Panama)', 'locale' => 'es_pa', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-pe' => array('language' => 'Spanish (Peru)', 'locale' => 'es_pe', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-pr' => array('language' => 'Spanish (Puerto Rico)', 'locale' => 'es_pr', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-py' => array('language' => 'Spanish (Paraguay)', 'locale' => 'es_py', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-sv' => array('language' => 'Spanish (El Salvador)', 'locale' => 'es_sv', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-uy' => array('language' => 'Spanish (Uruguay)', 'locale' => 'es_uy', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'es-ve' => array('language' => 'Spanish (Venezuela)', 'locale' => 'es_ve', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'et' => array('language' => 'Estonian', 'locale' => 'est', 'localeFallback' => 'est', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'eu' => array('language' => 'Basque', 'locale' => 'baq', 'localeFallback' => 'baq', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fa' => array('language' => 'Farsi', 'locale' => 'per', 'localeFallback' => 'per', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'fi' => array('language' => 'Finnish', 'locale' => 'fin', 'localeFallback' => 'fin', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fo' => array('language' => 'Faeroese', 'locale' => 'fao', 'localeFallback' => 'fao', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr' => array('language' => 'French (Standard)', 'locale' => 'fre', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr-be' => array('language' => 'French (Belgium)', 'locale' => 'fr_be', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr-ca' => array('language' => 'French (Canadian)', 'locale' => 'fr_ca', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr-ch' => array('language' => 'French (Swiss)', 'locale' => 'fr_ch', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr-fr' => array('language' => 'French (France)', 'locale' => 'fr_fr', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'fr-lu' => array('language' => 'French (Luxembourg)', 'locale' => 'fr_lu', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ga' => array('language' => 'Irish', 'locale' => 'gle', 'localeFallback' => 'gle', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'gd' => array('language' => 'Gaelic (Scots)', 'locale' => 'gla', 'localeFallback' => 'gla', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'gd-ie' => array('language' => 'Gaelic (Irish)', 'locale' => 'gd_ie', 'localeFallback' => 'gla', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'gl' => array('language' => 'Galician', 'locale' => 'glg', 'localeFallback' => 'glg', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'he' => array('language' => 'Hebrew', 'locale' => 'heb', 'localeFallback' => 'heb', 'charset' => 'utf-8', 'direction' => 'rtl'), + 'hi' => array('language' => 'Hindi', 'locale' => 'hin', 'localeFallback' => 'hin', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'hr' => array('language' => 'Croatian', 'locale' => 'hrv', 'localeFallback' => 'hrv', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'hu' => array('language' => 'Hungarian', 'locale' => 'hun', 'localeFallback' => 'hun', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'hy' => array('language' => 'Armenian - Armenia', 'locale' => 'hye', 'localeFallback' => 'hye', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'id' => array('language' => 'Indonesian', 'locale' => 'ind', 'localeFallback' => 'ind', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'in' => array('language' => 'Indonesian', 'locale' => 'ind', 'localeFallback' => 'ind', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'is' => array('language' => 'Icelandic', 'locale' => 'ice', 'localeFallback' => 'ice', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'it' => array('language' => 'Italian', 'locale' => 'ita', 'localeFallback' => 'ita', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'it-ch' => array('language' => 'Italian (Swiss) ', 'locale' => 'it_ch', 'localeFallback' => 'ita', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ja' => array('language' => 'Japanese', 'locale' => 'jpn', 'localeFallback' => 'jpn', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ko' => array('language' => 'Korean', 'locale' => 'kor', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), + 'ko-kp' => array('language' => 'Korea (North)', 'locale' => 'ko_kp', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), + 'ko-kr' => array('language' => 'Korea (South)', 'locale' => 'ko_kr', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), + 'koi8-r' => array('language' => 'Russian', 'locale' => 'koi8_r', 'localeFallback' => 'rus', 'charset' => 'koi8-r', 'direction' => 'ltr'), + 'lt' => array('language' => 'Lithuanian', 'locale' => 'lit', 'localeFallback' => 'lit', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'lv' => array('language' => 'Latvian', 'locale' => 'lav', 'localeFallback' => 'lav', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'mk' => array('language' => 'FYRO Macedonian', 'locale' => 'mk', 'localeFallback' => 'mac', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'mk-mk' => array('language' => 'Macedonian', 'locale' => 'mk_mk', 'localeFallback' => 'mac', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ms' => array('language' => 'Malaysian', 'locale' => 'may', 'localeFallback' => 'may', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'mt' => array('language' => 'Maltese', 'locale' => 'mlt', 'localeFallback' => 'mlt', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'n' => array('language' => 'Dutch (Standard)', 'locale' => 'dut', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'nb' => array('language' => 'Norwegian Bokmal', 'locale' => 'nob', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'nl' => array('language' => 'Dutch (Standard)', 'locale' => 'dut', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'nl-be' => array('language' => 'Dutch (Belgium)', 'locale' => 'nl_be', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'nn' => array('language' => 'Norwegian Nynorsk', 'locale' => 'nno', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'no' => array('language' => 'Norwegian', 'locale' => 'nor', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'p' => array('language' => 'Polish', 'locale' => 'pol', 'localeFallback' => 'pol', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'pl' => array('language' => 'Polish', 'locale' => 'pol', 'localeFallback' => 'pol', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'pt' => array('language' => 'Portuguese (Portugal)', 'locale' => 'por', 'localeFallback' => 'por', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'pt-br' => array('language' => 'Portuguese (Brazil)', 'locale' => 'pt_br', 'localeFallback' => 'por', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'rm' => array('language' => 'Rhaeto-Romanic', 'locale' => 'roh', 'localeFallback' => 'roh', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ro' => array('language' => 'Romanian', 'locale' => 'rum', 'localeFallback' => 'rum', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ro-mo' => array('language' => 'Romanian (Moldavia)', 'locale' => 'ro_mo', 'localeFallback' => 'rum', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ru' => array('language' => 'Russian', 'locale' => 'rus', 'localeFallback' => 'rus', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ru-mo' => array('language' => 'Russian (Moldavia)', 'locale' => 'ru_mo', 'localeFallback' => 'rus', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sb' => array('language' => 'Sorbian', 'locale' => 'wen', 'localeFallback' => 'wen', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sk' => array('language' => 'Slovak', 'locale' => 'slo', 'localeFallback' => 'slo', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sl' => array('language' => 'Slovenian', 'locale' => 'slv', 'localeFallback' => 'slv', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sq' => array('language' => 'Albanian', 'locale' => 'alb', 'localeFallback' => 'alb', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sr' => array('language' => 'Serbian', 'locale' => 'scc', 'localeFallback' => 'scc', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sv' => array('language' => 'Swedish', 'locale' => 'swe', 'localeFallback' => 'swe', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sv-fi' => array('language' => 'Swedish (Finland)', 'locale' => 'sv_fi', 'localeFallback' => 'swe', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sx' => array('language' => 'Sutu', 'locale' => 'sx', 'localeFallback' => 'sx', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'sz' => array('language' => 'Sami (Lappish)', 'locale' => 'smi', 'localeFallback' => 'smi', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'th' => array('language' => 'Thai', 'locale' => 'tha', 'localeFallback' => 'tha', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'tn' => array('language' => 'Tswana', 'locale' => 'tsn', 'localeFallback' => 'tsn', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'tr' => array('language' => 'Turkish', 'locale' => 'tur', 'localeFallback' => 'tur', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ts' => array('language' => 'Tsonga', 'locale' => 'tso', 'localeFallback' => 'tso', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'uk' => array('language' => 'Ukrainian', 'locale' => 'ukr', 'localeFallback' => 'ukr', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'ur' => array('language' => 'Urdu', 'locale' => 'urd', 'localeFallback' => 'urd', 'charset' => 'utf-8', 'direction' => 'rtl'), + 've' => array('language' => 'Venda', 'locale' => 'ven', 'localeFallback' => 'ven', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'vi' => array('language' => 'Vietnamese', 'locale' => 'vie', 'localeFallback' => 'vie', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'cy' => array('language' => 'Welsh', 'locale' => 'cym', 'localeFallback' => 'cym', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'xh' => array('language' => 'Xhosa', 'locale' => 'xho', 'localeFallback' => 'xho', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'yi' => array('language' => 'Yiddish', 'locale' => 'yid', 'localeFallback' => 'yid', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'zh' => array('language' => 'Chinese', 'locale' => 'chi', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'zh-cn' => array('language' => 'Chinese (PRC)', 'locale' => 'zh_cn', 'localeFallback' => 'chi', 'charset' => 'GB2312', 'direction' => 'ltr'), + 'zh-hk' => array('language' => 'Chinese (Hong Kong)', 'locale' => 'zh_hk', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'zh-sg' => array('language' => 'Chinese (Singapore)', 'locale' => 'zh_sg', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'zh-tw' => array('language' => 'Chinese (Taiwan)', 'locale' => 'zh_tw', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), + 'zu' => array('language' => 'Zulu', 'locale' => 'zul', 'localeFallback' => 'zul', 'charset' => 'utf-8', 'direction' => 'ltr')); + +/** + * Class constructor + */ + function __construct() { + if (defined('DEFAULT_LANGUAGE')) { + $this->default = DEFAULT_LANGUAGE; + } + parent::__construct(); + } + +/** + * Gets the settings for $language. + * If $language is null it attempt to get settings from L10n::__autoLanguage(); if this fails + * the method will get the settings from L10n::__setLanguage(); + * + * @param string $language Language (if null will use DEFAULT_LANGUAGE if defined) + * @access public + */ + function get($language = null) { + if ($language !== null) { + return $this->__setLanguage($language); + } elseif ($this->__autoLanguage() === false) { + return $this->__setLanguage(); + } + } + +/** + * Sets the class vars to correct values for $language. + * If $language is null it will use the DEFAULT_LANGUAGE if defined + * + * @param string $language Language (if null will use DEFAULT_LANGUAGE if defined) + * @access private + */ + function __setLanguage($language = null) { + $langKey = null; + if ($language !== null && isset($this->__l10nMap[$language]) && isset($this->__l10nCatalog[$this->__l10nMap[$language]])) { + $langKey = $this->__l10nMap[$language]; + } else if ($language !== null && isset($this->__l10nCatalog[$language])) { + $langKey = $language; + } else if (defined('DEFAULT_LANGUAGE')) { + $langKey = $language = DEFAULT_LANGUAGE; + } + + if ($langKey !== null && isset($this->__l10nCatalog[$langKey])) { + $this->language = $this->__l10nCatalog[$langKey]['language']; + $this->languagePath = array( + $this->__l10nCatalog[$langKey]['locale'], + $this->__l10nCatalog[$langKey]['localeFallback'] + ); + $this->lang = $language; + $this->locale = $this->__l10nCatalog[$langKey]['locale']; + $this->charset = $this->__l10nCatalog[$langKey]['charset']; + $this->direction = $this->__l10nCatalog[$langKey]['direction']; + } else { + $this->lang = $language; + $this->languagePath = array($language); + } + + if ($this->default) { + if (isset($this->__l10nMap[$this->default]) && isset($this->__l10nCatalog[$this->__l10nMap[$this->default]])) { + $this->languagePath[] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; + } else if (isset($this->__l10nCatalog[$this->default])) { + $this->languagePath[] = $this->__l10nCatalog[$this->default]['localeFallback']; + } + } + $this->found = true; + + if (Configure::read('Config.language') === null) { + Configure::write('Config.language', $this->lang); + } + + if ($language) { + return $language; + } + } + +/** + * Attempts to find the locale settings based on the HTTP_ACCEPT_LANGUAGE variable + * + * @return boolean Success + * @access private + */ + function __autoLanguage() { + $_detectableLanguages = preg_split('/[,;]/', env('HTTP_ACCEPT_LANGUAGE')); + foreach ($_detectableLanguages as $key => $langKey) { + $langKey = strtolower($langKey); + if (strpos($langKey, '_') !== false) { + $langKey = str_replace('_', '-', $langKey); + } + + if (isset($this->__l10nCatalog[$langKey])) { + $this->__setLanguage($langKey); + return true; + } else if (strpos($langKey, '-') !== false) { + $langKey = substr($langKey, 0, 2); + if (isset($this->__l10nCatalog[$langKey])) { + $this->__setLanguage($langKey); + return true; + } + } + } + return false; + } + +/** + * Attempts to find locale for language, or language for locale + * + * @param mixed $mixed 2/3 char string (language/locale), array of those strings, or null + * @return mixed string language/locale, array of those values, whole map as an array, + * or false when language/locale doesn't exist + * @access public + */ + function map($mixed = null) { + if (is_array($mixed)) { + $result = array(); + foreach ($mixed as $_mixed) { + if ($_result = $this->map($_mixed)) { + $result[$_mixed] = $_result; + } + } + return $result; + } else if (is_string($mixed)) { + if (strlen($mixed) === 2 && in_array($mixed, $this->__l10nMap)) { + return array_search($mixed, $this->__l10nMap); + } else if (isset($this->__l10nMap[$mixed])) { + return $this->__l10nMap[$mixed]; + } + return false; + } + return $this->__l10nMap; + } + +/** + * Attempts to find catalog record for requested language + * + * @param mixed $language string requested language, array of requested languages, or null for whole catalog + * @return mixed array catalog record for requested language, array of catalog records, whole catalog, + * or false when language doesn't exist + * @access public + */ + function catalog($language = null) { + if (is_array($language)) { + $result = array(); + foreach ($language as $_language) { + if ($_result = $this->catalog($_language)) { + $result[$_language] = $_result; + } + } + return $result; + } else if (is_string($language)) { + if (isset($this->__l10nCatalog[$language])) { + return $this->__l10nCatalog[$language]; + } else if (isset($this->__l10nMap[$language]) && isset($this->__l10nCatalog[$this->__l10nMap[$language]])) { + return $this->__l10nCatalog[$this->__l10nMap[$language]]; + } + return false; + } + return $this->__l10nCatalog; + } +} diff --git a/cake/libs/.svn/text-base/magic_db.php.svn-base b/cake/libs/.svn/text-base/magic_db.php.svn-base new file mode 100644 index 0000000..0c94426 --- /dev/null +++ b/cake/libs/.svn/text-base/magic_db.php.svn-base @@ -0,0 +1,302 @@ +exists()) { + return false; + } + if ($File->ext() == 'php') { + include($File->pwd()); + $data = $magicDb; + } else { + // @TODO: Needs test coverage + $data = $File->read(); + } + } + + $magicDb = $this->toArray($data); + if (!$this->validates($magicDb)) { + return false; + } + return !!($this->db = $magicDb); + } + +/** + * Parses a MagicDb $data string into an array or returns the current MagicDb instance as an array + * + * @param string $data A MagicDb string to turn into an array + * @return array A parsed MagicDb array or an empty array if the $data param was invalid. Returns the db property if $data is not set. + * @access public + */ + function toArray($data = null) { + if (is_array($data)) { + return $data; + } + if ($data === null) { + return $this->db; + } + + if (strpos($data, '# FILE_ID DB') !== 0) { + return array(); + } + + $lines = explode("\r\n", $data); + $db = array(); + + $validHeader = count($lines) > 3 + && preg_match('/^# Date:([0-9]{4}-[0-9]{2}-[0-9]{2})$/', $lines[1], $date) + && preg_match('/^# Source:(.+)$/', $lines[2], $source) + && strlen($lines[3]) == 0; + if (!$validHeader) { + return $db; + } + + $db = array('header' => array('Date' => $date[1], 'Source' => $source[1]), 'database' => array()); + $lines = array_splice($lines, 3); + + $format = array(); + while (!empty($lines)) { + $line = array_shift($lines); + if (isset($line[0]) && $line[0] == '#' || empty($line)) { + continue; + } + + $columns = explode("\t", $line); + if (in_array($columns[0]{0}, array('>', '&'))) { + $format[] = $columns; + } elseif (!empty($format)) { + $db['database'][] = $format; + $format = array($columns); + } else { + $format = array($columns); + } + } + + return $db; + } + +/** + * Returns true if the MagicDb instance or the passed $magicDb is valid + * + * @param mixed $magicDb A $magicDb string / array to validate (optional) + * @return boolean True if the $magicDb / instance db validates, false if not + * @access public + */ + function validates($magicDb = null) { + if (is_null($magicDb)) { + $magicDb = $this->db; + } elseif (!is_array($magicDb)) { + $magicDb = $this->toArray($magicDb); + } + + return isset($magicDb['header'], $magicDb['database']) && is_array($magicDb['header']) && is_array($magicDb['database']); + } + +/** + * Analyzes a given $file using the currently loaded MagicDb information based on the desired $options + * + * @param string $file Absolute path to the file to analyze + * @param array $options TBT + * @return mixed + * @access public + */ + function analyze($file, $options = array()) { + if (!is_string($file)) { + return false; + } + + $matches = array(); + $MagicFileResource =& new MagicFileResource($file); + foreach ($this->db['database'] as $format) { + $magic = $format[0]; + $match = $MagicFileResource->test($magic); + if ($match === false) { + continue; + } + $matches[] = $magic; + } + + return $matches; + } +} + +/** + * undocumented class + * + * @package cake.tests + * @subpackage cake.tests.cases.libs + */ +class MagicFileResource extends Object{ + +/** + * undocumented variable + * + * @var unknown + * @access public + */ + var $resource = null; + +/** + * undocumented variable + * + * @var unknown + * @access public + */ + var $offset = 0; + +/** + * undocumented function + * + * @param unknown $file + * @return void + * @access public + */ + function __construct($file) { + if (file_exists($file)) { + $this->resource =& new File($file); + } else { + $this->resource = $file; + } + } + +/** + * undocumented function + * + * @param unknown $magic + * @return void + * @access public + */ + function test($magic) { + $offset = null; + $type = null; + $expected = null; + $comment = null; + if (isset($magic[0])) { + $offset = $magic[0]; + } + if (isset($magic[1])) { + $type = $magic[1]; + } + if (isset($magic[2])) { + $expected = $magic[2]; + } + if (isset($magic[3])) { + $comment = $magic[3]; + } + $val = $this->extract($offset, $type, $expected); + return $val == $expected; + } + +/** + * undocumented function + * + * @param unknown $type + * @param unknown $length + * @return void + * @access public + */ + function read($length = null) { + if (!is_object($this->resource)) { + return substr($this->resource, $this->offset, $length); + } + return $this->resource->read($length); + } + +/** + * undocumented function + * + * @param unknown $type + * @param unknown $expected + * @return void + * @access public + */ + function extract($offset, $type, $expected) { + switch ($type) { + case 'string': + $this->offset($offset); + $val = $this->read(strlen($expected)); + if ($val === $expected) { + return true; + } + break; + } + } + +/** + * undocumented function + * + * @param unknown $offset + * @param unknown $whence + * @return void + * @access public + */ + function offset($offset = null) { + if (is_null($offset)) { + if (!is_object($this->resource)) { + return $this->offset; + } + return $this->offset; + } + + if (!ctype_digit($offset)) { + return false; + } + if (is_object($this->resource)) { + $this->resource->offset($offset); + } else { + $this->offset = $offset; + } + } +} diff --git a/cake/libs/.svn/text-base/multibyte.php.svn-base b/cake/libs/.svn/text-base/multibyte.php.svn-base new file mode 100644 index 0000000..71a4ca6 --- /dev/null +++ b/cake/libs/.svn/text-base/multibyte.php.svn-base @@ -0,0 +1,1172 @@ + 1) { + $matches[$needle[0]] = $matches[$needle[0]] - 1; + } elseif ($i === $needleCount) { + $found = true; + } + } + + if (!$found && isset($haystack[$position])) { + $parts[] = $haystack[$position]; + unset($haystack[$position]); + } + $position++; + } + + if ($found && $part && !empty($parts)) { + return Multibyte::ascii($parts); + } elseif ($found && !empty($haystack)) { + return Multibyte::ascii($haystack); + } + return false; + } + +/** + * Finds the last occurrence of a character in a string within another, case insensitive. + * + * @param string $haystack The string from which to get the last occurrence of $needle. + * @param string $needle The string to find in $haystack. + * @param boolean $part Determines which portion of $haystack this function returns. + * If set to true, it returns all of $haystack from the beginning to the last occurrence of $needle. + * If set to false, it returns all of $haystack from the last occurrence of $needle to the end, + * Default value is false. + * @return string|boolean The portion of $haystack. or false if $needle is not found. + * @access public + * @static + */ + function strrichr($haystack, $needle, $part = false) { + $check = Multibyte::strtoupper($haystack); + $check = Multibyte::utf8($check); + $found = false; + + $haystack = Multibyte::utf8($haystack); + $haystackCount = count($haystack); + + $matches = array_count_values($check); + + $needle = Multibyte::strtoupper($needle); + $needle = Multibyte::utf8($needle); + $needleCount = count($needle); + + $parts = array(); + $position = 0; + + while (($found === false) && ($position < $haystackCount)) { + if (isset($needle[0]) && $needle[0] === $check[$position]) { + for ($i = 1; $i < $needleCount; $i++) { + if ($needle[$i] !== $check[$position + $i]) { + if ($needle[$i] === $check[($position + $i) -1]) { + $found = true; + } + unset($parts[$position - 1]); + $haystack = array_merge(array($haystack[$position]), $haystack); + break; + } + } + if (isset($matches[$needle[0]]) && $matches[$needle[0]] > 1) { + $matches[$needle[0]] = $matches[$needle[0]] - 1; + } elseif ($i === $needleCount) { + $found = true; + } + } + + if (!$found && isset($haystack[$position])) { + $parts[] = $haystack[$position]; + unset($haystack[$position]); + } + $position++; + } + + if ($found && $part && !empty($parts)) { + return Multibyte::ascii($parts); + } elseif ($found && !empty($haystack)) { + return Multibyte::ascii($haystack); + } + return false; + } + +/** + * Finds position of last occurrence of a string within another, case insensitive + * + * @param string $haystack The string from which to get the position of the last occurrence of $needle. + * @param string $needle The string to find in $haystack. + * @param integer $offset The position in $haystack to start searching. + * @return integer|boolean The numeric position of the last occurrence of $needle in the $haystack string, + * or false if $needle is not found. + * @access public + * @static + */ + function strripos($haystack, $needle, $offset = 0) { + if (!PHP5 || Multibyte::checkMultibyte($haystack)) { + $found = false; + $haystack = Multibyte::strtoupper($haystack); + $haystack = Multibyte::utf8($haystack); + $haystackCount = count($haystack); + + $matches = array_count_values($haystack); + + $needle = Multibyte::strtoupper($needle); + $needle = Multibyte::utf8($needle); + $needleCount = count($needle); + + $position = $offset; + + while (($found === false) && ($position < $haystackCount)) { + if (isset($needle[0]) && $needle[0] === $haystack[$position]) { + for ($i = 1; $i < $needleCount; $i++) { + if ($needle[$i] !== $haystack[$position + $i]) { + if ($needle[$i] === $haystack[($position + $i) -1]) { + $position--; + $found = true; + continue; + } + } + } + + if (!$offset && isset($matches[$needle[0]]) && $matches[$needle[0]] > 1) { + $matches[$needle[0]] = $matches[$needle[0]] - 1; + } elseif ($i === $needleCount) { + $found = true; + $position--; + } + } + $position++; + } + return ($found) ? $position : false; + } + return strripos($haystack, $needle, $offset); + } + +/** + * Find position of last occurrence of a string in a string. + * + * @param string $haystack The string being checked, for the last occurrence of $needle. + * @param string $needle The string to find in $haystack. + * @param integer $offset May be specified to begin searching an arbitrary number of characters into the string. + * Negative values will stop searching at an arbitrary point prior to the end of the string. + * @return integer|boolean The numeric position of the last occurrence of $needle in the $haystack string. + * If $needle is not found, it returns false. + * @access public + * @static + */ + function strrpos($haystack, $needle, $offset = 0) { + if (!PHP5 || Multibyte::checkMultibyte($haystack)) { + $found = false; + + $haystack = Multibyte::utf8($haystack); + $haystackCount = count($haystack); + + $matches = array_count_values($haystack); + + $needle = Multibyte::utf8($needle); + $needleCount = count($needle); + + $position = $offset; + + while (($found === false) && ($position < $haystackCount)) { + if (isset($needle[0]) && $needle[0] === $haystack[$position]) { + for ($i = 1; $i < $needleCount; $i++) { + if ($needle[$i] !== $haystack[$position + $i]) { + if ($needle[$i] === $haystack[($position + $i) -1]) { + $position--; + $found = true; + continue; + } + } + } + + if (!$offset && isset($matches[$needle[0]]) && $matches[$needle[0]] > 1) { + $matches[$needle[0]] = $matches[$needle[0]] - 1; + } elseif ($i === $needleCount) { + $found = true; + $position--; + } + } + $position++; + } + return ($found) ? $position : false; + } + return strrpos($haystack, $needle, $offset); + } + +/** + * Finds first occurrence of a string within another + * + * @param string $haystack The string from which to get the first occurrence of $needle. + * @param string $needle The string to find in $haystack + * @param boolean $part Determines which portion of $haystack this function returns. + * If set to true, it returns all of $haystack from the beginning to the first occurrence of $needle. + * If set to false, it returns all of $haystack from the first occurrence of $needle to the end, + * Default value is FALSE. + * @return string|boolean The portion of $haystack, or true if $needle is not found. + * @access public + * @static + */ + function strstr($haystack, $needle, $part = false) { + $php = (PHP_VERSION < 5.3); + + if (($php && $part) || Multibyte::checkMultibyte($haystack)) { + $check = Multibyte::utf8($haystack); + $found = false; + + $haystack = Multibyte::utf8($haystack); + $haystackCount = count($haystack); + + $needle = Multibyte::utf8($needle); + $needleCount = count($needle); + + $parts = array(); + $position = 0; + + while (($found === false) && ($position < $haystackCount)) { + if (isset($needle[0]) && $needle[0] === $check[$position]) { + for ($i = 1; $i < $needleCount; $i++) { + if ($needle[$i] !== $check[$position + $i]) { + break; + } + } + if ($i === $needleCount) { + $found = true; + } + } + if (!$found) { + $parts[] = $haystack[$position]; + unset($haystack[$position]); + } + $position++; + } + + if ($found && $part && !empty($parts)) { + return Multibyte::ascii($parts); + } elseif ($found && !empty($haystack)) { + return Multibyte::ascii($haystack); + } + return false; + } + + if (!$php) { + return strstr($haystack, $needle, $part); + } + return strstr($haystack, $needle); + } + +/** + * Make a string lowercase + * + * @param string $string The string being lowercased. + * @return string with all alphabetic characters converted to lowercase. + * @access public + * @static + */ + function strtolower($string) { + $_this =& Multibyte::getInstance(); + $utf8Map = Multibyte::utf8($string); + + $length = count($utf8Map); + $lowerCase = array(); + $matched = false; + + for ($i = 0 ; $i < $length; $i++) { + $char = $utf8Map[$i]; + + if ($char < 128) { + $str = strtolower(chr($char)); + $strlen = strlen($str); + for ($ii = 0 ; $ii < $strlen; $ii++) { + $lower = ord(substr($str, $ii, 1)); + } + $lowerCase[] = $lower; + $matched = true; + } else { + $matched = false; + $keys = $_this->__find($char, 'upper'); + + if (!empty($keys)) { + foreach ($keys as $key => $value) { + if ($keys[$key]['upper'] == $char && count($keys[$key]['lower'][0]) === 1) { + $lowerCase[] = $keys[$key]['lower'][0]; + $matched = true; + break 1; + } + } + } + } + if ($matched === false) { + $lowerCase[] = $char; + } + } + return Multibyte::ascii($lowerCase); + } + +/** + * Make a string uppercase + * + * @param string $string The string being uppercased. + * @param string $encoding Character encoding name to use. If it is omitted, internal character encoding is used. + * @return string with all alphabetic characters converted to uppercase. + * @access public + * @static + */ + function strtoupper($string) { + $_this =& Multibyte::getInstance(); + $utf8Map = Multibyte::utf8($string); + + $length = count($utf8Map); + $matched = false; + $replaced = array(); + $upperCase = array(); + + for ($i = 0 ; $i < $length; $i++) { + $char = $utf8Map[$i]; + + if ($char < 128) { + $str = strtoupper(chr($char)); + $strlen = strlen($str); + for ($ii = 0 ; $ii < $strlen; $ii++) { + $upper = ord(substr($str, $ii, 1)); + } + $upperCase[] = $upper; + $matched = true; + + } else { + $matched = false; + $keys = $_this->__find($char); + $keyCount = count($keys); + + if (!empty($keys)) { + foreach ($keys as $key => $value) { + $matched = false; + $replace = 0; + if ($length > 1 && count($keys[$key]['lower']) > 1) { + $j = 0; + + for ($ii = 0, $count = count($keys[$key]['lower']); $ii < $count; $ii++) { + $nextChar = $utf8Map[$i + $ii]; + + if (isset($nextChar) && ($nextChar == $keys[$key]['lower'][$j + $ii])) { + $replace++; + } + } + if ($replace == $count) { + $upperCase[] = $keys[$key]['upper']; + $replaced = array_merge($replaced, array_values($keys[$key]['lower'])); + $matched = true; + break 1; + } + } elseif ($length > 1 && $keyCount > 1) { + $j = 0; + for ($ii = 1; $ii < $keyCount; $ii++) { + $nextChar = $utf8Map[$i + $ii - 1]; + + if (in_array($nextChar, $keys[$ii]['lower'])) { + + for ($jj = 0, $count = count($keys[$ii]['lower']); $jj < $count; $jj++) { + $nextChar = $utf8Map[$i + $jj]; + + if (isset($nextChar) && ($nextChar == $keys[$ii]['lower'][$j + $jj])) { + $replace++; + } + } + if ($replace == $count) { + $upperCase[] = $keys[$ii]['upper']; + $replaced = array_merge($replaced, array_values($keys[$ii]['lower'])); + $matched = true; + break 2; + } + } + } + } + if ($keys[$key]['lower'][0] == $char) { + $upperCase[] = $keys[$key]['upper']; + $matched = true; + break 1; + } + } + } + } + if ($matched === false && !in_array($char, $replaced, true)) { + $upperCase[] = $char; + } + } + return Multibyte::ascii($upperCase); + } + +/** + * Count the number of substring occurrences + * + * @param string $haystack The string being checked. + * @param string $needle The string being found. + * @return integer The number of times the $needle substring occurs in the $haystack string. + * @access public + * @static + */ + function substrCount($haystack, $needle) { + $count = 0; + $haystack = Multibyte::utf8($haystack); + $haystackCount = count($haystack); + $matches = array_count_values($haystack); + $needle = Multibyte::utf8($needle); + $needleCount = count($needle); + + if ($needleCount === 1 && isset($matches[$needle[0]])) { + return $matches[$needle[0]]; + } + + for ($i = 0; $i < $haystackCount; $i++) { + if (isset($needle[0]) && $needle[0] === $haystack[$i]) { + for ($ii = 1; $ii < $needleCount; $ii++) { + if ($needle[$ii] === $haystack[$i + 1]) { + if ((isset($needle[$ii + 1]) && $haystack[$i + 2]) && $needle[$ii + 1] !== $haystack[$i + 2]) { + $count--; + } else { + $count++; + } + } + } + } + } + return $count; + } + +/** + * Get part of string + * + * @param string $string The string being checked. + * @param integer $start The first position used in $string. + * @param integer $length The maximum length of the returned string. + * @return string The portion of $string specified by the $string and $length parameters. + * @access public + * @static + */ + function substr($string, $start, $length = null) { + if ($start === 0 && $length === null) { + return $string; + } + + $string = Multibyte::utf8($string); + $stringCount = count($string); + + for ($i = 1; $i <= $start; $i++) { + unset($string[$i - 1]); + } + + if ($length === null || count($string) < $length) { + return Multibyte::ascii($string); + } + $string = array_values($string); + + $value = array(); + for ($i = 0; $i < $length; $i++) { + $value[] = $string[$i]; + } + return Multibyte::ascii($value); + } + +/** + * Prepare a string for mail transport, using the provided encoding + * + * @param string $string value to encode + * @param string $charset charset to use for encoding. defaults to UTF-8 + * @param string $newline + * @return string + * @access public + * @static + * @TODO: add support for 'Q'('Quoted Printable') encoding + */ + function mimeEncode($string, $charset = null, $newline = "\r\n") { + if (!Multibyte::checkMultibyte($string) && strlen($string) < 75) { + return $string; + } + + if (empty($charset)) { + $charset = Configure::read('App.encoding'); + } + $charset = strtoupper($charset); + + $start = '=?' . $charset . '?B?'; + $end = '?='; + $spacer = $end . $newline . ' ' . $start; + + $length = 75 - strlen($start) - strlen($end); + $length = $length - ($length % 4); + if ($charset == 'UTF-8') { + $parts = array(); + $maxchars = floor(($length * 3) / 4); + while (strlen($string) > $maxchars) { + $i = $maxchars; + $test = ord($string[$i]); + while ($test >= 128 && $test <= 191) { + $i--; + $test = ord($string[$i]); + } + $parts[] = base64_encode(substr($string, 0, $i)); + $string = substr($string, $i); + } + $parts[] = base64_encode($string); + $string = implode($spacer, $parts); + } else { + $string = chunk_split(base64_encode($string), $length, $spacer); + $string = preg_replace('/' . preg_quote($spacer) . '$/', '', $string); + } + return $start . $string . $end; + } + +/** + * Return the Code points range for Unicode characters + * + * @param interger $decimal + * @return string + * @access private + */ + function __codepoint($decimal) { + if ($decimal > 128 && $decimal < 256) { + $return = '0080_00ff'; // Latin-1 Supplement + } elseif ($decimal < 384) { + $return = '0100_017f'; // Latin Extended-A + } elseif ($decimal < 592) { + $return = '0180_024F'; // Latin Extended-B + } elseif ($decimal < 688) { + $return = '0250_02af'; // IPA Extensions + } elseif ($decimal >= 880 && $decimal < 1024) { + $return = '0370_03ff'; // Greek and Coptic + } elseif ($decimal < 1280) { + $return = '0400_04ff'; // Cyrillic + } elseif ($decimal < 1328) { + $return = '0500_052f'; // Cyrillic Supplement + } elseif ($decimal < 1424) { + $return = '0530_058f'; // Armenian + } elseif ($decimal >= 7680 && $decimal < 7936) { + $return = '1e00_1eff'; // Latin Extended Additional + } elseif ($decimal < 8192) { + $return = '1f00_1fff'; // Greek Extended + } elseif ($decimal >= 8448 && $decimal < 8528) { + $return = '2100_214f'; // Letterlike Symbols + } elseif ($decimal < 8592) { + $return = '2150_218f'; // Number Forms + } elseif ($decimal >= 9312 && $decimal < 9472) { + $return = '2460_24ff'; // Enclosed Alphanumerics + } elseif ($decimal >= 11264 && $decimal < 11360) { + $return = '2c00_2c5f'; // Glagolitic + } elseif ($decimal < 11392) { + $return = '2c60_2c7f'; // Latin Extended-C + } elseif ($decimal < 11520) { + $return = '2c80_2cff'; // Coptic + } elseif ($decimal >= 65280 && $decimal < 65520) { + $return = 'ff00_ffef'; // Halfwidth and Fullwidth Forms + } else { + $return = false; + } + $this->__codeRange[$decimal] = $return; + return $return; + } + +/** + * Find the related code folding values for $char + * + * @param integer $char decimal value of character + * @param string $type + * @return array + * @access private + */ + function __find($char, $type = 'lower') { + $value = false; + $found = array(); + if (!isset($this->__codeRange[$char])) { + $range = $this->__codepoint($char); + if ($range === false) { + return null; + } + Configure::load('unicode' . DS . 'casefolding' . DS . $range); + $this->__caseFold[$range] = Configure::read($range); + Configure::delete($range); + } + + if (!$this->__codeRange[$char]) { + return null; + } + $this->__table = $this->__codeRange[$char]; + $count = count($this->__caseFold[$this->__table]); + + for ($i = 0; $i < $count; $i++) { + if ($type === 'lower' && $this->__caseFold[$this->__table][$i][$type][0] === $char) { + $found[] = $this->__caseFold[$this->__table][$i]; + } elseif ($type === 'upper' && $this->__caseFold[$this->__table][$i][$type] === $char) { + $found[] = $this->__caseFold[$this->__table][$i]; + } + } + return $found; + } + +/** + * Check the $string for multibyte characters + * @param string $string value to test + * @return boolean + * @access public + * @static + */ + function checkMultibyte($string) { + $length = strlen($string); + + for ($i = 0; $i < $length; $i++ ) { + $value = ord(($string[$i])); + if ($value > 128) { + return true; + } + } + return false; + } +} diff --git a/cake/libs/.svn/text-base/object.php.svn-base b/cake/libs/.svn/text-base/object.php.svn-base new file mode 100644 index 0000000..8fcb3cf --- /dev/null +++ b/cake/libs/.svn/text-base/object.php.svn-base @@ -0,0 +1,298 @@ + 0, 'autoRender' => 1)); + } + if (is_array($url) && !isset($extra['url'])) { + $extra['url'] = array(); + } + $params = array_merge(array('autoRender' => 0, 'return' => 1, 'bare' => 1, 'requested' => 1), $extra); + $dispatcher = new Dispatcher; + return $dispatcher->dispatch($url, $params); + } + +/** + * Calls a method on this object with the given parameters. Provides an OO wrapper + * for `call_user_func_array` + * + * @param string $method Name of the method to call + * @param array $params Parameter list to use when calling $method + * @return mixed Returns the result of the method call + * @access public + */ + function dispatchMethod($method, $params = array()) { + switch (count($params)) { + case 0: + return $this->{$method}(); + case 1: + return $this->{$method}($params[0]); + case 2: + return $this->{$method}($params[0], $params[1]); + case 3: + return $this->{$method}($params[0], $params[1], $params[2]); + case 4: + return $this->{$method}($params[0], $params[1], $params[2], $params[3]); + case 5: + return $this->{$method}($params[0], $params[1], $params[2], $params[3], $params[4]); + default: + return call_user_func_array(array(&$this, $method), $params); + break; + } + } + +/** + * Stop execution of the current script. Wraps exit() making + * testing easier. + * + * @param $status see http://php.net/exit for values + * @return void + * @access public + */ + function _stop($status = 0) { + exit($status); + } + +/** + * Convience method to write a message to CakeLog. See CakeLog::write() + * for more information on writing to logs. + * + * @param string $msg Log message + * @param integer $type Error type constant. Defined in app/config/core.php. + * @return boolean Success of log write + * @access public + */ + function log($msg, $type = LOG_ERROR) { + if (!class_exists('CakeLog')) { + require LIBS . 'cake_log.php'; + } + if (!is_string($msg)) { + $msg = print_r($msg, true); + } + return CakeLog::write($type, $msg); + } + +/** + * Allows setting of multiple properties of the object in a single line of code. Will only set + * properties that are part of a class declaration. + * + * @param array $properties An associative array containing properties and corresponding values. + * @return void + * @access protected + */ + function _set($properties = array()) { + if (is_array($properties) && !empty($properties)) { + $vars = get_object_vars($this); + foreach ($properties as $key => $val) { + if (array_key_exists($key, $vars)) { + $this->{$key} = $val; + } + } + } + } + +/** + * Used to report user friendly errors. + * If there is a file app/error.php or app/app_error.php this file will be loaded + * error.php is the AppError class it should extend ErrorHandler class. + * + * @param string $method Method to be called in the error class (AppError or ErrorHandler classes) + * @param array $messages Message that is to be displayed by the error class + * @return error message + * @access public + */ + function cakeError($method, $messages = array()) { + if (!class_exists('ErrorHandler')) { + App::import('Core', 'Error'); + + if (file_exists(APP . 'error.php')) { + include_once (APP . 'error.php'); + } elseif (file_exists(APP . 'app_error.php')) { + include_once (APP . 'app_error.php'); + } + } + + if (class_exists('AppError')) { + $error = new AppError($method, $messages); + } else { + $error = new ErrorHandler($method, $messages); + } + return $error; + } + +/** + * Checks for a persistent class file, if found file is opened and true returned + * If file is not found a file is created and false returned + * If used in other locations of the model you should choose a unique name for the persistent file + * There are many uses for this method, see manual for examples + * + * @param string $name name of the class to persist + * @param string $object the object to persist + * @return boolean Success + * @access protected + * @todo add examples to manual + */ + function _persist($name, $return = null, &$object, $type = null) { + $file = CACHE . 'persistent' . DS . strtolower($name) . '.php'; + if ($return === null) { + if (!file_exists($file)) { + return false; + } else { + return true; + } + } + + if (!file_exists($file)) { + $this->_savePersistent($name, $object); + return false; + } else { + $this->__openPersistent($name, $type); + return true; + } + } + +/** + * You should choose a unique name for the persistent file + * + * There are many uses for this method, see manual for examples + * + * @param string $name name used for object to cache + * @param object $object the object to persist + * @return boolean true on save, throws error if file can not be created + * @access protected + */ + function _savePersistent($name, &$object) { + $file = 'persistent' . DS . strtolower($name) . '.php'; + $objectArray = array(&$object); + $data = str_replace('\\', '\\\\', serialize($objectArray)); + $data = ''; + $duration = '+999 days'; + if (Configure::read() >= 1) { + $duration = '+10 seconds'; + } + cache($file, $data, $duration); + } + +/** + * Open the persistent class file for reading + * Used by Object::_persist() + * + * @param string $name Name of persisted class + * @param string $type Type of persistance (e.g: registry) + * @return void + * @access private + */ + function __openPersistent($name, $type = null) { + $file = CACHE . 'persistent' . DS . strtolower($name) . '.php'; + include($file); + + switch ($type) { + case 'registry': + $vars = unserialize(${$name}); + foreach ($vars['0'] as $key => $value) { + if (strpos($key, '_behavior') !== false) { + App::import('Behavior', Inflector::classify(substr($key, 0, -9))); + } else { + App::import('Model', Inflector::camelize($key)); + } + unset ($value); + } + unset($vars); + $vars = unserialize(${$name}); + foreach ($vars['0'] as $key => $value) { + ClassRegistry::addObject($key, $value); + unset ($value); + } + unset($vars); + break; + default: + $vars = unserialize(${$name}); + $this->{$name} = $vars['0']; + unset($vars); + break; + } + } +} diff --git a/cake/libs/.svn/text-base/overloadable.php.svn-base b/cake/libs/.svn/text-base/overloadable.php.svn-base new file mode 100644 index 0000000..2d2eea2 --- /dev/null +++ b/cake/libs/.svn/text-base/overloadable.php.svn-base @@ -0,0 +1,36 @@ +overload(); + parent::__construct(); + } + +/** + * Overload implementation. + * + * @access public + */ + function overload() { + if (function_exists('overload')) { + if (func_num_args() > 0) { + foreach (func_get_args() as $class) { + if (is_object($class)) { + overload(get_class($class)); + } elseif (is_string($class)) { + overload($class); + } + } + } else { + overload(get_class($this)); + } + } + } + +/** + * Magic method handler. + * + * @param string $method Method name + * @param array $params Parameters to send to method + * @param mixed $return Where to store return value from method + * @return boolean Success + * @access private + */ + function __call($method, $params, &$return) { + if (!method_exists($this, 'call__')) { + trigger_error(sprintf(__('Magic method handler call__ not defined in %s', true), get_class($this)), E_USER_ERROR); + } + $return = $this->call__($method, $params); + return true; + } +} +Overloadable::overload('Overloadable'); + +/** + * Overloadable2 class selector + * + * Load the interface class based on the version of PHP. + * + * @package cake + * @subpackage cake.cake.libs + */ +class Overloadable2 extends Object { + +/** + * Constructor + * + * @access private + */ + function __construct() { + $this->overload(); + parent::__construct(); + } + +/** + * Overload implementation. + * + * @access public + */ + function overload() { + if (function_exists('overload')) { + if (func_num_args() > 0) { + foreach (func_get_args() as $class) { + if (is_object($class)) { + overload(get_class($class)); + } elseif (is_string($class)) { + overload($class); + } + } + } else { + overload(get_class($this)); + } + } + } + +/** + * Magic method handler. + * + * @param string $method Method name + * @param array $params Parameters to send to method + * @param mixed $return Where to store return value from method + * @return boolean Success + * @access private + */ + function __call($method, $params, &$return) { + if (!method_exists($this, 'call__')) { + trigger_error(sprintf(__('Magic method handler call__ not defined in %s', true), get_class($this)), E_USER_ERROR); + } + $return = $this->call__($method, $params); + return true; + } + +/** + * Getter. + * + * @param mixed $name What to get + * @param mixed $value Where to store returned value + * @return boolean Success + * @access private + */ + function __get($name, &$value) { + $value = $this->get__($name); + return true; + } + +/** + * Setter. + * + * @param mixed $name What to set + * @param mixed $value Value to set + * @return boolean Success + * @access private + */ + function __set($name, $value) { + $this->set__($name, $value); + return true; + } +} +Overloadable::overload('Overloadable2'); diff --git a/cake/libs/.svn/text-base/overloadable_php5.php.svn-base b/cake/libs/.svn/text-base/overloadable_php5.php.svn-base new file mode 100644 index 0000000..ed27493 --- /dev/null +++ b/cake/libs/.svn/text-base/overloadable_php5.php.svn-base @@ -0,0 +1,108 @@ +call__($method, $params); + } +} + +/** + * Overloadable2 class selector + * + * Load the interface class based on the version of PHP. + * + * @package cake + */ +class Overloadable2 extends Object { + +/** + * Overload implementation. No need for implementation in PHP5. + * + * @access public + */ + function overload() { } + +/** + * Magic method handler. + * + * @param string $method Method name + * @param array $params Parameters to send to method + * @return mixed Return value from method + * @access private + */ + function __call($method, $params) { + if (!method_exists($this, 'call__')) { + trigger_error(sprintf(__('Magic method handler call__ not defined in %s', true), get_class($this)), E_USER_ERROR); + } + return $this->call__($method, $params); + } + +/** + * Getter. + * + * @param mixed $name What to get + * @param mixed $value Where to store returned value + * @return boolean Success + * @access private + */ + function __get($name) { + return $this->get__($name); + } + +/** + * Setter. + * + * @param mixed $name What to set + * @param mixed $value Value to set + * @return boolean Success + * @access private + */ + function __set($name, $value) { + return $this->set__($name, $value); + } +} diff --git a/cake/libs/.svn/text-base/router.php.svn-base b/cake/libs/.svn/text-base/router.php.svn-base new file mode 100644 index 0000000..7db8442 --- /dev/null +++ b/cake/libs/.svn/text-base/router.php.svn-base @@ -0,0 +1,1632 @@ + 'index|show|add|create|edit|update|remove|del|delete|view|item', + 'Year' => '[12][0-9]{3}', + 'Month' => '0[1-9]|1[012]', + 'Day' => '0[1-9]|[12][0-9]|3[01]', + 'ID' => '[0-9]+', + 'UUID' => '[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}' + ); + +/** + * Stores all information necessary to decide what named arguments are parsed under what conditions. + * + * @var string + * @access public + */ + var $named = array( + 'default' => array('page', 'fields', 'order', 'limit', 'recursive', 'sort', 'direction', 'step'), + 'greedy' => true, + 'separator' => ':', + 'rules' => false, + ); + +/** + * The route matching the URL of the current request + * + * @var array + * @access private + */ + var $__currentRoute = array(); + +/** + * Default HTTP request method => controller action map. + * + * @var array + * @access private + */ + var $__resourceMap = array( + array('action' => 'index', 'method' => 'GET', 'id' => false), + array('action' => 'view', 'method' => 'GET', 'id' => true), + array('action' => 'add', 'method' => 'POST', 'id' => false), + array('action' => 'edit', 'method' => 'PUT', 'id' => true), + array('action' => 'delete', 'method' => 'DELETE', 'id' => true), + array('action' => 'edit', 'method' => 'POST', 'id' => true) + ); + +/** + * List of resource-mapped controllers + * + * @var array + * @access private + */ + var $__resourceMapped = array(); + +/** + * Maintains the parameter stack for the current request + * + * @var array + * @access private + */ + var $__params = array(); + +/** + * Maintains the path stack for the current request + * + * @var array + * @access private + */ + var $__paths = array(); + +/** + * Keeps Router state to determine if default routes have already been connected + * + * @var boolean + * @access private + */ + var $__defaultsMapped = false; + +/** + * Keeps track of whether the connection of default routes is enabled or disabled. + * + * @var boolean + * @access private + */ + var $__connectDefaults = true; + +/** + * Constructor for Router. + * Builds __prefixes + * + * @return void + */ + function Router() { + $this->__setPrefixes(); + } + +/** + * Sets the Routing prefixes. Includes compatibilty for existing Routing.admin + * configurations. + * + * @return void + * @access private + * @todo Remove support for Routing.admin in future versions. + */ + function __setPrefixes() { + $routing = Configure::read('Routing'); + if (!empty($routing['admin'])) { + $this->__prefixes[] = $routing['admin']; + } + if (!empty($routing['prefixes'])) { + $this->__prefixes = array_merge($this->__prefixes, (array)$routing['prefixes']); + } + } + +/** + * Gets a reference to the Router object instance + * + * @return Router Instance of the Router. + * @access public + * @static + */ + function &getInstance() { + static $instance = array(); + + if (!$instance) { + $instance[0] =& new Router(); + } + return $instance[0]; + } + +/** + * Gets the named route elements for use in app/config/routes.php + * + * @return array Named route elements + * @access public + * @see Router::$__named + * @static + */ + function getNamedExpressions() { + $self =& Router::getInstance(); + return $self->__named; + } + +/** + * Connects a new Route in the router. + * + * Routes are a way of connecting request urls to objects in your application. At their core routes + * are a set or regular expressions that are used to match requests to destinations. + * + * Examples: + * + * `Router::connect('/:controller/:action/*');` + * + * The first parameter will be used as a controller name while the second is used as the action name. + * the '/*' syntax makes this route greedy in that it will match requests like `/posts/index` as well as requests + * like `/posts/edit/1/foo/bar`. + * + * `Router::connect('/home-page', array('controller' => 'pages', 'action' => 'display', 'home'));` + * + * The above shows the use of route parameter defaults. And providing routing parameters for a static route. + * + * {{{ + * Router::connect( + * '/:lang/:controller/:action/:id', + * array(), + * array('id' => '[0-9]+', 'lang' => '[a-z]{3}') + * ); + * }}} + * + * Shows connecting a route with custom route parameters as well as providing patterns for those parameters. + * Patterns for routing parameters do not need capturing groups, as one will be added for each route params. + * + * $options offers two 'special' keys. `pass` and `persist` have special meaning in the $options array. + * + * `pass` is used to define which of the routed parameters should be shifted into the pass array. Adding a + * parameter to pass will remove it from the regular route array. Ex. `'pass' => array('slug')` + * + * `persist` is used to define which route parameters should be automatically included when generating + * new urls. You can override peristent parameters by redifining them in a url or remove them by + * setting the parameter to `false`. Ex. `'persist' => array('lang')` + * + * @param string $route A string describing the template of the route + * @param array $defaults An array describing the default route parameters. These parameters will be used by default + * and can supply routing parameters that are not dynamic. See above. + * @param array $options An array matching the named elements in the route to regular expressions which that + * element should match. Also contains additional parameters such as which routed parameters should be + * shifted into the passed arguments. As well as supplying patterns for routing parameters. + * @see routes + * @return array Array of routes + * @access public + * @static + */ + function connect($route, $defaults = array(), $options = array()) { + $self =& Router::getInstance(); + + foreach ($self->__prefixes as $prefix) { + if (isset($defaults[$prefix])) { + $defaults['prefix'] = $prefix; + break; + } + } + if (isset($defaults['prefix'])) { + $self->__prefixes[] = $defaults['prefix']; + $self->__prefixes = array_keys(array_flip($self->__prefixes)); + } + $defaults += array('action' => 'index', 'plugin' => null); + $routeClass = 'CakeRoute'; + if (isset($options['routeClass'])) { + $routeClass = $options['routeClass']; + unset($options['routeClass']); + } + //TODO 2.0 refactor this to use a string class name, throw exception, and then construct. + $Route =& new $routeClass($route, $defaults, $options); + if ($routeClass !== 'CakeRoute' && !is_subclass_of($Route, 'CakeRoute')) { + trigger_error(__('Route classes must extend CakeRoute', true), E_USER_WARNING); + return false; + } + $self->routes[] =& $Route; + return $self->routes; + } + +/** + * Specifies what named parameters CakePHP should be parsing. The most common setups are: + * + * Do not parse any named parameters: + * + * {{{ Router::connectNamed(false); }}} + * + * Parse only default parameters used for CakePHP's pagination: + * + * {{{ Router::connectNamed(false, array('default' => true)); }}} + * + * Parse only the page parameter if its value is a number: + * + * {{{ Router::connectNamed(array('page' => '[\d]+'), array('default' => false, 'greedy' => false)); }}} + * + * Parse only the page parameter no mater what. + * + * {{{ Router::connectNamed(array('page'), array('default' => false, 'greedy' => false)); }}} + * + * Parse only the page parameter if the current action is 'index'. + * + * {{{ + * Router::connectNamed( + * array('page' => array('action' => 'index')), + * array('default' => false, 'greedy' => false) + * ); + * }}} + * + * Parse only the page parameter if the current action is 'index' and the controller is 'pages'. + * + * {{{ + * Router::connectNamed( + * array('page' => array('action' => 'index', 'controller' => 'pages')), + * array('default' => false, 'greedy' => false) + * ); + * }}} + * + * @param array $named A list of named parameters. Key value pairs are accepted where values are + * either regex strings to match, or arrays as seen above. + * @param array $options Allows to control all settings: separator, greedy, reset, default + * @return array + * @access public + * @static + */ + function connectNamed($named, $options = array()) { + $self =& Router::getInstance(); + + if (isset($options['argSeparator'])) { + $self->named['separator'] = $options['argSeparator']; + unset($options['argSeparator']); + } + + if ($named === true || $named === false) { + $options = array_merge(array('default' => $named, 'reset' => true, 'greedy' => $named), $options); + $named = array(); + } else { + $options = array_merge(array('default' => false, 'reset' => false, 'greedy' => true), $options); + } + + if ($options['reset'] == true || $self->named['rules'] === false) { + $self->named['rules'] = array(); + } + + if ($options['default']) { + $named = array_merge($named, $self->named['default']); + } + + foreach ($named as $key => $val) { + if (is_numeric($key)) { + $self->named['rules'][$val] = true; + } else { + $self->named['rules'][$key] = $val; + } + } + $self->named['greedy'] = $options['greedy']; + return $self->named; + } + +/** + * Tell router to connect or not connect the default routes. + * + * If default routes are disabled all automatic route generation will be disabled + * and you will need to manually configure all the routes you want. + * + * @param boolean $connect Set to true or false depending on whether you want or don't want default routes. + * @return void + * @access public + * @static + */ + function defaults($connect = true) { + $self =& Router::getInstance(); + $self->__connectDefaults = $connect; + } + +/** + * Creates REST resource routes for the given controller(s) + * + * ### Options: + * + * - 'id' - The regular expression fragment to use when matching IDs. By default, matches + * integer values and UUIDs. + * - 'prefix' - URL prefix to use for the generated routes. Defaults to '/'. + * + * @param mixed $controller A controller name or array of controller names (i.e. "Posts" or "ListItems") + * @param array $options Options to use when generating REST routes + * @return void + * @access public + * @static + */ + function mapResources($controller, $options = array()) { + $self =& Router::getInstance(); + $options = array_merge(array('prefix' => '/', 'id' => $self->__named['ID'] . '|' . $self->__named['UUID']), $options); + $prefix = $options['prefix']; + + foreach ((array)$controller as $ctlName) { + $urlName = Inflector::underscore($ctlName); + + foreach ($self->__resourceMap as $params) { + extract($params); + $url = $prefix . $urlName . (($id) ? '/:id' : ''); + + Router::connect($url, + array('controller' => $urlName, 'action' => $action, '[method]' => $params['method']), + array('id' => $options['id'], 'pass' => array('id')) + ); + } + $self->__resourceMapped[] = $urlName; + } + } + +/** + * Returns the list of prefixes used in connected routes + * + * @return array A list of prefixes used in connected routes + * @access public + * @static + */ + function prefixes() { + $self =& Router::getInstance(); + return $self->__prefixes; + } + +/** + * Parses given URL and returns an array of controller, action and parameters + * taken from that URL. + * + * @param string $url URL to be parsed + * @return array Parsed elements from URL + * @access public + * @static + */ + function parse($url) { + $self =& Router::getInstance(); + if (!$self->__defaultsMapped && $self->__connectDefaults) { + $self->__connectDefaultRoutes(); + } + $out = array( + 'pass' => array(), + 'named' => array(), + ); + $r = $ext = null; + + if (ini_get('magic_quotes_gpc') === '1') { + $url = stripslashes_deep($url); + } + + if ($url && strpos($url, '/') !== 0) { + $url = '/' . $url; + } + if (strpos($url, '?') !== false) { + $url = substr($url, 0, strpos($url, '?')); + } + extract($self->__parseExtension($url)); + + for ($i = 0, $len = count($self->routes); $i < $len; $i++) { + $route =& $self->routes[$i]; + if (($r = $route->parse($url)) !== false) { + $self->__currentRoute[] =& $route; + + $params = $route->options; + $argOptions = array(); + + if (array_key_exists('named', $params)) { + $argOptions['named'] = $params['named']; + unset($params['named']); + } + if (array_key_exists('greedy', $params)) { + $argOptions['greedy'] = $params['greedy']; + unset($params['greedy']); + } + $out = $r; + + if (isset($out['_args_'])) { + $argOptions['context'] = array('action' => $out['action'], 'controller' => $out['controller']); + $parsedArgs = $self->getArgs($out['_args_'], $argOptions); + $out['pass'] = array_merge($out['pass'], $parsedArgs['pass']); + $out['named'] = $parsedArgs['named']; + unset($out['_args_']); + } + + if (isset($params['pass'])) { + $j = count($params['pass']); + while($j--) { + if (isset($out[$params['pass'][$j]])) { + array_unshift($out['pass'], $out[$params['pass'][$j]]); + } + } + } + break; + } + } + + if (!empty($ext) && !isset($out['url']['ext'])) { + $out['url']['ext'] = $ext; + } + return $out; + } + +/** + * Parses a file extension out of a URL, if Router::parseExtensions() is enabled. + * + * @param string $url + * @return array Returns an array containing the altered URL and the parsed extension. + * @access private + */ + function __parseExtension($url) { + $ext = null; + + if ($this->__parseExtensions) { + if (preg_match('/\.[0-9a-zA-Z]*$/', $url, $match) === 1) { + $match = substr($match[0], 1); + if (empty($this->__validExtensions)) { + $url = substr($url, 0, strpos($url, '.' . $match)); + $ext = $match; + } else { + foreach ($this->__validExtensions as $name) { + if (strcasecmp($name, $match) === 0) { + $url = substr($url, 0, strpos($url, '.' . $name)); + $ext = $match; + break; + } + } + } + } + if (empty($ext)) { + $ext = 'html'; + } + } + return compact('ext', 'url'); + } + +/** + * Connects the default, built-in routes, including prefix and plugin routes. The following routes are created + * in the order below: + * + * For each of the Routing.prefixes the following routes are created. Routes containing `:plugin` are only + * created when your application has one or more plugins. + * + * - `/:prefix/:plugin` a plugin shortcut route. + * - `/:prefix/:plugin/:action/*` a plugin shortcut route. + * - `/:prefix/:plugin/:controller` + * - `/:prefix/:plugin/:controller/:action/*` + * - `/:prefix/:controller` + * - `/:prefix/:controller/:action/*` + * + * If plugins are found in your application the following routes are created: + * + * - `/:plugin` a plugin shortcut route. + * - `/:plugin/:action/*` a plugin shortcut route. + * - `/:plugin/:controller` + * - `/:plugin/:controller/:action/*` + * + * And lastly the following catch-all routes are connected. + * + * - `/:controller' + * - `/:controller/:action/*' + * + * You can disable the connection of default routes with Router::defaults(). + * + * @return void + * @access private + */ + function __connectDefaultRoutes() { + if ($plugins = App::objects('plugin')) { + foreach ($plugins as $key => $value) { + $plugins[$key] = Inflector::underscore($value); + } + $pluginPattern = implode('|', $plugins); + $match = array('plugin' => $pluginPattern); + $shortParams = array('routeClass' => 'PluginShortRoute', 'plugin' => $pluginPattern); + + foreach ($this->__prefixes as $prefix) { + $params = array('prefix' => $prefix, $prefix => true); + $indexParams = $params + array('action' => 'index'); + $this->connect("/{$prefix}/:plugin", $indexParams, $shortParams); + $this->connect("/{$prefix}/:plugin/:controller", $indexParams, $match); + $this->connect("/{$prefix}/:plugin/:controller/:action/*", $params, $match); + } + $this->connect('/:plugin', array('action' => 'index'), $shortParams); + $this->connect('/:plugin/:controller', array('action' => 'index'), $match); + $this->connect('/:plugin/:controller/:action/*', array(), $match); + } + + foreach ($this->__prefixes as $prefix) { + $params = array('prefix' => $prefix, $prefix => true); + $indexParams = $params + array('action' => 'index'); + $this->connect("/{$prefix}/:controller", $indexParams); + $this->connect("/{$prefix}/:controller/:action/*", $params); + } + $this->connect('/:controller', array('action' => 'index')); + $this->connect('/:controller/:action/*'); + + if ($this->named['rules'] === false) { + $this->connectNamed(true); + } + $this->__defaultsMapped = true; + } + +/** + * Takes parameter and path information back from the Dispatcher, sets these + * parameters as the current request parameters that are merged with url arrays + * created later in the request. + * + * @param array $params Parameters and path information + * @return void + * @access public + * @static + */ + function setRequestInfo($params) { + $self =& Router::getInstance(); + $defaults = array('plugin' => null, 'controller' => null, 'action' => null); + $params[0] = array_merge($defaults, (array)$params[0]); + $params[1] = array_merge($defaults, (array)$params[1]); + list($self->__params[], $self->__paths[]) = $params; + + if (count($self->__paths)) { + if (isset($self->__paths[0]['namedArgs'])) { + foreach ($self->__paths[0]['namedArgs'] as $arg => $value) { + $self->named['rules'][$arg] = true; + } + } + } + } + +/** + * Gets parameter information + * + * @param boolean $current Get current request parameter, useful when using requestAction + * @return array Parameter information + * @access public + * @static + */ + function getParams($current = false) { + $self =& Router::getInstance(); + if ($current) { + return $self->__params[count($self->__params) - 1]; + } + if (isset($self->__params[0])) { + return $self->__params[0]; + } + return array(); + } + +/** + * Gets URL parameter by name + * + * @param string $name Parameter name + * @param boolean $current Current parameter, useful when using requestAction + * @return string Parameter value + * @access public + * @static + */ + function getParam($name = 'controller', $current = false) { + $params = Router::getParams($current); + if (isset($params[$name])) { + return $params[$name]; + } + return null; + } + +/** + * Gets path information + * + * @param boolean $current Current parameter, useful when using requestAction + * @return array + * @access public + * @static + */ + function getPaths($current = false) { + $self =& Router::getInstance(); + if ($current) { + return $self->__paths[count($self->__paths) - 1]; + } + if (!isset($self->__paths[0])) { + return array('base' => null); + } + return $self->__paths[0]; + } + +/** + * Reloads default Router settings. Resets all class variables and + * removes all connected routes. + * + * @access public + * @return void + * @static + */ + function reload() { + $self =& Router::getInstance(); + foreach (get_class_vars('Router') as $key => $val) { + $self->{$key} = $val; + } + $self->__setPrefixes(); + } + +/** + * Promote a route (by default, the last one added) to the beginning of the list + * + * @param $which A zero-based array index representing the route to move. For example, + * if 3 routes have been added, the last route would be 2. + * @return boolean Retuns false if no route exists at the position specified by $which. + * @access public + * @static + */ + function promote($which = null) { + $self =& Router::getInstance(); + if ($which === null) { + $which = count($self->routes) - 1; + } + if (!isset($self->routes[$which])) { + return false; + } + $route =& $self->routes[$which]; + unset($self->routes[$which]); + array_unshift($self->routes, $route); + return true; + } + +/** + * Finds URL for specified action. + * + * Returns an URL pointing to a combination of controller and action. Param + * $url can be: + * + * - Empty - the method will find address to actuall controller/action. + * - '/' - the method will find base URL of application. + * - A combination of controller/action - the method will find url for it. + * + * There are a few 'special' parameters that can change the final URL string that is generated + * + * - `base` - Set to false to remove the base path from the generated url. If your application + * is not in the root directory, this can be used to generate urls that are 'cake relative'. + * cake relative urls are required when using requestAction. + * - `?` - Takes an array of query string parameters + * - `#` - Allows you to set url hash fragments. + * - `full_base` - If true the `FULL_BASE_URL` constant will be prepended to generated urls. + * + * @param mixed $url Cake-relative URL, like "/products/edit/92" or "/presidents/elect/4" + * or an array specifying any of the following: 'controller', 'action', + * and/or 'plugin', in addition to named arguments (keyed array elements), + * and standard URL arguments (indexed array elements) + * @param mixed $full If (bool) true, the full base URL will be prepended to the result. + * If an array accepts the following keys + * - escape - used when making urls embedded in html escapes query string '&' + * - full - if true the full base URL will be prepended. + * @return string Full translated URL with base path. + * @access public + * @static + */ + function url($url = null, $full = false) { + $self =& Router::getInstance(); + $defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index'); + + if (is_bool($full)) { + $escape = false; + } else { + extract($full + array('escape' => false, 'full' => false)); + } + + if (!empty($self->__params)) { + if (isset($this) && !isset($this->params['requested'])) { + $params = $self->__params[0]; + } else { + $params = end($self->__params); + } + } + $path = array('base' => null); + + if (!empty($self->__paths)) { + if (isset($this) && !isset($this->params['requested'])) { + $path = $self->__paths[0]; + } else { + $path = end($self->__paths); + } + } + $base = $path['base']; + $extension = $output = $mapped = $q = $frag = null; + + if (is_array($url)) { + if (isset($url['base']) && $url['base'] === false) { + $base = null; + unset($url['base']); + } + if (isset($url['full_base']) && $url['full_base'] === true) { + $full = true; + unset($url['full_base']); + } + if (isset($url['?'])) { + $q = $url['?']; + unset($url['?']); + } + if (isset($url['#'])) { + $frag = '#' . urlencode($url['#']); + unset($url['#']); + } + if (empty($url['action'])) { + if (empty($url['controller']) || $params['controller'] === $url['controller']) { + $url['action'] = $params['action']; + } else { + $url['action'] = 'index'; + } + } + + $prefixExists = (array_intersect_key($url, array_flip($self->__prefixes))); + foreach ($self->__prefixes as $prefix) { + if (!empty($params[$prefix]) && !$prefixExists) { + $url[$prefix] = true; + } elseif (isset($url[$prefix]) && !$url[$prefix]) { + unset($url[$prefix]); + } + if (isset($url[$prefix]) && strpos($url['action'], $prefix) === 0) { + $url['action'] = substr($url['action'], strlen($prefix) + 1); + } + } + + $url += array('controller' => $params['controller'], 'plugin' => $params['plugin']); + + if (isset($url['ext'])) { + $extension = '.' . $url['ext']; + unset($url['ext']); + } + $match = false; + + for ($i = 0, $len = count($self->routes); $i < $len; $i++) { + $originalUrl = $url; + + if (isset($self->routes[$i]->options['persist'], $params)) { + $url = $self->routes[$i]->persistParams($url, $params); + } + + if ($match = $self->routes[$i]->match($url)) { + $output = trim($match, '/'); + break; + } + $url = $originalUrl; + } + if ($match === false) { + $output = $self->_handleNoRoute($url); + } + $output = str_replace('//', '/', $base . '/' . $output); + } else { + if (((strpos($url, '://')) || (strpos($url, 'javascript:') === 0) || (strpos($url, 'mailto:') === 0)) || (!strncmp($url, '#', 1))) { + return $url; + } + if (empty($url)) { + if (!isset($path['here'])) { + $path['here'] = '/'; + } + $output = $path['here']; + } elseif (substr($url, 0, 1) === '/') { + $output = $base . $url; + } else { + $output = $base . '/'; + foreach ($self->__prefixes as $prefix) { + if (isset($params[$prefix])) { + $output .= $prefix . '/'; + break; + } + } + if (!empty($params['plugin']) && $params['plugin'] !== $params['controller']) { + $output .= Inflector::underscore($params['plugin']) . '/'; + } + $output .= Inflector::underscore($params['controller']) . '/' . $url; + } + $output = str_replace('//', '/', $output); + } + if ($full && defined('FULL_BASE_URL')) { + $output = FULL_BASE_URL . $output; + } + if (!empty($extension) && substr($output, -1) === '/') { + $output = substr($output, 0, -1); + } + + return $output . $extension . $self->queryString($q, array(), $escape) . $frag; + } + +/** + * A special fallback method that handles url arrays that cannot match + * any defined routes. + * + * @param array $url A url that didn't match any routes + * @return string A generated url for the array + * @access protected + * @see Router::url() + */ + function _handleNoRoute($url) { + $named = $args = array(); + $skip = array_merge( + array('bare', 'action', 'controller', 'plugin', 'prefix'), + $this->__prefixes + ); + + $keys = array_values(array_diff(array_keys($url), $skip)); + $count = count($keys); + + // Remove this once parsed URL parameters can be inserted into 'pass' + for ($i = 0; $i < $count; $i++) { + if (is_numeric($keys[$i])) { + $args[] = $url[$keys[$i]]; + } else { + $named[$keys[$i]] = $url[$keys[$i]]; + } + } + + list($args, $named) = array(Set::filter($args, true), Set::filter($named, true)); + foreach ($this->__prefixes as $prefix) { + if (!empty($url[$prefix])) { + $url['action'] = str_replace($prefix . '_', '', $url['action']); + break; + } + } + + if (empty($named) && empty($args) && (!isset($url['action']) || $url['action'] === 'index')) { + $url['action'] = null; + } + + $urlOut = array_filter(array($url['controller'], $url['action'])); + + if (isset($url['plugin'])) { + array_unshift($urlOut, $url['plugin']); + } + + foreach ($this->__prefixes as $prefix) { + if (isset($url[$prefix])) { + array_unshift($urlOut, $prefix); + break; + } + } + $output = implode('/', $urlOut); + + if (!empty($args)) { + $output .= '/' . implode('/', $args); + } + + if (!empty($named)) { + foreach ($named as $name => $value) { + $output .= '/' . $name . $this->named['separator'] . $value; + } + } + return $output; + } + +/** + * Takes an array of URL parameters and separates the ones that can be used as named arguments + * + * @param array $params Associative array of URL parameters. + * @param string $controller Name of controller being routed. Used in scoping. + * @param string $action Name of action being routed. Used in scoping. + * @return array + * @access public + * @static + */ + function getNamedElements($params, $controller = null, $action = null) { + $self =& Router::getInstance(); + $named = array(); + + foreach ($params as $param => $val) { + if (isset($self->named['rules'][$param])) { + $rule = $self->named['rules'][$param]; + if (Router::matchNamed($param, $val, $rule, compact('controller', 'action'))) { + $named[$param] = $val; + unset($params[$param]); + } + } + } + return array($named, $params); + } + +/** + * Return true if a given named $param's $val matches a given $rule depending on $context. Currently implemented + * rule types are controller, action and match that can be combined with each other. + * + * @param string $param The name of the named parameter + * @param string $val The value of the named parameter + * @param array $rule The rule(s) to apply, can also be a match string + * @param string $context An array with additional context information (controller / action) + * @return boolean + * @access public + * @static + */ + function matchNamed($param, $val, $rule, $context = array()) { + if ($rule === true || $rule === false) { + return $rule; + } + if (is_string($rule)) { + $rule = array('match' => $rule); + } + if (!is_array($rule)) { + return false; + } + + $controllerMatches = !isset($rule['controller'], $context['controller']) || in_array($context['controller'], (array)$rule['controller']); + if (!$controllerMatches) { + return false; + } + $actionMatches = !isset($rule['action'], $context['action']) || in_array($context['action'], (array)$rule['action']); + if (!$actionMatches) { + return false; + } + return (!isset($rule['match']) || preg_match('/' . $rule['match'] . '/', $val)); + } + +/** + * Generates a well-formed querystring from $q + * + * @param mixed $q Query string + * @param array $extra Extra querystring parameters. + * @param bool $escape Whether or not to use escaped & + * @return array + * @access public + * @static + */ + function queryString($q, $extra = array(), $escape = false) { + if (empty($q) && empty($extra)) { + return null; + } + $join = '&'; + if ($escape === true) { + $join = '&'; + } + $out = ''; + + if (is_array($q)) { + $q = array_merge($extra, $q); + } else { + $out = $q; + $q = $extra; + } + $out .= http_build_query($q, null, $join); + if (isset($out[0]) && $out[0] != '?') { + $out = '?' . $out; + } + return $out; + } + +/** + * Reverses a parsed parameter array into a string. Works similarily to Router::url(), but + * Since parsed URL's contain additional 'pass' and 'named' as well as 'url.url' keys. + * Those keys need to be specially handled in order to reverse a params array into a string url. + * + * @param array $param The params array that needs to be reversed. + * @return string The string that is the reversed result of the array + * @access public + * @static + */ + function reverse($params) { + $pass = $params['pass']; + $named = $params['named']; + $url = $params['url']; + unset($params['pass'], $params['named'], $params['paging'], $params['models'], $params['url'], $url['url']); + $params = array_merge($params, $pass, $named); + if (!empty($url)) { + $params['?'] = $url; + } + return Router::url($params); + } + +/** + * Normalizes a URL for purposes of comparison. Will strip the base path off + * and replace any double /'s. It will not unify the casing and underscoring + * of the input value. + * + * @param mixed $url URL to normalize Either an array or a string url. + * @return string Normalized URL + * @access public + * @static + */ + function normalize($url = '/') { + if (is_array($url)) { + $url = Router::url($url); + } elseif (preg_match('/^[a-z\-]+:\/\//', $url)) { + return $url; + } + $paths = Router::getPaths(); + + if (!empty($paths['base']) && stristr($url, $paths['base'])) { + $url = preg_replace('/^' . preg_quote($paths['base'], '/') . '/', '', $url, 1); + } + $url = '/' . $url; + + while (strpos($url, '//') !== false) { + $url = str_replace('//', '/', $url); + } + $url = preg_replace('/(?:(\/$))/', '', $url); + + if (empty($url)) { + return '/'; + } + return $url; + } + +/** + * Returns the route matching the current request URL. + * + * @return CakeRoute Matching route object. + * @access public + * @static + */ + function &requestRoute() { + $self =& Router::getInstance(); + return $self->__currentRoute[0]; + } + +/** + * Returns the route matching the current request (useful for requestAction traces) + * + * @return CakeRoute Matching route object. + * @access public + * @static + */ + function ¤tRoute() { + $self =& Router::getInstance(); + return $self->__currentRoute[count($self->__currentRoute) - 1]; + } + +/** + * Removes the plugin name from the base URL. + * + * @param string $base Base URL + * @param string $plugin Plugin name + * @return base url with plugin name removed if present + * @access public + * @static + */ + function stripPlugin($base, $plugin = null) { + if ($plugin != null) { + $base = preg_replace('/(?:' . $plugin . ')/', '', $base); + $base = str_replace('//', '', $base); + $pos1 = strrpos($base, '/'); + $char = strlen($base) - 1; + + if ($pos1 === $char) { + $base = substr($base, 0, $char); + } + } + return $base; + } + +/** + * Instructs the router to parse out file extensions from the URL. For example, + * http://example.com/posts.rss would yield an file extension of "rss". + * The file extension itself is made available in the controller as + * $this->params['url']['ext'], and is used by the RequestHandler component to + * automatically switch to alternate layouts and templates, and load helpers + * corresponding to the given content, i.e. RssHelper. + * + * A list of valid extension can be passed to this method, i.e. Router::parseExtensions('rss', 'xml'); + * If no parameters are given, anything after the first . (dot) after the last / in the URL will be + * parsed, excluding querystring parameters (i.e. ?q=...). + * + * @access public + * @return void + * @static + */ + function parseExtensions() { + $self =& Router::getInstance(); + $self->__parseExtensions = true; + if (func_num_args() > 0) { + $self->__validExtensions = func_get_args(); + } + } + +/** + * Takes an passed params and converts it to args + * + * @param array $params + * @return array Array containing passed and named parameters + * @access public + * @static + */ + function getArgs($args, $options = array()) { + $self =& Router::getInstance(); + $pass = $named = array(); + $args = explode('/', $args); + + $greedy = isset($options['greedy']) ? $options['greedy'] : $self->named['greedy']; + $context = array(); + if (isset($options['context'])) { + $context = $options['context']; + } + $rules = $self->named['rules']; + if (isset($options['named'])) { + $greedy = isset($options['greedy']) && $options['greedy'] === true; + foreach ((array)$options['named'] as $key => $val) { + if (is_numeric($key)) { + $rules[$val] = true; + continue; + } + $rules[$key] = $val; + } + } + + foreach ($args as $param) { + if (empty($param) && $param !== '0' && $param !== 0) { + continue; + } + + $separatorIsPresent = strpos($param, $self->named['separator']) !== false; + if ((!isset($options['named']) || !empty($options['named'])) && $separatorIsPresent) { + list($key, $val) = explode($self->named['separator'], $param, 2); + $hasRule = isset($rules[$key]); + $passIt = (!$hasRule && !$greedy) || ($hasRule && !$self->matchNamed($key, $val, $rules[$key], $context)); + if ($passIt) { + $pass[] = $param; + } else { + $named[$key] = $val; + } + } else { + $pass[] = $param; + } + } + return compact('pass', 'named'); + } +} + +/** + * A single Route used by the Router to connect requests to + * parameter maps. + * + * Not normally created as a standalone. Use Router::connect() to create + * Routes for your application. + * + * @package cake.libs + * @since 1.3.0 + * @see Router::connect() + */ +class CakeRoute { + +/** + * An array of named segments in a Route. + * `/:controller/:action/:id` has 3 key elements + * + * @var array + * @access public + */ + var $keys = array(); + +/** + * An array of additional parameters for the Route. + * + * @var array + * @access public + */ + var $options = array(); + +/** + * Default parameters for a Route + * + * @var array + * @access public + */ + var $defaults = array(); + +/** + * The routes template string. + * + * @var string + * @access public + */ + var $template = null; + +/** + * Is this route a greedy route? Greedy routes have a `/*` in their + * template + * + * @var string + * @access protected + */ + var $_greedy = false; + +/** + * The compiled route regular expresssion + * + * @var string + * @access protected + */ + var $_compiledRoute = null; + +/** + * HTTP header shortcut map. Used for evaluating header-based route expressions. + * + * @var array + * @access private + */ + var $__headerMap = array( + 'type' => 'content_type', + 'method' => 'request_method', + 'server' => 'server_name' + ); + +/** + * Constructor for a Route + * + * @param string $template Template string with parameter placeholders + * @param array $defaults Array of defaults for the route. + * @param string $params Array of parameters and additional options for the Route + * @return void + * @access public + */ + function CakeRoute($template, $defaults = array(), $options = array()) { + $this->template = $template; + $this->defaults = (array)$defaults; + $this->options = (array)$options; + } + +/** + * Check if a Route has been compiled into a regular expression. + * + * @return boolean + * @access public + */ + function compiled() { + return !empty($this->_compiledRoute); + } + +/** + * Compiles the route's regular expression. Modifies defaults property so all necessary keys are set + * and populates $this->names with the named routing elements. + * + * @return array Returns a string regular expression of the compiled route. + * @access public + */ + function compile() { + if ($this->compiled()) { + return $this->_compiledRoute; + } + $this->_writeRoute(); + return $this->_compiledRoute; + } + +/** + * Builds a route regular expression. Uses the template, defaults and options + * properties to compile a regular expression that can be used to parse request strings. + * + * @return void + * @access protected + */ + function _writeRoute() { + if (empty($this->template) || ($this->template === '/')) { + $this->_compiledRoute = '#^/*$#'; + $this->keys = array(); + return; + } + $route = $this->template; + $names = $routeParams = array(); + $parsed = preg_quote($this->template, '#'); + + preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $route, $namedElements); + foreach ($namedElements[1] as $i => $name) { + $search = '\\' . $namedElements[0][$i]; + if (isset($this->options[$name])) { + $option = null; + if ($name !== 'plugin' && array_key_exists($name, $this->defaults)) { + $option = '?'; + } + $slashParam = '/\\' . $namedElements[0][$i]; + if (strpos($parsed, $slashParam) !== false) { + $routeParams[$slashParam] = '(?:/(?P<' . $name . '>' . $this->options[$name] . ')' . $option . ')' . $option; + } else { + $routeParams[$search] = '(?:(?P<' . $name . '>' . $this->options[$name] . ')' . $option . ')' . $option; + } + } else { + $routeParams[$search] = '(?:(?P<' . $name . '>[^/]+))'; + } + $names[] = $name; + } + if (preg_match('#\/\*$#', $route, $m)) { + $parsed = preg_replace('#/\\\\\*$#', '(?:/(?P<_args_>.*))?', $parsed); + $this->_greedy = true; + } + krsort($routeParams); + $parsed = str_replace(array_keys($routeParams), array_values($routeParams), $parsed); + $this->_compiledRoute = '#^' . $parsed . '[/]*$#'; + $this->keys = $names; + } + +/** + * Checks to see if the given URL can be parsed by this route. + * If the route can be parsed an array of parameters will be returned if not + * false will be returned. String urls are parsed if they match a routes regular expression. + * + * @param string $url The url to attempt to parse. + * @return mixed Boolean false on failure, otherwise an array or parameters + * @access public + */ + function parse($url) { + if (!$this->compiled()) { + $this->compile(); + } + if (!preg_match($this->_compiledRoute, $url, $route)) { + return false; + } else { + foreach ($this->defaults as $key => $val) { + if ($key[0] === '[' && preg_match('/^\[(\w+)\]$/', $key, $header)) { + if (isset($this->__headerMap[$header[1]])) { + $header = $this->__headerMap[$header[1]]; + } else { + $header = 'http_' . $header[1]; + } + + $val = (array)$val; + $h = false; + + foreach ($val as $v) { + if (env(strtoupper($header)) === $v) { + $h = true; + } + } + if (!$h) { + return false; + } + } + } + array_shift($route); + $count = count($this->keys); + for ($i = 0; $i <= $count; $i++) { + unset($route[$i]); + } + $route['pass'] = $route['named'] = array(); + $route += $this->defaults; + + //move numerically indexed elements from the defaults into pass. + foreach ($route as $key => $value) { + if (is_integer($key)) { + $route['pass'][] = $value; + unset($route[$key]); + } + } + return $route; + } + } + +/** + * Apply persistent parameters to a url array. Persistant parameters are a special + * key used during route creation to force route parameters to persist when omitted from + * a url array. + * + * @param array $url The array to apply persistent parameters to. + * @param array $params An array of persistent values to replace persistent ones. + * @return array An array with persistent parameters applied. + * @access public + */ + function persistParams($url, $params) { + foreach ($this->options['persist'] as $persistKey) { + if (array_key_exists($persistKey, $params) && !isset($url[$persistKey])) { + $url[$persistKey] = $params[$persistKey]; + } + } + return $url; + } + +/** + * Attempt to match a url array. If the url matches the route parameters + settings, then + * return a generated string url. If the url doesn't match the route parameters false will be returned. + * This method handles the reverse routing or conversion of url arrays into string urls. + * + * @param array $url An array of parameters to check matching with. + * @return mixed Either a string url for the parameters if they match or false. + * @access public + */ + function match($url) { + if (!$this->compiled()) { + $this->compile(); + } + $defaults = $this->defaults; + + if (isset($defaults['prefix'])) { + $url['prefix'] = $defaults['prefix']; + } + + //check that all the key names are in the url + $keyNames = array_flip($this->keys); + if (array_intersect_key($keyNames, $url) != $keyNames) { + return false; + } + + $diffUnfiltered = Set::diff($url, $defaults); + $diff = array(); + + foreach ($diffUnfiltered as $key => $var) { + if ($var === 0 || $var === '0' || !empty($var)) { + $diff[$key] = $var; + } + } + + //if a not a greedy route, no extra params are allowed. + if (!$this->_greedy && array_diff_key($diff, $keyNames) != array()) { + return false; + } + + //remove defaults that are also keys. They can cause match failures + foreach ($this->keys as $key) { + unset($defaults[$key]); + } + $filteredDefaults = array_filter($defaults); + + //if the difference between the url diff and defaults contains keys from defaults its not a match + if (array_intersect_key($filteredDefaults, $diffUnfiltered) !== array()) { + return false; + } + + $passedArgsAndParams = array_diff_key($diff, $filteredDefaults, $keyNames); + list($named, $params) = Router::getNamedElements($passedArgsAndParams, $url['controller'], $url['action']); + + //remove any pass params, they have numeric indexes, skip any params that are in the defaults + $pass = array(); + $i = 0; + while (isset($url[$i])) { + if (!isset($diff[$i])) { + $i++; + continue; + } + $pass[] = $url[$i]; + unset($url[$i], $params[$i]); + $i++; + } + + //still some left over parameters that weren't named or passed args, bail. + if (!empty($params)) { + return false; + } + + //check patterns for routed params + if (!empty($this->options)) { + foreach ($this->options as $key => $pattern) { + if (array_key_exists($key, $url) && !preg_match('#^' . $pattern . '$#', $url[$key])) { + return false; + } + } + } + return $this->_writeUrl(array_merge($url, compact('pass', 'named'))); + } + +/** + * Converts a matching route array into a url string. Composes the string url using the template + * used to create the route. + * + * @param array $params The params to convert to a string url. + * @return string Composed route string. + * @access protected + */ + function _writeUrl($params) { + if (isset($params['prefix'], $params['action'])) { + $params['action'] = str_replace($params['prefix'] . '_', '', $params['action']); + unset($params['prefix']); + } + + if (is_array($params['pass'])) { + $params['pass'] = implode('/', $params['pass']); + } + + $instance =& Router::getInstance(); + $separator = $instance->named['separator']; + + if (!empty($params['named']) && is_array($params['named'])) { + $named = array(); + foreach ($params['named'] as $key => $value) { + $named[] = $key . $separator . $value; + } + $params['pass'] = $params['pass'] . '/' . implode('/', $named); + } + $out = $this->template; + + $search = $replace = array(); + foreach ($this->keys as $key) { + $string = null; + if (isset($params[$key])) { + $string = $params[$key]; + } elseif (strpos($out, $key) != strlen($out) - strlen($key)) { + $key .= '/'; + } + $search[] = ':' . $key; + $replace[] = $string; + } + $out = str_replace($search, $replace, $out); + + if (strpos($this->template, '*')) { + $out = str_replace('*', $params['pass'], $out); + } + $out = str_replace('//', '/', $out); + return $out; + } +} + +/** + * Plugin short route, that copies the plugin param to the controller parameters + * It is used for supporting /:plugin routes. + * + * @package cake.libs + */ +class PluginShortRoute extends CakeRoute { + +/** + * Parses a string url into an array. If a plugin key is found, it will be copied to the + * controller parameter + * + * @param string $url The url to parse + * @return mixed false on failure, or an array of request parameters + */ + function parse($url) { + $params = parent::parse($url); + if (!$params) { + return false; + } + $params['controller'] = $params['plugin']; + return $params; + } + +/** + * Reverse route plugin shortcut urls. If the plugin and controller + * are not the same the match is an auto fail. + * + * @param array $url Array of parameters to convert to a string. + * @return mixed either false or a string url. + */ + function match($url) { + if (isset($url['controller']) && isset($url['plugin']) && $url['plugin'] != $url['controller']) { + return false; + } + $this->defaults['controller'] = $url['controller']; + $result = parent::match($url); + unset($this->defaults['controller']); + return $result; + } +} diff --git a/cake/libs/.svn/text-base/sanitize.php.svn-base b/cake/libs/.svn/text-base/sanitize.php.svn-base new file mode 100644 index 0000000..3878ac5 --- /dev/null +++ b/cake/libs/.svn/text-base/sanitize.php.svn-base @@ -0,0 +1,348 @@ + $clean) { + $cleaned[$key] = preg_replace("/[^{$allow}a-zA-Z0-9]/", '', $clean); + } + } else { + $cleaned = preg_replace("/[^{$allow}a-zA-Z0-9]/", '', $string); + } + return $cleaned; + } + +/** + * Makes a string SQL-safe. + * + * @param string $string String to sanitize + * @param string $connection Database connection being used + * @return string SQL safe string + * @access public + * @static + */ + function escape($string, $connection = 'default') { + $db =& ConnectionManager::getDataSource($connection); + if (is_numeric($string) || $string === null || is_bool($string)) { + return $string; + } + $string = substr($db->value($string), 1); + $string = substr($string, 0, -1); + return $string; + } + +/** + * Returns given string safe for display as HTML. Renders entities. + * + * strip_tags() does not validating HTML syntax or structure, so it might strip whole passages + * with broken HTML. + * + * ### Options: + * + * - remove (boolean) if true strips all HTML tags before encoding + * - charset (string) the charset used to encode the string + * - quotes (int) see http://php.net/manual/en/function.htmlentities.php + * + * @param string $string String from where to strip tags + * @param array $options Array of options to use. + * @return string Sanitized string + * @access public + * @static + */ + function html($string, $options = array()) { + static $defaultCharset = false; + if ($defaultCharset === false) { + $defaultCharset = Configure::read('App.encoding'); + if ($defaultCharset === null) { + $defaultCharset = 'UTF-8'; + } + } + $default = array( + 'remove' => false, + 'charset' => $defaultCharset, + 'quotes' => ENT_QUOTES + ); + + $options = array_merge($default, $options); + + if ($options['remove']) { + $string = strip_tags($string); + } + + return htmlentities($string, $options['quotes'], $options['charset']); + } + +/** + * Strips extra whitespace from output + * + * @param string $str String to sanitize + * @return string whitespace sanitized string + * @access public + * @static + */ + function stripWhitespace($str) { + $r = preg_replace('/[\n\r\t]+/', '', $str); + return preg_replace('/\s{2,}/', ' ', $r); + } + +/** + * Strips image tags from output + * + * @param string $str String to sanitize + * @return string Sting with images stripped. + * @access public + * @static + */ + function stripImages($str) { + $str = preg_replace('/(]*>)(]+alt=")([^"]*)("[^>]*>)(<\/a>)/i', '$1$3$5
      ', $str); + $str = preg_replace('/(]+alt=")([^"]*)("[^>]*>)/i', '$2
      ', $str); + $str = preg_replace('/]*>/i', '', $str); + return $str; + } + +/** + * Strips scripts and stylesheets from output + * + * @param string $str String to sanitize + * @return string String with ', + 'javascriptstart' => '', + 'javascriptend' => '' + ); + +/** + * Breadcrumbs. + * + * @var array + * @access protected + */ + var $_crumbs = array(); + +/** + * Names of script files that have been included once + * + * @var array + * @access private + */ + var $__includedScripts = array(); +/** + * Options for the currently opened script block buffer if any. + * + * @var array + * @access protected + */ + var $_scriptBlockOptions = array(); +/** + * Document type definitions + * + * @var array + * @access private + */ + var $__docTypes = array( + 'html4-strict' => '', + 'html4-trans' => '', + 'html4-frame' => '', + 'xhtml-strict' => '', + 'xhtml-trans' => '', + 'xhtml-frame' => '', + 'xhtml11' => '' + ); + +/** + * Adds a link to the breadcrumbs array. + * + * @param string $name Text for link + * @param string $link URL for link (if empty it won't be a link) + * @param mixed $options Link attributes e.g. array('id'=>'selected') + * @return void + * @see HtmlHelper::link() for details on $options that can be used. + * @access public + */ + function addCrumb($name, $link = null, $options = null) { + $this->_crumbs[] = array($name, $link, $options); + } + +/** + * Returns a doctype string. + * + * Possible doctypes: + * + * - html4-strict: HTML4 Strict. + * - html4-trans: HTML4 Transitional. + * - html4-frame: HTML4 Frameset. + * - xhtml-strict: XHTML1 Strict. + * - xhtml-trans: XHTML1 Transitional. + * - xhtml-frame: XHTML1 Frameset. + * - xhtml11: XHTML1.1. + * + * @param string $type Doctype to use. + * @return string Doctype string + * @access public + * @link http://book.cakephp.org/view/1439/docType + */ + function docType($type = 'xhtml-strict') { + if (isset($this->__docTypes[$type])) { + return $this->__docTypes[$type]; + } + return null; + } + +/** + * Creates a link to an external resource and handles basic meta tags + * + * ### Options + * + * - `inline` Whether or not the link element should be output inline, or in scripts_for_layout. + * + * @param string $type The title of the external resource + * @param mixed $url The address of the external resource or string for content attribute + * @param array $options Other attributes for the generated tag. If the type attribute is html, + * rss, atom, or icon, the mime-type is returned. + * @return string A completed `` element. + * @access public + * @link http://book.cakephp.org/view/1438/meta + */ + function meta($type, $url = null, $options = array()) { + $inline = isset($options['inline']) ? $options['inline'] : true; + unset($options['inline']); + + if (!is_array($type)) { + $types = array( + 'rss' => array('type' => 'application/rss+xml', 'rel' => 'alternate', 'title' => $type, 'link' => $url), + 'atom' => array('type' => 'application/atom+xml', 'title' => $type, 'link' => $url), + 'icon' => array('type' => 'image/x-icon', 'rel' => 'icon', 'link' => $url), + 'keywords' => array('name' => 'keywords', 'content' => $url), + 'description' => array('name' => 'description', 'content' => $url), + ); + + if ($type === 'icon' && $url === null) { + $types['icon']['link'] = $this->webroot('favicon.ico'); + } + + if (isset($types[$type])) { + $type = $types[$type]; + } elseif (!isset($options['type']) && $url !== null) { + if (is_array($url) && isset($url['ext'])) { + $type = $types[$url['ext']]; + } else { + $type = $types['rss']; + } + } elseif (isset($options['type']) && isset($types[$options['type']])) { + $type = $types[$options['type']]; + unset($options['type']); + } else { + $type = array(); + } + } elseif ($url !== null) { + $inline = $url; + } + $options = array_merge($type, $options); + $out = null; + + if (isset($options['link'])) { + if (isset($options['rel']) && $options['rel'] === 'icon') { + $out = sprintf($this->tags['metalink'], $options['link'], $this->_parseAttributes($options, array('link'), ' ', ' ')); + $options['rel'] = 'shortcut icon'; + } else { + $options['link'] = $this->url($options['link'], true); + } + $out .= sprintf($this->tags['metalink'], $options['link'], $this->_parseAttributes($options, array('link'), ' ', ' ')); + } else { + $out = sprintf($this->tags['meta'], $this->_parseAttributes($options, array('type'), ' ', ' ')); + } + + if ($inline) { + return $out; + } else { + $view =& ClassRegistry::getObject('view'); + $view->addScript($out); + } + } + +/** + * Returns a charset META-tag. + * + * @param string $charset The character set to be used in the meta tag. If empty, + * The App.encoding value will be used. Example: "utf-8". + * @return string A meta tag containing the specified character set. + * @access public + * @link http://book.cakephp.org/view/1436/charset + */ + function charset($charset = null) { + if (empty($charset)) { + $charset = strtolower(Configure::read('App.encoding')); + } + return sprintf($this->tags['charset'], (!empty($charset) ? $charset : 'utf-8')); + } + +/** + * Creates an HTML link. + * + * If $url starts with "http://" this is treated as an external link. Else, + * it is treated as a path to controller/action and parsed with the + * HtmlHelper::url() method. + * + * If the $url is empty, $title is used instead. + * + * ### Options + * + * - `escape` Set to false to disable escaping of title and attributes. + * + * @param string $title The content to be wrapped by tags. + * @param mixed $url Cake-relative URL or array of URL parameters, or external URL (starts with http://) + * @param array $options Array of HTML attributes. + * @param string $confirmMessage JavaScript confirmation message. + * @return string An `` element. + * @access public + * @link http://book.cakephp.org/view/1442/link + */ + function link($title, $url = null, $options = array(), $confirmMessage = false) { + $escapeTitle = true; + if ($url !== null) { + $url = $this->url($url); + } else { + $url = $this->url($title); + $title = $url; + $escapeTitle = false; + } + + if (isset($options['escape'])) { + $escapeTitle = $options['escape']; + } + + if ($escapeTitle === true) { + $title = h($title); + } elseif (is_string($escapeTitle)) { + $title = htmlentities($title, ENT_QUOTES, $escapeTitle); + } + + if (!empty($options['confirm'])) { + $confirmMessage = $options['confirm']; + unset($options['confirm']); + } + if ($confirmMessage) { + $confirmMessage = str_replace("'", "\'", $confirmMessage); + $confirmMessage = str_replace('"', '\"', $confirmMessage); + $options['onclick'] = "return confirm('{$confirmMessage}');"; + } elseif (isset($options['default']) && $options['default'] == false) { + if (isset($options['onclick'])) { + $options['onclick'] .= ' event.returnValue = false; return false;'; + } else { + $options['onclick'] = 'event.returnValue = false; return false;'; + } + unset($options['default']); + } + return sprintf($this->tags['link'], $url, $this->_parseAttributes($options), $title); + } + +/** + * Creates a link element for CSS stylesheets. + * + * ### Options + * + * - `inline` If set to false, the generated tag appears in the head tag of the layout. Defaults to true + * + * @param mixed $path The name of a CSS style sheet or an array containing names of + * CSS stylesheets. If `$path` is prefixed with '/', the path will be relative to the webroot + * of your application. Otherwise, the path will be relative to your CSS path, usually webroot/css. + * @param string $rel Rel attribute. Defaults to "stylesheet". If equal to 'import' the stylesheet will be imported. + * @param array $options Array of HTML attributes. + * @return string CSS or ', + 'charset' => '', + 'ul' => '%s', + 'ol' => '%s', + 'li' => '%s', + 'error' => '%s
      ', + 'javascriptblock' => '', + 'javascriptstart' => '', + 'javascriptend' => '' + ); + +/** + * Breadcrumbs. + * + * @var array + * @access protected + */ + var $_crumbs = array(); + +/** + * Names of script files that have been included once + * + * @var array + * @access private + */ + var $__includedScripts = array(); +/** + * Options for the currently opened script block buffer if any. + * + * @var array + * @access protected + */ + var $_scriptBlockOptions = array(); +/** + * Document type definitions + * + * @var array + * @access private + */ + var $__docTypes = array( + 'html4-strict' => '', + 'html4-trans' => '', + 'html4-frame' => '', + 'xhtml-strict' => '', + 'xhtml-trans' => '', + 'xhtml-frame' => '', + 'xhtml11' => '' + ); + +/** + * Adds a link to the breadcrumbs array. + * + * @param string $name Text for link + * @param string $link URL for link (if empty it won't be a link) + * @param mixed $options Link attributes e.g. array('id'=>'selected') + * @return void + * @see HtmlHelper::link() for details on $options that can be used. + * @access public + */ + function addCrumb($name, $link = null, $options = null) { + $this->_crumbs[] = array($name, $link, $options); + } + +/** + * Returns a doctype string. + * + * Possible doctypes: + * + * - html4-strict: HTML4 Strict. + * - html4-trans: HTML4 Transitional. + * - html4-frame: HTML4 Frameset. + * - xhtml-strict: XHTML1 Strict. + * - xhtml-trans: XHTML1 Transitional. + * - xhtml-frame: XHTML1 Frameset. + * - xhtml11: XHTML1.1. + * + * @param string $type Doctype to use. + * @return string Doctype string + * @access public + * @link http://book.cakephp.org/view/1439/docType + */ + function docType($type = 'xhtml-strict') { + if (isset($this->__docTypes[$type])) { + return $this->__docTypes[$type]; + } + return null; + } + +/** + * Creates a link to an external resource and handles basic meta tags + * + * ### Options + * + * - `inline` Whether or not the link element should be output inline, or in scripts_for_layout. + * + * @param string $type The title of the external resource + * @param mixed $url The address of the external resource or string for content attribute + * @param array $options Other attributes for the generated tag. If the type attribute is html, + * rss, atom, or icon, the mime-type is returned. + * @return string A completed `` element. + * @access public + * @link http://book.cakephp.org/view/1438/meta + */ + function meta($type, $url = null, $options = array()) { + $inline = isset($options['inline']) ? $options['inline'] : true; + unset($options['inline']); + + if (!is_array($type)) { + $types = array( + 'rss' => array('type' => 'application/rss+xml', 'rel' => 'alternate', 'title' => $type, 'link' => $url), + 'atom' => array('type' => 'application/atom+xml', 'title' => $type, 'link' => $url), + 'icon' => array('type' => 'image/x-icon', 'rel' => 'icon', 'link' => $url), + 'keywords' => array('name' => 'keywords', 'content' => $url), + 'description' => array('name' => 'description', 'content' => $url), + ); + + if ($type === 'icon' && $url === null) { + $types['icon']['link'] = $this->webroot('favicon.ico'); + } + + if (isset($types[$type])) { + $type = $types[$type]; + } elseif (!isset($options['type']) && $url !== null) { + if (is_array($url) && isset($url['ext'])) { + $type = $types[$url['ext']]; + } else { + $type = $types['rss']; + } + } elseif (isset($options['type']) && isset($types[$options['type']])) { + $type = $types[$options['type']]; + unset($options['type']); + } else { + $type = array(); + } + } elseif ($url !== null) { + $inline = $url; + } + $options = array_merge($type, $options); + $out = null; + + if (isset($options['link'])) { + if (isset($options['rel']) && $options['rel'] === 'icon') { + $out = sprintf($this->tags['metalink'], $options['link'], $this->_parseAttributes($options, array('link'), ' ', ' ')); + $options['rel'] = 'shortcut icon'; + } else { + $options['link'] = $this->url($options['link'], true); + } + $out .= sprintf($this->tags['metalink'], $options['link'], $this->_parseAttributes($options, array('link'), ' ', ' ')); + } else { + $out = sprintf($this->tags['meta'], $this->_parseAttributes($options, array('type'), ' ', ' ')); + } + + if ($inline) { + return $out; + } else { + $view =& ClassRegistry::getObject('view'); + $view->addScript($out); + } + } + +/** + * Returns a charset META-tag. + * + * @param string $charset The character set to be used in the meta tag. If empty, + * The App.encoding value will be used. Example: "utf-8". + * @return string A meta tag containing the specified character set. + * @access public + * @link http://book.cakephp.org/view/1436/charset + */ + function charset($charset = null) { + if (empty($charset)) { + $charset = strtolower(Configure::read('App.encoding')); + } + return sprintf($this->tags['charset'], (!empty($charset) ? $charset : 'utf-8')); + } + +/** + * Creates an HTML link. + * + * If $url starts with "http://" this is treated as an external link. Else, + * it is treated as a path to controller/action and parsed with the + * HtmlHelper::url() method. + * + * If the $url is empty, $title is used instead. + * + * ### Options + * + * - `escape` Set to false to disable escaping of title and attributes. + * + * @param string $title The content to be wrapped by tags. + * @param mixed $url Cake-relative URL or array of URL parameters, or external URL (starts with http://) + * @param array $options Array of HTML attributes. + * @param string $confirmMessage JavaScript confirmation message. + * @return string An `` element. + * @access public + * @link http://book.cakephp.org/view/1442/link + */ + function link($title, $url = null, $options = array(), $confirmMessage = false) { + $escapeTitle = true; + if ($url !== null) { + $url = $this->url($url); + } else { + $url = $this->url($title); + $title = $url; + $escapeTitle = false; + } + + if (isset($options['escape'])) { + $escapeTitle = $options['escape']; + } + + if ($escapeTitle === true) { + $title = h($title); + } elseif (is_string($escapeTitle)) { + $title = htmlentities($title, ENT_QUOTES, $escapeTitle); + } + + if (!empty($options['confirm'])) { + $confirmMessage = $options['confirm']; + unset($options['confirm']); + } + if ($confirmMessage) { + $confirmMessage = str_replace("'", "\'", $confirmMessage); + $confirmMessage = str_replace('"', '\"', $confirmMessage); + $options['onclick'] = "return confirm('{$confirmMessage}');"; + } elseif (isset($options['default']) && $options['default'] == false) { + if (isset($options['onclick'])) { + $options['onclick'] .= ' event.returnValue = false; return false;'; + } else { + $options['onclick'] = 'event.returnValue = false; return false;'; + } + unset($options['default']); + } + return sprintf($this->tags['link'], $url, $this->_parseAttributes($options), $title); + } + +/** + * Creates a link element for CSS stylesheets. + * + * ### Options + * + * - `inline` If set to false, the generated tag appears in the head tag of the layout. Defaults to true + * + * @param mixed $path The name of a CSS style sheet or an array containing names of + * CSS stylesheets. If `$path` is prefixed with '/', the path will be relative to the webroot + * of your application. Otherwise, the path will be relative to your CSS path, usually webroot/css. + * @param string $rel Rel attribute. Defaults to "stylesheet". If equal to 'import' the stylesheet will be imported. + * @param array $options Array of HTML attributes. + * @return string CSS or + + +

      + + \ No newline at end of file diff --git a/cake/libs/view/layouts/ajax.ctp b/cake/libs/view/layouts/ajax.ctp new file mode 100644 index 0000000..6d1bb5a --- /dev/null +++ b/cake/libs/view/layouts/ajax.ctp @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/cake/libs/view/layouts/default.ctp b/cake/libs/view/layouts/default.ctp new file mode 100644 index 0000000..ba5fa7e --- /dev/null +++ b/cake/libs/view/layouts/default.ctp @@ -0,0 +1,59 @@ + + + + + Html->charset(); ?> + + <?php __('CakePHP: the rapid development php framework:'); ?> + <?php echo $title_for_layout; ?> + + Html->meta('icon'); + + echo $this->Html->css('cake.generic'); + + echo $scripts_for_layout; + ?> + + +
      + +
      + + Session->flash(); ?> + + + +
      + +
      + element('sql_dump'); ?> + + \ No newline at end of file diff --git a/cake/libs/view/layouts/email/.svn/entries b/cake/libs/view/layouts/email/.svn/entries new file mode 100644 index 0000000..d156fb7 --- /dev/null +++ b/cake/libs/view/layouts/email/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/email +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +html +dir + +text +dir + diff --git a/cake/libs/view/layouts/email/html/.svn/entries b/cake/libs/view/layouts/email/html/.svn/entries new file mode 100644 index 0000000..de64def --- /dev/null +++ b/cake/libs/view/layouts/email/html/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/email/html +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:28.000000Z +1840d1274ebf7f0562d1b989817f75f5 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +944 + diff --git a/cake/libs/view/layouts/email/html/.svn/text-base/default.ctp.svn-base b/cake/libs/view/layouts/email/html/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..b2025d4 --- /dev/null +++ b/cake/libs/view/layouts/email/html/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,30 @@ + + + + + <?php echo $title_for_layout;?> + + + + +

      This email was sent using the CakePHP Framework

      + + \ No newline at end of file diff --git a/cake/libs/view/layouts/email/html/default.ctp b/cake/libs/view/layouts/email/html/default.ctp new file mode 100644 index 0000000..b2025d4 --- /dev/null +++ b/cake/libs/view/layouts/email/html/default.ctp @@ -0,0 +1,30 @@ + + + + + <?php echo $title_for_layout;?> + + + + +

      This email was sent using the CakePHP Framework

      + + \ No newline at end of file diff --git a/cake/libs/view/layouts/email/text/.svn/entries b/cake/libs/view/layouts/email/text/.svn/entries new file mode 100644 index 0000000..72e517d --- /dev/null +++ b/cake/libs/view/layouts/email/text/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/email/text +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:28.000000Z +d5695b309b2ea4f4e69e8a7476690d00 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +780 + diff --git a/cake/libs/view/layouts/email/text/.svn/text-base/default.ctp.svn-base b/cake/libs/view/layouts/email/text/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..3362a24 --- /dev/null +++ b/cake/libs/view/layouts/email/text/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,22 @@ + + + +This email was sent using the CakePHP Framework, http://cakephp.org. diff --git a/cake/libs/view/layouts/email/text/default.ctp b/cake/libs/view/layouts/email/text/default.ctp new file mode 100644 index 0000000..3362a24 --- /dev/null +++ b/cake/libs/view/layouts/email/text/default.ctp @@ -0,0 +1,22 @@ + + + +This email was sent using the CakePHP Framework, http://cakephp.org. diff --git a/cake/libs/view/layouts/flash.ctp b/cake/libs/view/layouts/flash.ctp new file mode 100644 index 0000000..99d9953 --- /dev/null +++ b/cake/libs/view/layouts/flash.ctp @@ -0,0 +1,38 @@ + + + + +Html->charset(); ?> +<?php echo $page_title; ?> + + + + + + + +

      + + \ No newline at end of file diff --git a/cake/libs/view/layouts/js/.svn/entries b/cake/libs/view/layouts/js/.svn/entries new file mode 100644 index 0000000..504e0e2 --- /dev/null +++ b/cake/libs/view/layouts/js/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/js +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:28.000000Z +f3e98ecc6d13ed10de31ae6c0d94f9fd +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +109 + diff --git a/cake/libs/view/layouts/js/.svn/text-base/default.ctp.svn-base b/cake/libs/view/layouts/js/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..d94dc90 --- /dev/null +++ b/cake/libs/view/layouts/js/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/cake/libs/view/layouts/js/default.ctp b/cake/libs/view/layouts/js/default.ctp new file mode 100644 index 0000000..d94dc90 --- /dev/null +++ b/cake/libs/view/layouts/js/default.ctp @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/cake/libs/view/layouts/rss/.svn/entries b/cake/libs/view/layouts/rss/.svn/entries new file mode 100644 index 0000000..960cb38 --- /dev/null +++ b/cake/libs/view/layouts/rss/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/rss +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:28.000000Z +91ec6f8d8c932e8b01905baf54ce2603 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +255 + diff --git a/cake/libs/view/layouts/rss/.svn/text-base/default.ctp.svn-base b/cake/libs/view/layouts/rss/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..70dcb6f --- /dev/null +++ b/cake/libs/view/layouts/rss/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,16 @@ +Rss->header(); + +if (!isset($channel)) { + $channel = array(); +} +if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout; +} + +echo $this->Rss->document( + $this->Rss->channel( + array(), $channel, $content_for_layout + ) +); +?> \ No newline at end of file diff --git a/cake/libs/view/layouts/rss/default.ctp b/cake/libs/view/layouts/rss/default.ctp new file mode 100644 index 0000000..70dcb6f --- /dev/null +++ b/cake/libs/view/layouts/rss/default.ctp @@ -0,0 +1,16 @@ +Rss->header(); + +if (!isset($channel)) { + $channel = array(); +} +if (!isset($channel['title'])) { + $channel['title'] = $title_for_layout; +} + +echo $this->Rss->document( + $this->Rss->channel( + array(), $channel, $content_for_layout + ) +); +?> \ No newline at end of file diff --git a/cake/libs/view/layouts/xml/.svn/entries b/cake/libs/view/layouts/xml/.svn/entries new file mode 100644 index 0000000..2f0f198 --- /dev/null +++ b/cake/libs/view/layouts/xml/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/layouts/xml +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +default.ctp +file + + + + +2010-08-30T06:36:28.000000Z +385aa21d963891c74808da1e616ab912 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +70 + diff --git a/cake/libs/view/layouts/xml/.svn/text-base/default.ctp.svn-base b/cake/libs/view/layouts/xml/.svn/text-base/default.ctp.svn-base new file mode 100644 index 0000000..07f603d --- /dev/null +++ b/cake/libs/view/layouts/xml/.svn/text-base/default.ctp.svn-base @@ -0,0 +1,2 @@ +Xml->header(); ?> + \ No newline at end of file diff --git a/cake/libs/view/layouts/xml/default.ctp b/cake/libs/view/layouts/xml/default.ctp new file mode 100644 index 0000000..07f603d --- /dev/null +++ b/cake/libs/view/layouts/xml/default.ctp @@ -0,0 +1,2 @@ +Xml->header(); ?> + \ No newline at end of file diff --git a/cake/libs/view/media.php b/cake/libs/view/media.php new file mode 100644 index 0000000..c8bb613 --- /dev/null +++ b/cake/libs/view/media.php @@ -0,0 +1,285 @@ + 'application/postscript', 'bcpio' => 'application/x-bcpio', 'bin' => 'application/octet-stream', + 'ccad' => 'application/clariscad', 'cdf' => 'application/x-netcdf', 'class' => 'application/octet-stream', + 'cpio' => 'application/x-cpio', 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh', + 'csv' => 'application/csv', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', + 'dms' => 'application/octet-stream', 'doc' => 'application/msword', 'drw' => 'application/drafting', + 'dvi' => 'application/x-dvi', 'dwg' => 'application/acad', 'dxf' => 'application/dxf', + 'dxr' => 'application/x-director', 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', + 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset', + 'flv' => 'video/x-flv', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', + 'bz2' => 'application/x-bzip', '7z' => 'application/x-7z-compressed', 'hdf' => 'application/x-hdf', + 'hqx' => 'application/mac-binhex40', 'ico' => 'image/vnd.microsoft.icon', 'ips' => 'application/x-ipscript', + 'ipx' => 'application/x-ipix', 'js' => 'application/x-javascript', 'latex' => 'application/x-latex', + 'lha' => 'application/octet-stream', 'lsp' => 'application/x-lisp', 'lzh' => 'application/octet-stream', + 'man' => 'application/x-troff-man', 'me' => 'application/x-troff-me', 'mif' => 'application/vnd.mif', + 'ms' => 'application/x-troff-ms', 'nc' => 'application/x-netcdf', 'oda' => 'application/oda', + 'otf' => 'font/otf', 'pdf' => 'application/pdf', + 'pgn' => 'application/x-chess-pgn', 'pot' => 'application/mspowerpoint', 'pps' => 'application/mspowerpoint', + 'ppt' => 'application/mspowerpoint', 'ppz' => 'application/mspowerpoint', 'pre' => 'application/x-freelance', + 'prt' => 'application/pro_eng', 'ps' => 'application/postscript', 'roff' => 'application/x-troff', + 'scm' => 'application/x-lotusscreencam', 'set' => 'application/set', 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', 'sit' => 'application/x-stuffit', 'skd' => 'application/x-koan', + 'skm' => 'application/x-koan', 'skp' => 'application/x-koan', 'skt' => 'application/x-koan', + 'smi' => 'application/smil', 'smil' => 'application/smil', 'sol' => 'application/solids', + 'spl' => 'application/x-futuresplash', 'src' => 'application/x-wais-source', 'step' => 'application/STEP', + 'stl' => 'application/SLA', 'stp' => 'application/STEP', 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', 't' => 'application/x-troff', + 'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'tr' => 'application/x-troff', + 'tsp' => 'application/dsptype', 'ttf' => 'font/ttf', + 'unv' => 'application/i-deas', 'ustar' => 'application/x-ustar', + 'vcd' => 'application/x-cdlink', 'vda' => 'application/vda', 'xlc' => 'application/vnd.ms-excel', + 'xll' => 'application/vnd.ms-excel', 'xlm' => 'application/vnd.ms-excel', 'xls' => 'application/vnd.ms-excel', + 'xlw' => 'application/vnd.ms-excel', 'zip' => 'application/zip', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', 'au' => 'audio/basic', 'kar' => 'audio/midi', 'mid' => 'audio/midi', + 'midi' => 'audio/midi', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mpga' => 'audio/mpeg', + 'ra' => 'audio/x-realaudio', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', 'snd' => 'audio/basic', 'tsi' => 'audio/TSP-audio', 'wav' => 'audio/x-wav', + 'asc' => 'text/plain', 'c' => 'text/plain', 'cc' => 'text/plain', 'css' => 'text/css', 'etx' => 'text/x-setext', + 'f' => 'text/plain', 'f90' => 'text/plain', 'h' => 'text/plain', 'hh' => 'text/plain', 'htm' => 'text/html', + 'html' => 'text/html', 'm' => 'text/plain', 'rtf' => 'text/rtf', 'rtx' => 'text/richtext', 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', 'tsv' => 'text/tab-separated-values', 'tpl' => 'text/template', 'txt' => 'text/plain', + 'xml' => 'text/xml', 'avi' => 'video/x-msvideo', 'fli' => 'video/x-fli', 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', + 'qt' => 'video/quicktime', 'viv' => 'video/vnd.vivo', 'vivo' => 'video/vnd.vivo', 'gif' => 'image/gif', + 'ief' => 'image/ief', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', + 'pbm' => 'image/x-portable-bitmap', 'pgm' => 'image/x-portable-graymap', 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', 'ppm' => 'image/x-portable-pixmap', 'ras' => 'image/cmu-raster', + 'rgb' => 'image/x-rgb', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'xbm' => 'image/x-xbitmap', + 'xpm' => 'image/x-xpixmap', 'xwd' => 'image/x-xwindowdump', 'ice' => 'x-conference/x-cooltalk', + 'iges' => 'model/iges', 'igs' => 'model/iges', 'mesh' => 'model/mesh', 'msh' => 'model/mesh', + 'silo' => 'model/mesh', 'vrml' => 'model/vrml', 'wrl' => 'model/vrml', + 'mime' => 'www/mime', 'pdb' => 'chemical/x-pdb', 'xyz' => 'chemical/x-pdb'); + +/** + * Holds headers sent to browser before rendering media + * + * @var array + * @access protected + */ + var $_headers = array(); + +/** + * Constructor + * + * @param object $controller + */ + function __construct(&$controller) { + parent::__construct($controller); + } + +/** + * Display or download the given file + * + * @return unknown + */ + function render() { + $name = $download = $extension = $id = $modified = $path = $size = $cache = $mimeType = null; + extract($this->viewVars, EXTR_OVERWRITE); + + if ($size) { + $id = $id . '_' . $size; + } + + if (is_dir($path)) { + $path = $path . $id; + } else { + $path = APP . $path . $id; + } + + if (!file_exists($path)) { + header('Content-Type: text/html'); + $this->cakeError('error404'); + } + + if (is_null($name)) { + $name = $id; + } + + if (is_array($mimeType)) { + $this->mimeType = array_merge($this->mimeType, $mimeType); + } + + if (isset($extension) && isset($this->mimeType[$extension]) && connection_status() == 0) { + $chunkSize = 8192; + $buffer = ''; + $fileSize = @filesize($path); + $handle = fopen($path, 'rb'); + + if ($handle === false) { + return false; + } + if (!empty($modified)) { + $modified = gmdate('D, d M Y H:i:s', strtotime($modified, time())) . ' GMT'; + } else { + $modified = gmdate('D, d M Y H:i:s') . ' GMT'; + } + + if ($download) { + $contentTypes = array('application/octet-stream'); + $agent = env('HTTP_USER_AGENT'); + + if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent)) { + $contentTypes[0] = 'application/octetstream'; + } else if (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) { + $contentTypes[0] = 'application/force-download'; + array_merge($contentTypes, array( + 'application/octet-stream', + 'application/download' + )); + } + foreach($contentTypes as $contentType) { + $this->_header('Content-Type: ' . $contentType); + } + $this->_header(array( + 'Content-Disposition: attachment; filename="' . $name . '.' . $extension . '";', + 'Expires: 0', + 'Accept-Ranges: bytes', + 'Cache-Control: private' => false, + 'Pragma: private')); + + $httpRange = env('HTTP_RANGE'); + if (isset($httpRange)) { + list($toss, $range) = explode('=', $httpRange); + + $size = $fileSize - 1; + $length = $fileSize - $range; + + $this->_header(array( + 'HTTP/1.1 206 Partial Content', + 'Content-Length: ' . $length, + 'Content-Range: bytes ' . $range . $size . '/' . $fileSize)); + + fseek($handle, $range); + } else { + $this->_header('Content-Length: ' . $fileSize); + } + } else { + $this->_header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT'); + if ($cache) { + if (!is_numeric($cache)) { + $cache = strtotime($cache) - time(); + } + $this->_header(array( + 'Cache-Control: max-age=' . $cache, + 'Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT', + 'Pragma: cache')); + } else { + $this->_header(array( + 'Cache-Control: must-revalidate, post-check=0, pre-check=0', + 'Pragma: no-cache')); + } + $this->_header(array( + 'Last-Modified: ' . $modified, + 'Content-Type: ' . $this->mimeType[$extension], + 'Content-Length: ' . $fileSize)); + } + $this->_output(); + $this->_clearBuffer(); + + while (!feof($handle)) { + if (!$this->_isActive()) { + fclose($handle); + return false; + } + set_time_limit(0); + $buffer = fread($handle, $chunkSize); + echo $buffer; + $this->_flushBuffer(); + } + fclose($handle); + return; + } + return false; + } + +/** + * Method to set headers + * @param mixed $header + * @param boolean $boolean + * @access protected + */ + function _header($header, $boolean = true) { + if (is_array($header)) { + foreach ($header as $string => $boolean) { + if (is_numeric($string)) { + $this->_headers[] = array($boolean => true); + } else { + $this->_headers[] = array($string => $boolean); + } + } + return; + } + $this->_headers[] = array($header => $boolean); + return; + } + +/** + * Method to output headers + * @access protected + */ + function _output() { + foreach ($this->_headers as $key => $value) { + $header = key($value); + header($header, $value[$header]); + } + } + +/** + * Returns true if connection is still active + * @return boolean + * @access protected + */ + function _isActive() { + return connection_status() == 0 && !connection_aborted(); + } + +/** + * Clears the contents of the topmost output buffer and discards them + * @return boolean + * @access protected + */ + function _clearBuffer() { + return @ob_end_clean(); + } + +/** + * Flushes the contents of the output buffer + * @access protected + */ + function _flushBuffer() { + @flush(); + @ob_flush(); + } +} diff --git a/cake/libs/view/pages/.svn/entries b/cake/libs/view/pages/.svn/entries new file mode 100644 index 0000000..052546f --- /dev/null +++ b/cake/libs/view/pages/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/pages +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +home.ctp +file + + + + +2010-08-30T06:36:28.000000Z +bb6a6efe749de8b6d6036cea3735ac90 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5987 + diff --git a/cake/libs/view/pages/.svn/text-base/home.ctp.svn-base b/cake/libs/view/pages/.svn/text-base/home.ctp.svn-base new file mode 100644 index 0000000..82d3b8b --- /dev/null +++ b/cake/libs/view/pages/.svn/text-base/home.ctp.svn-base @@ -0,0 +1,160 @@ +cakeError('error404'); +endif; +?> +

      + + 0): + Debugger::checkSecurityKeys(); +endif; +?> +

      + '; + __('Your tmp directory is writable.'); + echo ''; + else: + echo ''; + __('Your tmp directory is NOT writable.'); + echo ''; + endif; + ?> +

      +

      + '; + printf(__('The %s is being used for caching. To change the config edit APP/config/core.php ', true), ''. $settings['engine'] . 'Engine'); + echo ''; + else: + echo ''; + __('Your cache is NOT working. Please check the settings in APP/config/core.php'); + echo ''; + endif; + ?> +

      +

      + '; + __('Your database configuration file is present.'); + $filePresent = true; + echo ''; + else: + echo ''; + __('Your database configuration file is NOT present.'); + echo '
      '; + __('Rename config/database.php.default to config/database.php'); + echo '
      '; + endif; + ?> +

      +getDataSource('default'); +?> +

      + isConnected()): + echo ''; + __('Cake is able to connect to the database.'); + echo ''; + else: + echo ''; + __('Cake is NOT able to connect to the database.'); + echo ''; + endif; + ?> +

      + +

      +

      + +To change its layout, create: APP/views/layouts/default.ctp.
      +You can also add some CSS styles for your pages at: APP/webroot/css.'); +?> +

      + +

      +

      + Html->link( + sprintf('%s%s', __('new', true), __('CakePHP 1.3 Docs', true)), + 'http://book.cakephp.org/view/875/x1-3-Collection', + array('target' => '_blank', 'escape' => false) + ); + ?> +

      +

      + Html->link( + __('The 15 min Blog Tutorial', true), + 'http://book.cakephp.org/view/219/the-cakephp-blog-tutorial', + array('target' => '_blank', 'escape' => false) + ); + ?> +

      + +

      +

      + +

      +

      + +

      + + \ No newline at end of file diff --git a/cake/libs/view/pages/home.ctp b/cake/libs/view/pages/home.ctp new file mode 100644 index 0000000..646ca09 --- /dev/null +++ b/cake/libs/view/pages/home.ctp @@ -0,0 +1,170 @@ +cakeError('error404'); +endif; +?> +

      + + 0): + Debugger::checkSecurityKeys(); +endif; +?> +

      + '; + __('Your tmp directory is writable.'); + echo ''; + else: + echo ''; + __('Your tmp directory is NOT writable.'); + echo ''; + endif; + ?> +

      +

      + '; + printf(__('The %s is being used for caching. To change the config edit APP/config/core.php ', true), ''. $settings['engine'] . 'Engine'); + echo ''; + else: + echo ''; + __('Your cache is NOT working. Please check the settings in APP/config/core.php'); + echo ''; + endif; + ?> +

      +

      + '; + __('Your database configuration file is present.'); + $filePresent = true; + echo ''; + else: + echo ''; + __('Your database configuration file is NOT present.'); + echo '
      '; + __('Rename config/database.php.default to config/database.php'); + echo '
      '; + endif; + ?> +

      +'; + __('PCRE has not been compiled with Unicode support.'); + echo '
      '; + __('Recompile PCRE with Unicode support by adding --enable-unicode-properties when configuring'); + echo '

      '; + } +?> +getDataSource('default'); +?> +

      + isConnected()): + echo ''; + __('Cake is able to connect to the database.'); + echo ''; + else: + echo ''; + __('Cake is NOT able to connect to the database.'); + echo ''; + endif; + ?> +

      + +

      +

      + +To change its layout, create: APP/views/layouts/default.ctp.
      +You can also add some CSS styles for your pages at: APP/webroot/css.'); +?> +

      + +

      +

      + Html->link( + sprintf('%s %s', __('New', true), __('CakePHP 1.3 Docs', true)), + 'http://book.cakephp.org/view/875/x1-3-Collection', + array('target' => '_blank', 'escape' => false) + ); + ?> +

      +

      + Html->link( + __('The 15 min Blog Tutorial', true), + 'http://book.cakephp.org/view/1528/Blog', + array('target' => '_blank', 'escape' => false) + ); + ?> +

      + +

      +

      + +

      +

      + +

      + + diff --git a/cake/libs/view/scaffolds/.svn/entries b/cake/libs/view/scaffolds/.svn/entries new file mode 100644 index 0000000..bc06f0b --- /dev/null +++ b/cake/libs/view/scaffolds/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/libs/view/scaffolds +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +view.ctp +file + + + + +2010-08-30T06:36:28.000000Z +afc702d5045f3f13de545d65743f298b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +6363 + +edit.ctp +file + + + + +2010-08-30T06:36:28.000000Z +b361190d86fb976257036c632845a97c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +2042 + +index.ctp +file + + + + +2010-08-30T06:36:28.000000Z +1b7fe3993d8ee2621657d3e6e30e978c +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +3786 + diff --git a/cake/libs/view/scaffolds/.svn/text-base/edit.ctp.svn-base b/cake/libs/view/scaffolds/.svn/text-base/edit.ctp.svn-base new file mode 100644 index 0000000..34b5706 --- /dev/null +++ b/cake/libs/view/scaffolds/.svn/text-base/edit.ctp.svn-base @@ -0,0 +1,47 @@ + +
      +Form->create(); + echo $this->Form->inputs($scaffoldFields, array('created', 'modified', 'updated')); + echo $this->Form->end(__('Submit', true)); +?> +
      +
      +

      +
        +action != 'add'):?> +
      • Html->link(__('Delete', true), array('action' => 'delete', $this->Form->value($modelClass.'.'.$primaryKey)), null, __('Are you sure you want to delete', true).' #' . $this->Form->value($modelClass.'.'.$primaryKey)); ?>
      • + +
      • Html->link(__('List', true).' '.$pluralHumanName, array('action' => 'index'));?>
      • + $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' =>'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' =>'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      \ No newline at end of file diff --git a/cake/libs/view/scaffolds/.svn/text-base/index.ctp.svn-base b/cake/libs/view/scaffolds/.svn/text-base/index.ctp.svn-base new file mode 100644 index 0000000..ce4a09a --- /dev/null +++ b/cake/libs/view/scaffolds/.svn/text-base/index.ctp.svn-base @@ -0,0 +1,93 @@ + +
      +

      + + + + + + + +\n"; + foreach ($scaffoldFields as $_field) { + $isKey = false; + if (!empty($associations['belongsTo'])) { + foreach ($associations['belongsTo'] as $_alias => $_details) { + if ($_field === $_details['foreignKey']) { + $isKey = true; + echo "\t\t\n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t\n"; + } + } + + echo "\t\t\n"; + echo "\t\n"; + +endforeach; +echo "\n"; +?> +
      Paginator->sort($_field);?>
      \n\t\t\t" . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t\n\t\t\t" . ${$singularVar}[$modelClass][$_field] . " \n\t\t\n"; + echo "\t\t\t" . $this->Html->link(__('View', true), array('action' => 'view', ${$singularVar}[$modelClass][$primaryKey])) . "\n"; + echo "\t\t\t" . $this->Html->link(__('Edit', true), array('action' => 'edit', ${$singularVar}[$modelClass][$primaryKey])) . "\n"; + echo "\t\t\t" . $this->Html->link(__('Delete', true), array('action' => 'delete', ${$singularVar}[$modelClass][$primaryKey]), null, __('Are you sure you want to delete', true).' #' . ${$singularVar}[$modelClass][$primaryKey]) . "\n"; + echo "\t\t
      +

      Paginator->counter(array( + 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) + )); + ?>

      +
      + Paginator->prev('<< ' . __('previous', true), array(), null, array('class' => 'disabled')) . "\n";?> + | Paginator->numbers() . "\n"?> + Paginator->next(__('next', true) .' >>', array(), null, array('class' => 'disabled')) . "\n";?> +
      +
      +
      +

      +
        +
      • Html->link(sprintf(__('New %s', true), $singularHumanName), array('action' => 'add')); ?>
      • + $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      \ No newline at end of file diff --git a/cake/libs/view/scaffolds/.svn/text-base/view.ctp.svn-base b/cake/libs/view/scaffolds/.svn/text-base/view.ctp.svn-base new file mode 100644 index 0000000..3669d9a --- /dev/null +++ b/cake/libs/view/scaffolds/.svn/text-base/view.ctp.svn-base @@ -0,0 +1,159 @@ + +
      +

      +
      + $_details) { + if ($_field === $_details['foreignKey']) { + $isKey = true; + echo "\t\t" . Inflector::humanize($_alias) . "\n"; + echo "\t\t\n\t\t\t" . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t \n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t" . Inflector::humanize($_field) . "\n"; + echo "\t\t\n\t\t\t{${$singularVar}[$modelClass][$_field]}\n \t\t\n"; + } +} +?> +
      +
      +
      +

      +
        +" .$this->Html->link(sprintf(__('Edit %s', true), $singularHumanName), array('action' => 'edit', ${$singularVar}[$modelClass][$primaryKey])). " \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('Delete %s', true), $singularHumanName), array('action' => 'delete', ${$singularVar}[$modelClass][$primaryKey]), null, __('Are you sure you want to delete', true).' #' . ${$singularVar}[$modelClass][$primaryKey] . '?'). "
      • \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('List %s', true), $pluralHumanName), array('action' => 'index')). "
      • \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('New %s', true), $singularHumanName), array('action' => 'add')). "
      • \n"; + + $done = array(); + foreach ($associations as $_type => $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      + $_details): ?> + + $_details): +$otherSingularVar = Inflector::variable($_alias); +?> + + \ No newline at end of file diff --git a/cake/libs/view/scaffolds/edit.ctp b/cake/libs/view/scaffolds/edit.ctp new file mode 100644 index 0000000..34b5706 --- /dev/null +++ b/cake/libs/view/scaffolds/edit.ctp @@ -0,0 +1,47 @@ + +
      +Form->create(); + echo $this->Form->inputs($scaffoldFields, array('created', 'modified', 'updated')); + echo $this->Form->end(__('Submit', true)); +?> +
      +
      +

      +
        +action != 'add'):?> +
      • Html->link(__('Delete', true), array('action' => 'delete', $this->Form->value($modelClass.'.'.$primaryKey)), null, __('Are you sure you want to delete', true).' #' . $this->Form->value($modelClass.'.'.$primaryKey)); ?>
      • + +
      • Html->link(__('List', true).' '.$pluralHumanName, array('action' => 'index'));?>
      • + $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' =>'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' =>'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      \ No newline at end of file diff --git a/cake/libs/view/scaffolds/index.ctp b/cake/libs/view/scaffolds/index.ctp new file mode 100644 index 0000000..ce4a09a --- /dev/null +++ b/cake/libs/view/scaffolds/index.ctp @@ -0,0 +1,93 @@ + +
      +

      + + + + + + + +\n"; + foreach ($scaffoldFields as $_field) { + $isKey = false; + if (!empty($associations['belongsTo'])) { + foreach ($associations['belongsTo'] as $_alias => $_details) { + if ($_field === $_details['foreignKey']) { + $isKey = true; + echo "\t\t\n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t\n"; + } + } + + echo "\t\t\n"; + echo "\t\n"; + +endforeach; +echo "\n"; +?> +
      Paginator->sort($_field);?>
      \n\t\t\t" . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t\n\t\t\t" . ${$singularVar}[$modelClass][$_field] . " \n\t\t\n"; + echo "\t\t\t" . $this->Html->link(__('View', true), array('action' => 'view', ${$singularVar}[$modelClass][$primaryKey])) . "\n"; + echo "\t\t\t" . $this->Html->link(__('Edit', true), array('action' => 'edit', ${$singularVar}[$modelClass][$primaryKey])) . "\n"; + echo "\t\t\t" . $this->Html->link(__('Delete', true), array('action' => 'delete', ${$singularVar}[$modelClass][$primaryKey]), null, __('Are you sure you want to delete', true).' #' . ${$singularVar}[$modelClass][$primaryKey]) . "\n"; + echo "\t\t
      +

      Paginator->counter(array( + 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) + )); + ?>

      +
      + Paginator->prev('<< ' . __('previous', true), array(), null, array('class' => 'disabled')) . "\n";?> + | Paginator->numbers() . "\n"?> + Paginator->next(__('next', true) .' >>', array(), null, array('class' => 'disabled')) . "\n";?> +
      +
      +
      +

      +
        +
      • Html->link(sprintf(__('New %s', true), $singularHumanName), array('action' => 'add')); ?>
      • + $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      \ No newline at end of file diff --git a/cake/libs/view/scaffolds/view.ctp b/cake/libs/view/scaffolds/view.ctp new file mode 100644 index 0000000..3669d9a --- /dev/null +++ b/cake/libs/view/scaffolds/view.ctp @@ -0,0 +1,159 @@ + +
      +

      +
      + $_details) { + if ($_field === $_details['foreignKey']) { + $isKey = true; + echo "\t\t" . Inflector::humanize($_alias) . "\n"; + echo "\t\t\n\t\t\t" . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t \n"; + break; + } + } + } + if ($isKey !== true) { + echo "\t\t" . Inflector::humanize($_field) . "\n"; + echo "\t\t\n\t\t\t{${$singularVar}[$modelClass][$_field]}\n \t\t\n"; + } +} +?> +
      +
      +
      +

      +
        +" .$this->Html->link(sprintf(__('Edit %s', true), $singularHumanName), array('action' => 'edit', ${$singularVar}[$modelClass][$primaryKey])). " \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('Delete %s', true), $singularHumanName), array('action' => 'delete', ${$singularVar}[$modelClass][$primaryKey]), null, __('Are you sure you want to delete', true).' #' . ${$singularVar}[$modelClass][$primaryKey] . '?'). "
      • \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('List %s', true), $pluralHumanName), array('action' => 'index')). "
      • \n"; + echo "\t\t
      • " .$this->Html->link(sprintf(__('New %s', true), $singularHumanName), array('action' => 'add')). "
      • \n"; + + $done = array(); + foreach ($associations as $_type => $_data) { + foreach ($_data as $_alias => $_details) { + if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { + echo "\t\t
      • " . $this->Html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
      • \n"; + echo "\t\t
      • " . $this->Html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
      • \n"; + $done[] = $_details['controller']; + } + } + } +?> +
      +
      + $_details): ?> + + $_details): +$otherSingularVar = Inflector::variable($_alias); +?> + + \ No newline at end of file diff --git a/cake/libs/view/theme.php b/cake/libs/view/theme.php new file mode 100644 index 0000000..22a06f0 --- /dev/null +++ b/cake/libs/view/theme.php @@ -0,0 +1,74 @@ +theme` and `$this->view = 'Theme'` + * in your Controller to use the ThemeView. + * + * Example of theme path with `$this->theme = 'super_hot';` Would be `app/views/themed/super_hot/posts` + * + * @package cake + * @subpackage cake.cake.libs.view + */ +class ThemeView extends View { +/** + * Constructor for ThemeView sets $this->theme. + * + * @param Controller $controller Controller object to be rendered. + * @param boolean $register Should the view be registered in the registry. + */ + function __construct(&$controller, $register = true) { + parent::__construct($controller, $register); + $this->theme =& $controller->theme; + } + +/** + * Return all possible paths to find view files in order + * + * @param string $plugin The name of the plugin views are being found for. + * @param boolean $cached Set to true to force dir scan. + * @return array paths + * @access protected + * @todo Make theme path building respect $cached parameter. + */ + function _paths($plugin = null, $cached = true) { + $paths = parent::_paths($plugin, $cached); + $themePaths = array(); + + if (!empty($this->theme)) { + $count = count($paths); + for ($i = 0; $i < $count; $i++) { + if (strpos($paths[$i], DS . 'plugins' . DS) === false + && strpos($paths[$i], DS . 'libs' . DS . 'view') === false) { + if ($plugin) { + $themePaths[] = $paths[$i] . 'themed'. DS . $this->theme . DS . 'plugins' . DS . $plugin . DS; + } + $themePaths[] = $paths[$i] . 'themed'. DS . $this->theme . DS; + } + } + $paths = array_merge($themePaths, $paths); + } + return $paths; + } +} diff --git a/cake/libs/view/view.php b/cake/libs/view/view.php new file mode 100644 index 0000000..0224ce4 --- /dev/null +++ b/cake/libs/view/view.php @@ -0,0 +1,988 @@ + tags) for the layout + * + * @var array + * @access private + */ + var $__scripts = array(); + +/** + * Holds an array of paths. + * + * @var array + * @access private + */ + var $__paths = array(); + +/** + * Constructor + * + * @param Controller $controller A controller object to pull View::__passedArgs from. + * @param boolean $register Should the View instance be registered in the ClassRegistry + * @return View + */ + function __construct(&$controller, $register = true) { + if (is_object($controller)) { + $count = count($this->__passedVars); + for ($j = 0; $j < $count; $j++) { + $var = $this->__passedVars[$j]; + $this->{$var} = $controller->{$var}; + } + } + parent::__construct(); + + if ($register) { + ClassRegistry::addObject('view', $this); + } + } + +/** + * Renders a piece of PHP with provided parameters and returns HTML, XML, or any other string. + * + * This realizes the concept of Elements, (or "partial layouts") + * and the $params array is used to send data to be used in the + * Element. Elements can be cached through use of the cache key. + * + * ### Special params + * + * - `cache` - enable caching for this element accepts boolean or strtotime compatible string. + * Can also be an array. If `cache` is an array, + * `time` is used to specify duration of cache. + * `key` can be used to create unique cache files. + * - `plugin` - Load an element from a specific plugin. + * + * @param string $name Name of template file in the/app/views/elements/ folder + * @param array $params Array of data to be made available to the for rendered + * view (i.e. the Element) + * @return string Rendered Element + * @access public + */ + function element($name, $params = array(), $loadHelpers = false) { + $file = $plugin = $key = null; + + if (isset($params['plugin'])) { + $plugin = $params['plugin']; + } + + if (isset($this->plugin) && !$plugin) { + $plugin = $this->plugin; + } + + if (isset($params['cache'])) { + $expires = '+1 day'; + + if (is_array($params['cache'])) { + $expires = $params['cache']['time']; + $key = Inflector::slug($params['cache']['key']); + } elseif ($params['cache'] !== true) { + $expires = $params['cache']; + $key = implode('_', array_keys($params)); + } + + if ($expires) { + $cacheFile = 'element_' . $key . '_' . $plugin . Inflector::slug($name); + $cache = cache('views' . DS . $cacheFile, null, $expires); + + if (is_string($cache)) { + return $cache; + } + } + } + $paths = $this->_paths($plugin); + $exts = $this->_getExtensions(); + foreach ($exts as $ext) { + foreach ($paths as $path) { + if (file_exists($path . 'elements' . DS . $name . $ext)) { + $file = $path . 'elements' . DS . $name . $ext; + break; + } + } + } + + if (is_file($file)) { + $vars = array_merge($this->viewVars, $params); + foreach ($this->loaded as $name => $helper) { + if (!isset($vars[$name])) { + $vars[$name] =& $this->loaded[$name]; + } + } + $element = $this->_render($file, $vars, $loadHelpers); + if (isset($params['cache']) && isset($cacheFile) && isset($expires)) { + cache('views' . DS . $cacheFile, $element, $expires); + } + return $element; + } + $file = $paths[0] . 'elements' . DS . $name . $this->ext; + + if (Configure::read() > 0) { + return "Not Found: " . $file; + } + } + +/** + * Renders view for given action and layout. If $file is given, that is used + * for a view filename (e.g. customFunkyView.ctp). + * + * @param string $action Name of action to render for + * @param string $layout Layout to use + * @param string $file Custom filename for view + * @return string Rendered Element + * @access public + */ + function render($action = null, $layout = null, $file = null) { + if ($this->hasRendered) { + return true; + } + $out = null; + + if ($file != null) { + $action = $file; + } + + if ($action !== false && $viewFileName = $this->_getViewFileName($action)) { + $out = $this->_render($viewFileName, $this->viewVars); + } + + if ($layout === null) { + $layout = $this->layout; + } + + if ($out !== false) { + if ($layout && $this->autoLayout) { + $out = $this->renderLayout($out, $layout); + $isCached = ( + isset($this->loaded['cache']) || + Configure::read('Cache.check') === true + ); + + if ($isCached) { + $replace = array('', ''); + $out = str_replace($replace, '', $out); + } + } + $this->hasRendered = true; + } else { + $out = $this->_render($viewFileName, $this->viewVars); + trigger_error(sprintf(__("Error in view %s, got:
      %s
      ", true), $viewFileName, $out), E_USER_ERROR); + } + return $out; + } + +/** + * Renders a layout. Returns output from _render(). Returns false on error. + * Several variables are created for use in layout. + * + * - `title_for_layout` - A backwards compatible place holder, you should set this value if you want more control. + * - `content_for_layout` - contains rendered view file + * - `scripts_for_layout` - contains scripts added to header + * + * @param string $content_for_layout Content to render in a view, wrapped by the surrounding layout. + * @return mixed Rendered output, or false on error + * @access public + */ + function renderLayout($content_for_layout, $layout = null) { + $layoutFileName = $this->_getLayoutFileName($layout); + if (empty($layoutFileName)) { + return $this->output; + } + + $dataForLayout = array_merge($this->viewVars, array( + 'content_for_layout' => $content_for_layout, + 'scripts_for_layout' => implode("\n\t", $this->__scripts), + )); + + if (!isset($dataForLayout['title_for_layout'])) { + $dataForLayout['title_for_layout'] = Inflector::humanize($this->viewPath); + } + + if (empty($this->loaded) && !empty($this->helpers)) { + $loadHelpers = true; + } else { + $loadHelpers = false; + $dataForLayout = array_merge($dataForLayout, $this->loaded); + } + + $this->_triggerHelpers('beforeLayout'); + $this->output = $this->_render($layoutFileName, $dataForLayout, $loadHelpers, true); + + if ($this->output === false) { + $this->output = $this->_render($layoutFileName, $data_for_layout); + trigger_error(sprintf(__("Error in layout %s, got:
      %s
      ", true), $layoutFileName, $this->output), E_USER_ERROR); + return false; + } + + $this->_triggerHelpers('afterLayout'); + + return $this->output; + } + +/** + * Fire a callback on all loaded Helpers. All helpers must implement this method, + * it is not checked before being called. You can add additional helper callbacks in AppHelper. + * + * @param string $callback name of callback fire. + * @access protected + * @return void + */ + function _triggerHelpers($callback) { + if (empty($this->loaded)) { + return false; + } + $helpers = array_keys($this->loaded); + foreach ($helpers as $helperName) { + $helper =& $this->loaded[$helperName]; + if (is_object($helper)) { + if (is_subclass_of($helper, 'Helper')) { + $helper->{$callback}(); + } + } + } + } + +/** + * Render cached view. Works in concert with CacheHelper and Dispatcher to + * render cached view files. + * + * @param string $filename the cache file to include + * @param string $timeStart the page render start time + * @return boolean Success of rendering the cached file. + * @access public + */ + function renderCache($filename, $timeStart) { + ob_start(); + include ($filename); + + if (Configure::read() > 0 && $this->layout != 'xml') { + echo ""; + } + $out = ob_get_clean(); + + if (preg_match('/^/', $out, $match)) { + if (time() >= $match['1']) { + @unlink($filename); + unset ($out); + return false; + } else { + if ($this->layout === 'xml') { + header('Content-type: text/xml'); + } + $commentLength = strlen(''); + echo substr($out, $commentLength); + return true; + } + } + } + +/** + * Returns a list of variables available in the current View context + * + * @return array Array of the set view variable names. + * @access public + */ + function getVars() { + return array_keys($this->viewVars); + } + +/** + * Returns the contents of the given View variable(s) + * + * @param string $var The view var you want the contents of. + * @return mixed The content of the named var if its set, otherwise null. + * @access public + */ + function getVar($var) { + if (!isset($this->viewVars[$var])) { + return null; + } else { + return $this->viewVars[$var]; + } + } + +/** + * Adds a script block or other element to be inserted in $scripts_for_layout in + * the `` of a document layout + * + * @param string $name Either the key name for the script, or the script content. Name can be used to + * update/replace a script element. + * @param string $content The content of the script being added, optional. + * @return void + * @access public + */ + function addScript($name, $content = null) { + if (empty($content)) { + if (!in_array($name, array_values($this->__scripts))) { + $this->__scripts[] = $name; + } + } else { + $this->__scripts[$name] = $content; + } + } + +/** + * Generates a unique, non-random DOM ID for an object, based on the object type and the target URL. + * + * @param string $object Type of object, i.e. 'form' or 'link' + * @param string $url The object's target URL + * @return string + * @access public + */ + function uuid($object, $url) { + $c = 1; + $url = Router::url($url); + $hash = $object . substr(md5($object . $url), 0, 10); + while (in_array($hash, $this->uuids)) { + $hash = $object . substr(md5($object . $url . $c), 0, 10); + $c++; + } + $this->uuids[] = $hash; + return $hash; + } + +/** + * Returns the entity reference of the current context as an array of identity parts + * + * @return array An array containing the identity elements of an entity + * @access public + */ + function entity() { + $assoc = ($this->association) ? $this->association : $this->model; + if (!empty($this->entityPath)) { + $path = explode('.', $this->entityPath); + $count = count($path); + if ( + ($count == 1 && !empty($this->association)) || + ($count == 1 && $this->model != $this->entityPath) || + ($count == 1 && empty($this->association) && !empty($this->field)) || + ($count == 2 && !empty($this->fieldSuffix)) || + is_numeric($path[0]) && !empty($assoc) + ) { + array_unshift($path, $assoc); + } + return Set::filter($path); + } + return array_values(Set::filter( + array($assoc, $this->modelId, $this->field, $this->fieldSuffix) + )); + } + +/** + * Allows a template or element to set a variable that will be available in + * a layout or other element. Analagous to Controller::set. + * + * @param mixed $one A string or an array of data. + * @param mixed $two Value in case $one is a string (which then works as the key). + * Unused if $one is an associative array, otherwise serves as the values to $one's keys. + * @return void + * @access public + */ + function set($one, $two = null) { + $data = null; + if (is_array($one)) { + if (is_array($two)) { + $data = array_combine($one, $two); + } else { + $data = $one; + } + } else { + $data = array($one => $two); + } + if ($data == null) { + return false; + } + $this->viewVars = $data + $this->viewVars; + } + +/** + * Displays an error page to the user. Uses layouts/error.ctp to render the page. + * + * @param integer $code HTTP Error code (for instance: 404) + * @param string $name Name of the error (for instance: Not Found) + * @param string $message Error message as a web page + * @access public + */ + function error($code, $name, $message) { + header ("HTTP/1.1 {$code} {$name}"); + print ($this->_render( + $this->_getLayoutFileName('error'), + array('code' => $code, 'name' => $name, 'message' => $message) + )); + } + +/** + * Renders and returns output for given view filename with its + * array of data. + * + * @param string $___viewFn Filename of the view + * @param array $___dataForView Data to include in rendered view + * @param boolean $loadHelpers Boolean to indicate that helpers should be loaded. + * @param boolean $cached Whether or not to trigger the creation of a cache file. + * @return string Rendered output + * @access protected + */ + function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) { + $loadedHelpers = array(); + + if ($this->helpers != false && $loadHelpers === true) { + $loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers); + $helpers = array_keys($loadedHelpers); + $helperNames = array_map(array('Inflector', 'variable'), $helpers); + + for ($i = count($helpers) - 1; $i >= 0; $i--) { + $name = $helperNames[$i]; + $helper =& $loadedHelpers[$helpers[$i]]; + + if (!isset($___dataForView[$name])) { + ${$name} =& $helper; + } + $this->loaded[$helperNames[$i]] =& $helper; + $this->{$helpers[$i]} =& $helper; + } + $this->_triggerHelpers('beforeRender'); + unset($name, $loadedHelpers, $helpers, $i, $helperNames, $helper); + } + + extract($___dataForView, EXTR_SKIP); + ob_start(); + + if (Configure::read() > 0) { + include ($___viewFn); + } else { + @include ($___viewFn); + } + + if ($loadHelpers === true) { + $this->_triggerHelpers('afterRender'); + } + + $out = ob_get_clean(); + $caching = ( + isset($this->loaded['cache']) && + (($this->cacheAction != false)) && (Configure::read('Cache.check') === true) + ); + + if ($caching) { + if (is_a($this->loaded['cache'], 'CacheHelper')) { + $cache =& $this->loaded['cache']; + $cache->base = $this->base; + $cache->here = $this->here; + $cache->helpers = $this->helpers; + $cache->action = $this->action; + $cache->controllerName = $this->name; + $cache->layout = $this->layout; + $cache->cacheAction = $this->cacheAction; + $cache->viewVars = $this->viewVars; + $cache->cache($___viewFn, $out, $cached); + } + } + return $out; + } + +/** + * Loads helpers, with their dependencies. + * + * @param array $loaded List of helpers that are already loaded. + * @param array $helpers List of helpers to load. + * @param string $parent holds name of helper, if loaded helper has helpers + * @return array Array containing the loaded helpers. + * @access protected + */ + function &_loadHelpers(&$loaded, $helpers, $parent = null) { + foreach ($helpers as $i => $helper) { + $options = array(); + + if (!is_int($i)) { + $options = $helper; + $helper = $i; + } + list($plugin, $helper) = pluginSplit($helper, true, $this->plugin); + $helperCn = $helper . 'Helper'; + + if (!isset($loaded[$helper])) { + if (!class_exists($helperCn)) { + $isLoaded = false; + if (!is_null($plugin)) { + $isLoaded = App::import('Helper', $plugin . $helper); + } + if (!$isLoaded) { + if (!App::import('Helper', $helper)) { + $this->cakeError('missingHelperFile', array(array( + 'helper' => $helper, + 'file' => Inflector::underscore($helper) . '.php', + 'base' => $this->base + ))); + return false; + } + } + if (!class_exists($helperCn)) { + $this->cakeError('missingHelperClass', array(array( + 'helper' => $helper, + 'file' => Inflector::underscore($helper) . '.php', + 'base' => $this->base + ))); + return false; + } + } + $loaded[$helper] =& new $helperCn($options); + $vars = array('base', 'webroot', 'here', 'params', 'action', 'data', 'theme', 'plugin'); + $c = count($vars); + + for ($j = 0; $j < $c; $j++) { + $loaded[$helper]->{$vars[$j]} = $this->{$vars[$j]}; + } + + if (!empty($this->validationErrors)) { + $loaded[$helper]->validationErrors = $this->validationErrors; + } + if (is_array($loaded[$helper]->helpers) && !empty($loaded[$helper]->helpers)) { + $loaded =& $this->_loadHelpers($loaded, $loaded[$helper]->helpers, $helper); + } + } + if (isset($loaded[$parent])) { + $loaded[$parent]->{$helper} =& $loaded[$helper]; + } + } + return $loaded; + } + +/** + * Returns filename of given action's template file (.ctp) as a string. + * CamelCased action names will be under_scored! This means that you can have + * LongActionNames that refer to long_action_names.ctp views. + * + * @param string $name Controller action to find template filename for + * @return string Template filename + * @access protected + */ + function _getViewFileName($name = null) { + $subDir = null; + + if (!is_null($this->subDir)) { + $subDir = $this->subDir . DS; + } + + if ($name === null) { + $name = $this->action; + } + $name = str_replace('/', DS, $name); + + if (strpos($name, DS) === false && $name[0] !== '.') { + $name = $this->viewPath . DS . $subDir . Inflector::underscore($name); + } elseif (strpos($name, DS) !== false) { + if ($name{0} === DS || $name{1} === ':') { + if (is_file($name)) { + return $name; + } + $name = trim($name, DS); + } else if ($name[0] === '.') { + $name = substr($name, 3); + } else { + $name = $this->viewPath . DS . $subDir . $name; + } + } + $paths = $this->_paths(Inflector::underscore($this->plugin)); + + $exts = $this->_getExtensions(); + foreach ($exts as $ext) { + foreach ($paths as $path) { + if (file_exists($path . $name . $ext)) { + return $path . $name . $ext; + } + } + } + $defaultPath = $paths[0]; + + if ($this->plugin) { + $pluginPaths = App::path('plugins'); + foreach ($paths as $path) { + if (strpos($path, $pluginPaths[0]) === 0) { + $defaultPath = $path; + break; + } + } + } + return $this->_missingView($defaultPath . $name . $this->ext, 'missingView'); + } + +/** + * Returns layout filename for this template as a string. + * + * @param string $name The name of the layout to find. + * @return string Filename for layout file (.ctp). + * @access protected + */ + function _getLayoutFileName($name = null) { + if ($name === null) { + $name = $this->layout; + } + $subDir = null; + + if (!is_null($this->layoutPath)) { + $subDir = $this->layoutPath . DS; + } + $paths = $this->_paths(Inflector::underscore($this->plugin)); + $file = 'layouts' . DS . $subDir . $name; + + $exts = $this->_getExtensions(); + foreach ($exts as $ext) { + foreach ($paths as $path) { + if (file_exists($path . $file . $ext)) { + return $path . $file . $ext; + } + } + } + return $this->_missingView($paths[0] . $file . $this->ext, 'missingLayout'); + } + + +/** + * Get the extensions that view files can use. + * + * @return array Array of extensions view files use. + * @access protected + */ + function _getExtensions() { + $exts = array($this->ext); + if ($this->ext !== '.ctp') { + array_push($exts, '.ctp'); + } + return $exts; + } + +/** + * Return a misssing view error message + * + * @param string $viewFileName the filename that should exist + * @return false + * @access protected + */ + function _missingView($file, $error = 'missingView') { + if ($error === 'missingView') { + $this->cakeError('missingView', array( + 'className' => $this->name, + 'action' => $this->action, + 'file' => $file, + 'base' => $this->base + )); + return false; + } elseif ($error === 'missingLayout') { + $this->cakeError('missingLayout', array( + 'layout' => $this->layout, + 'file' => $file, + 'base' => $this->base + )); + return false; + } + } + +/** + * Return all possible paths to find view files in order + * + * @param string $plugin Optional plugin name to scan for view files. + * @param boolean $cached Set to true to force a refresh of view paths. + * @return array paths + * @access protected + */ + function _paths($plugin = null, $cached = true) { + if ($plugin === null && $cached === true && !empty($this->__paths)) { + return $this->__paths; + } + $paths = array(); + $viewPaths = App::path('views'); + $corePaths = array_flip(App::core('views')); + + if (!empty($plugin)) { + $count = count($viewPaths); + for ($i = 0; $i < $count; $i++) { + if (!isset($corePaths[$viewPaths[$i]])) { + $paths[] = $viewPaths[$i] . 'plugins' . DS . $plugin . DS; + } + } + $paths[] = App::pluginPath($plugin) . 'views' . DS; + } + $this->__paths = array_merge($paths, $viewPaths); + return $this->__paths; + } +} diff --git a/cake/libs/xml.php b/cake/libs/xml.php new file mode 100644 index 0000000..80057cd --- /dev/null +++ b/cake/libs/xml.php @@ -0,0 +1,1470 @@ +name = $name; + if ($namespace) { + $this->namespace = $namespace; + } + + if (is_array($value) || is_object($value)) { + $this->normalize($value); + } elseif (!empty($value) || $value === 0 || $value === '0') { + $this->createTextNode($value); + } + } +/** + * Adds a namespace to the current node + * + * @param string $prefix The namespace prefix + * @param string $url The namespace DTD URL + * @return void + */ + function addNamespace($prefix, $url) { + if ($ns = Xml::addGlobalNs($prefix, $url)) { + $this->namespaces = array_merge($this->namespaces, $ns); + return true; + } + return false; + } + +/** + * Adds a namespace to the current node + * + * @param string $prefix The namespace prefix + * @param string $url The namespace DTD URL + * @return void + */ + function removeNamespace($prefix) { + if (Xml::removeGlobalNs($prefix)) { + return true; + } + return false; + } + +/** + * Creates an XmlNode object that can be appended to this document or a node in it + * + * @param string $name Node name + * @param string $value Node value + * @param string $namespace Node namespace + * @return object XmlNode + */ + function &createNode($name = null, $value = null, $namespace = false) { + $node =& new XmlNode($name, $value, $namespace); + $node->setParent($this); + return $node; + } + +/** + * Creates an XmlElement object that can be appended to this document or a node in it + * + * @param string $name Element name + * @param string $value Element value + * @param array $attributes Element attributes + * @param string $namespace Node namespace + * @return object XmlElement + */ + function &createElement($name = null, $value = null, $attributes = array(), $namespace = false) { + $element =& new XmlElement($name, $value, $attributes, $namespace); + $element->setParent($this); + return $element; + } + +/** + * Creates an XmlTextNode object that can be appended to this document or a node in it + * + * @param string $value Node value + * @return object XmlTextNode + */ + function &createTextNode($value = null) { + $node = new XmlTextNode($value); + $node->setParent($this); + return $node; + } + +/** + * Gets the XML element properties from an object. + * + * @param object $object Object to get properties from + * @return array Properties from object + * @access public + */ + function normalize($object, $keyName = null, $options = array()) { + if (is_a($object, 'XmlNode')) { + return $object; + } + $name = null; + $options += array('format' => 'attributes'); + + if ($keyName !== null && !is_numeric($keyName)) { + $name = $keyName; + } elseif (!empty($object->_name_)) { + $name = $object->_name_; + } elseif (isset($object->name)) { + $name = $object->name; + } elseif ($options['format'] == 'attributes') { + $name = get_class($object); + } + + $tagOpts = $this->__tagOptions($name); + + if ($tagOpts === false) { + return; + } + + if (isset($tagOpts['name'])) { + $name = $tagOpts['name']; + } elseif ($name != strtolower($name) && $options['slug'] !== false) { + $name = Inflector::slug(Inflector::underscore($name)); + } + + if (!empty($name)) { + $node =& $this->createElement($name); + } else { + $node =& $this; + } + + $namespace = array(); + $attributes = array(); + $children = array(); + $chldObjs = array(); + + if (is_object($object)) { + $chldObjs = get_object_vars($object); + } elseif (is_array($object)) { + $chldObjs = $object; + } elseif (!empty($object) || $object === 0 || $object === '0') { + $node->createTextNode($object); + } + $attr = array(); + + if (isset($tagOpts['attributes'])) { + $attr = $tagOpts['attributes']; + } + if (isset($tagOpts['value']) && isset($chldObjs[$tagOpts['value']])) { + $node->createTextNode($chldObjs[$tagOpts['value']]); + unset($chldObjs[$tagOpts['value']]); + } + + $n = $name; + if (isset($chldObjs['_name_'])) { + $n = null; + unset($chldObjs['_name_']); + } + $c = 0; + + foreach ($chldObjs as $key => $val) { + if (in_array($key, $attr) && !is_object($val) && !is_array($val)) { + $attributes[$key] = $val; + } else { + if (!isset($tagOpts['children']) || $tagOpts['children'] === array() || (is_array($tagOpts['children']) && in_array($key, $tagOpts['children']))) { + if (!is_numeric($key)) { + $n = $key; + } + if (is_array($val)) { + foreach ($val as $n2 => $obj2) { + if (is_numeric($n2)) { + $n2 = $n; + } + $node->normalize($obj2, $n2, $options); + } + } else { + if (is_object($val)) { + + $node->normalize($val, $n, $options); + } elseif ($options['format'] == 'tags' && $this->__tagOptions($key) !== false) { + $tmp =& $node->createElement($key); + if (!empty($val) || $val === 0 || $val === '0') { + $tmp->createTextNode($val); + } + } elseif ($options['format'] == 'attributes') { + $node->addAttribute($key, $val); + } + } + } + } + $c++; + } + if (!empty($name)) { + return $node; + } + return $children; + } + +/** + * Gets the tag-specific options for the given node name + * + * @param string $name XML tag name + * @param string $option The specific option to query. Omit for all options + * @return mixed A specific option value if $option is specified, otherwise an array of all options + * @access private + */ + function __tagOptions($name, $option = null) { + if (isset($this->__tags[$name])) { + $tagOpts = $this->__tags[$name]; + } elseif (isset($this->__tags[strtolower($name)])) { + $tagOpts = $this->__tags[strtolower($name)]; + } else { + return null; + } + if ($tagOpts === false) { + return false; + } + if (empty($option)) { + return $tagOpts; + } + if (isset($tagOpts[$option])) { + return $tagOpts[$option]; + } + return null; + } + +/** + * Returns the fully-qualified XML node name, with namespace + * + * @access public + */ + function name() { + if (!empty($this->namespace)) { + $_this =& XmlManager::getInstance(); + if (!isset($_this->options['verifyNs']) || !$_this->options['verifyNs'] || in_array($this->namespace, array_keys($_this->namespaces))) { + return $this->namespace . ':' . $this->name; + } + } + return $this->name; + } + +/** + * Sets the parent node of this XmlNode. + * + * @access public + */ + function setParent(&$parent) { + if (strtolower(get_class($this)) == 'xml') { + return; + } + if (isset($this->__parent) && is_object($this->__parent)) { + if ($this->__parent->compare($parent)) { + return; + } + foreach ($this->__parent->children as $i => $child) { + if ($this->compare($child)) { + array_splice($this->__parent->children, $i, 1); + break; + } + } + } + if ($parent == null) { + unset($this->__parent); + } else { + $parent->children[] =& $this; + $this->__parent =& $parent; + } + } + +/** + * Returns a copy of self. + * + * @return object Cloned instance + * @access public + */ + function cloneNode() { + return clone($this); + } + +/** + * Compares $node to this XmlNode object + * + * @param object An XmlNode or subclass instance + * @return boolean True if the nodes match, false otherwise + * @access public + */ + function compare($node) { + $keys = array(get_object_vars($this), get_object_vars($node)); + return ($keys[0] === $keys[1]); + } + +/** + * Append given node as a child. + * + * @param object $child XmlNode with appended child + * @param array $options XML generator options for objects and arrays + * @return object A reference to the appended child node + * @access public + */ + function &append(&$child, $options = array()) { + if (empty($child)) { + $return = false; + return $return; + } + + if (is_object($child)) { + if ($this->compare($child)) { + trigger_error(__('Cannot append a node to itself.', true)); + $return = false; + return $return; + } + } else if (is_array($child)) { + $child = Set::map($child); + if (is_array($child)) { + if (!is_a(current($child), 'XmlNode')) { + foreach ($child as $i => $childNode) { + $child[$i] = $this->normalize($childNode, null, $options); + } + } else { + foreach ($child as $childNode) { + $this->append($childNode, $options); + } + } + return $child; + } + } else { + $attributes = array(); + if (func_num_args() >= 2) { + $attributes = func_get_arg(1); + } + $child =& $this->createNode($child, null, $attributes); + } + + $child = $this->normalize($child, null, $options); + + if (empty($child->namespace) && !empty($this->namespace)) { + $child->namespace = $this->namespace; + } + + if (is_a($child, 'XmlNode')) { + $child->setParent($this); + } + + return $child; + } + +/** + * Returns first child node, or null if empty. + * + * @return object First XmlNode + * @access public + */ + function &first() { + if (isset($this->children[0])) { + return $this->children[0]; + } else { + $return = null; + return $return; + } + } + +/** + * Returns last child node, or null if empty. + * + * @return object Last XmlNode + * @access public + */ + function &last() { + if (count($this->children) > 0) { + return $this->children[count($this->children) - 1]; + } else { + $return = null; + return $return; + } + } + +/** + * Returns child node with given ID. + * + * @param string $id Name of child node + * @return object Child XmlNode + * @access public + */ + function &child($id) { + $null = null; + + if (is_int($id)) { + if (isset($this->children[$id])) { + return $this->children[$id]; + } else { + return null; + } + } elseif (is_string($id)) { + for ($i = 0; $i < count($this->children); $i++) { + if ($this->children[$i]->name == $id) { + return $this->children[$i]; + } + } + } + return $null; + } + +/** + * Gets a list of childnodes with the given tag name. + * + * @param string $name Tag name of child nodes + * @return array An array of XmlNodes with the given tag name + * @access public + */ + function children($name) { + $nodes = array(); + $count = count($this->children); + for ($i = 0; $i < $count; $i++) { + if ($this->children[$i]->name == $name) { + $nodes[] =& $this->children[$i]; + } + } + return $nodes; + } + +/** + * Gets a reference to the next child node in the list of this node's parent. + * + * @return object A reference to the XmlNode object + * @access public + */ + function &nextSibling() { + $null = null; + $count = count($this->__parent->children); + for ($i = 0; $i < $count; $i++) { + if ($this->__parent->children[$i] == $this) { + if ($i >= $count - 1 || !isset($this->__parent->children[$i + 1])) { + return $null; + } + return $this->__parent->children[$i + 1]; + } + } + return $null; + } + +/** + * Gets a reference to the previous child node in the list of this node's parent. + * + * @return object A reference to the XmlNode object + * @access public + */ + function &previousSibling() { + $null = null; + $count = count($this->__parent->children); + for ($i = 0; $i < $count; $i++) { + if ($this->__parent->children[$i] == $this) { + if ($i == 0 || !isset($this->__parent->children[$i - 1])) { + return $null; + } + return $this->__parent->children[$i - 1]; + } + } + return $null; + } + +/** + * Returns parent node. + * + * @return object Parent XmlNode + * @access public + */ + function &parent() { + return $this->__parent; + } + +/** + * Returns the XML document to which this node belongs + * + * @return object Parent XML object + * @access public + */ + function &document() { + $document =& $this; + while (true) { + if (get_class($document) == 'Xml' || $document == null) { + break; + } + $document =& $document->parent(); + } + return $document; + } + +/** + * Returns true if this structure has child nodes. + * + * @return bool + * @access public + */ + function hasChildren() { + if (is_array($this->children) && !empty($this->children)) { + return true; + } + return false; + } + +/** + * Returns this XML structure as a string. + * + * @return string String representation of the XML structure. + * @access public + */ + function toString($options = array(), $depth = 0) { + if (is_int($options)) { + $depth = $options; + $options = array(); + } + $defaults = array('cdata' => true, 'whitespace' => false, 'convertEntities' => false, 'showEmpty' => true, 'leaveOpen' => false); + $options = array_merge($defaults, Xml::options(), $options); + $tag = !(strpos($this->name, '#') === 0); + $d = ''; + + if ($tag) { + if ($options['whitespace']) { + $d .= str_repeat("\t", $depth); + } + + $d .= '<' . $this->name(); + if (!empty($this->namespaces) > 0) { + foreach ($this->namespaces as $key => $val) { + $val = str_replace('"', '\"', $val); + $d .= ' xmlns:' . $key . '="' . $val . '"'; + } + } + + $parent =& $this->parent(); + if ($parent->name === '#document' && !empty($parent->namespaces)) { + foreach ($parent->namespaces as $key => $val) { + $val = str_replace('"', '\"', $val); + $d .= ' xmlns:' . $key . '="' . $val . '"'; + } + } + + if (is_array($this->attributes) && !empty($this->attributes)) { + foreach ($this->attributes as $key => $val) { + if (is_bool($val) && $val === false) { + $val = 0; + } + $d .= ' ' . $key . '="' . htmlspecialchars($val, ENT_QUOTES, Configure::read('App.encoding')) . '"'; + } + } + } + + if (!$this->hasChildren() && empty($this->value) && $this->value !== 0 && $tag) { + if (!$options['leaveOpen']) { + $d .= ' />'; + } + if ($options['whitespace']) { + $d .= "\n"; + } + } elseif ($tag || $this->hasChildren()) { + if ($tag) { + $d .= '>'; + } + if ($this->hasChildren()) { + if ($options['whitespace']) { + $d .= "\n"; + } + $count = count($this->children); + $cDepth = $depth + 1; + for ($i = 0; $i < $count; $i++) { + $d .= $this->children[$i]->toString($options, $cDepth); + } + if ($tag) { + if ($options['whitespace'] && $tag) { + $d .= str_repeat("\t", $depth); + } + if (!$options['leaveOpen']) { + $d .= 'name() . '>'; + } + if ($options['whitespace']) { + $d .= "\n"; + } + } + } + } + return $d; + } + +/** + * Return array representation of current object. + * + * @param boolean $camelize true will camelize child nodes, false will not alter node names + * @return array Array representation + * @access public + */ + function toArray($camelize = true) { + $out = $this->attributes; + $multi = null; + + foreach ($this->children as $child) { + $key = $camelize ? Inflector::camelize($child->name) : $child->name; + + if (is_a($child, 'XmlTextNode')) { + $out['value'] = $child->value; + continue; + } elseif (isset($child->children[0]) && is_a($child->children[0], 'XmlTextNode')) { + $value = $child->children[0]->value; + if ($child->attributes) { + $value = array_merge(array('value' => $value), $child->attributes); + } + if (isset($out[$child->name]) || isset($multi[$key])) { + if (!isset($multi[$key])) { + $multi[$key] = array($out[$child->name]); + unset($out[$child->name]); + } + $multi[$key][] = $value; + } else { + $out[$child->name] = $value; + } + continue; + } elseif (count($child->children) === 0 && $child->value == '') { + $value = $child->attributes; + if (isset($out[$key]) || isset($multi[$key])) { + if (!isset($multi[$key])) { + $multi[$key] = array($out[$key]); + //unset($out[$key]); + } + $multi[$key][] = $value; + } elseif (!empty($value)) { + $out[$key] = $value; + } else { + $out[$child->name] = $value; + } + continue; + } else { + $value = $child->toArray($camelize); + } + + if (!isset($out[$key])) { + $out[$key] = $value; + } else { + if (!is_array($out[$key]) || !isset($out[$key][0])) { + $out[$key] = array($out[$key]); + } + $out[$key][] = $value; + } + } + + if (isset($multi)) { + $out = array_merge($out, $multi); + } + return $out; + } + +/** + * Returns data from toString when this object is converted to a string. + * + * @return string String representation of this structure. + * @access private + */ + function __toString() { + return $this->toString(); + } + +/** + * Debug method. Deletes the parent. Also deletes this node's children, + * if given the $recursive parameter. + * + * @param boolean $recursive Recursively delete elements. + * @access protected + */ + function _killParent($recursive = true) { + unset($this->__parent, $this->_log); + if ($recursive && $this->hasChildren()) { + for ($i = 0; $i < count($this->children); $i++) { + $this->children[$i]->_killParent(true); + } + } + } +} + +/** + * Main XML class. + * + * Parses and stores XML data, representing the root of an XML document + * + * @package cake + * @subpackage cake.cake.libs + * @since CakePHP v .0.10.3.1400 + */ +class Xml extends XmlNode { + +/** + * Resource handle to XML parser. + * + * @var resource + * @access private + */ + var $__parser; + +/** + * File handle to XML indata file. + * + * @var resource + * @access private + */ + var $__file; + +/** + * Raw XML string data (for loading purposes) + * + * @var string + * @access private + */ + var $__rawData = null; + +/** + * XML document header + * + * @var string + * @access private + */ + var $__header = null; + +/** + * Default array keys/object properties to use as tag names when converting objects or array + * structures to XML. Set by passing $options['tags'] to this object's constructor. + * + * @var array + * @access private + */ + var $__tags = array(); + +/** + * XML document version + * + * @var string + * @access private + */ + var $version = '1.0'; + +/** + * XML document encoding + * + * @var string + * @access private + */ + var $encoding = 'UTF-8'; + +/** + * Constructor. Sets up the XML parser with options, gives it this object as + * its XML object, and sets some variables. + * + * ### Options + * - 'root': The name of the root element, defaults to '#document' + * - 'version': The XML version, defaults to '1.0' + * - 'encoding': Document encoding, defaults to 'UTF-8' + * - 'namespaces': An array of namespaces (as strings) used in this document + * - 'format': Specifies the format this document converts to when parsed or + * rendered out as text, either 'attributes' or 'tags', defaults to 'attributes' + * - 'tags': An array specifying any tag-specific formatting options, indexed + * by tag name. See XmlNode::normalize(). + * - 'slug': A boolean to indicate whether or not you want the string version of the XML document + * to have its tags run through Inflector::slug(). Defaults to true + * + * @param mixed $input The content with which this XML document should be initialized. Can be a + * string, array or object. If a string is specified, it may be a literal XML + * document, or a URL or file path to read from. + * @param array $options Options to set up with, for valid options see above: + * @see XmlNode::normalize() + */ + function __construct($input = null, $options = array()) { + $defaults = array( + 'root' => '#document', 'tags' => array(), 'namespaces' => array(), + 'version' => '1.0', 'encoding' => 'UTF-8', 'format' => 'attributes', + 'slug' => true + ); + $options = array_merge($defaults, Xml::options(), $options); + + foreach (array('version', 'encoding', 'namespaces') as $key) { + $this->{$key} = $options[$key]; + } + $this->__tags = $options['tags']; + parent::__construct('#document'); + + if ($options['root'] !== '#document') { + $Root =& $this->createNode($options['root']); + } else { + $Root =& $this; + } + + if (!empty($input)) { + if (is_string($input)) { + $Root->load($input); + } elseif (is_array($input) || is_object($input)) { + $Root->append($input, $options); + } + } + } + +/** + * Initialize XML object from a given XML string. Returns false on error. + * + * @param string $input XML string, a path to a file, or an HTTP resource to load + * @return boolean Success + * @access public + */ + function load($input) { + if (!is_string($input)) { + return false; + } + $this->__rawData = null; + $this->__header = null; + + if (strstr($input, "<")) { + $this->__rawData = $input; + } elseif (strpos($input, 'http://') === 0 || strpos($input, 'https://') === 0) { + App::import('Core', 'HttpSocket'); + $socket = new HttpSocket(); + $this->__rawData = $socket->get($input); + } elseif (file_exists($input)) { + $this->__rawData = file_get_contents($input); + } else { + trigger_error(__('XML cannot be read', true)); + return false; + } + return $this->parse(); + } + +/** + * Parses and creates XML nodes from the __rawData property. + * + * @return boolean Success + * @access public + * @see Xml::load() + * @todo figure out how to link attributes and namespaces + */ + function parse() { + $this->__initParser(); + $this->__rawData = trim($this->__rawData); + $this->__header = trim(str_replace( + array('<' . '?', '?' . '>'), + array('', ''), + substr($this->__rawData, 0, strpos($this->__rawData, '?' . '>')) + )); + + xml_parse_into_struct($this->__parser, $this->__rawData, $vals); + $xml =& $this; + $count = count($vals); + + for ($i = 0; $i < $count; $i++) { + $data = $vals[$i]; + $data += array('tag' => null, 'value' => null, 'attributes' => array()); + switch ($data['type']) { + case "open" : + $xml =& $xml->createElement($data['tag'], $data['value'], $data['attributes']); + break; + case "close" : + $xml =& $xml->parent(); + break; + case "complete" : + $xml->createElement($data['tag'], $data['value'], $data['attributes']); + break; + case 'cdata': + $xml->createTextNode($data['value']); + break; + } + } + xml_parser_free($this->__parser); + $this->__parser = null; + return true; + } + +/** + * Initializes the XML parser resource + * + * @return void + * @access private + */ + function __initParser() { + if (empty($this->__parser)) { + $this->__parser = xml_parser_create(); + xml_set_object($this->__parser, $this); + xml_parser_set_option($this->__parser, XML_OPTION_CASE_FOLDING, 0); + xml_parser_set_option($this->__parser, XML_OPTION_SKIP_WHITE, 1); + } + } + +/** + * Returns a string representation of the XML object + * + * @param mixed $options If boolean: whether to include the XML header with the document + * (defaults to true); if an array, overrides the default XML generation options + * @return string XML data + * @access public + * @deprecated + * @see Xml::toString() + */ + function compose($options = array()) { + return $this->toString($options); + } + +/** + * If debug mode is on, this method echoes an error message. + * + * @param string $msg Error message + * @param integer $code Error code + * @param integer $line Line in file + * @access public + */ + function error($msg, $code = 0, $line = 0) { + if (Configure::read('debug')) { + echo $msg . " " . $code . " " . $line; + } + } + +/** + * Returns a string with a textual description of the error code, or FALSE if no description was found. + * + * @param integer $code Error code + * @return string Error message + * @access public + */ + function getError($code) { + $r = @xml_error_string($code); + return $r; + } + +// Overridden functions from superclass + +/** + * Get next element. NOT implemented. + * + * @return object + * @access public + */ + function &next() { + $return = null; + return $return; + } + +/** + * Get previous element. NOT implemented. + * + * @return object + * @access public + */ + function &previous() { + $return = null; + return $return; + } + +/** + * Get parent element. NOT implemented. + * + * @return object + * @access public + */ + function &parent() { + $return = null; + return $return; + } + +/** + * Adds a namespace to the current document + * + * @param string $prefix The namespace prefix + * @param string $url The namespace DTD URL + * @return void + */ + function addNamespace($prefix, $url) { + if ($count = count($this->children)) { + for ($i = 0; $i < $count; $i++) { + $this->children[$i]->addNamespace($prefix, $url); + } + return true; + } + return parent::addNamespace($prefix, $url); + } + +/** + * Removes a namespace to the current document + * + * @param string $prefix The namespace prefix + * @return void + */ + function removeNamespace($prefix) { + if ($count = count($this->children)) { + for ($i = 0; $i < $count; $i++) { + $this->children[$i]->removeNamespace($prefix); + } + return true; + } + return parent::removeNamespace($prefix); + } + +/** + * Return string representation of current object. + * + * @return string String representation + * @access public + */ + function toString($options = array()) { + if (is_bool($options)) { + $options = array('header' => $options); + } + + $defaults = array('header' => false, 'encoding' => $this->encoding); + $options = array_merge($defaults, Xml::options(), $options); + $data = parent::toString($options, 0); + + if ($options['header']) { + if (!empty($this->__header)) { + return $this->header($this->__header) . "\n" . $data; + } + return $this->header() . "\n" . $data; + } + + return $data; + } + +/** + * Return a header used on the first line of the xml file + * + * @param mixed $attrib attributes of the header element + * @return string formated header + */ + function header($attrib = array()) { + $header = 'xml'; + if (is_string($attrib)) { + $header = $attrib; + } else { + + $attrib = array_merge(array('version' => $this->version, 'encoding' => $this->encoding), $attrib); + foreach ($attrib as $key=>$val) { + $header .= ' ' . $key . '="' . $val . '"'; + } + } + return '<' . '?' . $header . ' ?' . '>'; + } + +/** + * Destructor, used to free resources. + * + * @access private + */ + function __destruct() { + $this->_killParent(true); + } + +/** + * Adds a namespace to any XML documents generated or parsed + * + * @param string $name The namespace name + * @param string $url The namespace URI; can be empty if in the default namespace map + * @return boolean False if no URL is specified, and the namespace does not exist + * default namespace map, otherwise true + * @access public + * @static + */ + function addGlobalNs($name, $url = null) { + $_this =& XmlManager::getInstance(); + if ($ns = Xml::resolveNamespace($name, $url)) { + $_this->namespaces = array_merge($_this->namespaces, $ns); + return $ns; + } + return false; + } + +/** + * Resolves current namespace + * + * @param string $name + * @param string $url + * @return array + */ + function resolveNamespace($name, $url) { + $_this =& XmlManager::getInstance(); + if ($url == null && isset($_this->defaultNamespaceMap[$name])) { + $url = $_this->defaultNamespaceMap[$name]; + } elseif ($url == null) { + return false; + } + + if (!strpos($url, '://') && isset($_this->defaultNamespaceMap[$name])) { + $_url = $_this->defaultNamespaceMap[$name]; + $name = $url; + $url = $_url; + } + return array($name => $url); + } + +/** + * Alias to Xml::addNs + * + * @access public + * @static + */ + function addGlobalNamespace($name, $url = null) { + return Xml::addGlobalNs($name, $url); + } + +/** + * Removes a namespace added in addNs() + * + * @param string $name The namespace name or URI + * @access public + * @static + */ + function removeGlobalNs($name) { + $_this =& XmlManager::getInstance(); + if (isset($_this->namespaces[$name])) { + unset($_this->namespaces[$name]); + unset($this->namespaces[$name]); + return true; + } elseif (in_array($name, $_this->namespaces)) { + $keys = array_keys($_this->namespaces); + $count = count($keys); + for ($i = 0; $i < $count; $i++) { + if ($_this->namespaces[$keys[$i]] == $name) { + unset($_this->namespaces[$keys[$i]]); + unset($this->namespaces[$keys[$i]]); + return true; + } + } + } + return false; + } + +/** + * Alias to Xml::removeNs + * + * @access public + * @static + */ + function removeGlobalNamespace($name) { + return Xml::removeGlobalNs($name); + } + +/** + * Sets/gets global XML options + * + * @param array $options + * @return array + * @access public + * @static + */ + function options($options = array()) { + $_this =& XmlManager::getInstance(); + $_this->options = array_merge($_this->options, $options); + return $_this->options; + } +} + +/** + * The XML Element + * + */ +class XmlElement extends XmlNode { + +/** + * Construct an Xml element + * + * @param string $name name of the node + * @param string $value value of the node + * @param array $attributes + * @param string $namespace + * @return string A copy of $data in XML format + */ + function __construct($name = null, $value = null, $attributes = array(), $namespace = false) { + parent::__construct($name, $value, $namespace); + $this->addAttribute($attributes); + } + +/** + * Get all the attributes for this element + * + * @return array + */ + function attributes() { + return $this->attributes; + } + +/** + * Add attributes to this element + * + * @param string $name name of the node + * @param string $value value of the node + * @return boolean + */ + function addAttribute($name, $val = null) { + if (is_object($name)) { + $name = get_object_vars($name); + } + if (is_array($name)) { + foreach ($name as $key => $val) { + $this->addAttribute($key, $val); + } + return true; + } + if (is_numeric($name)) { + $name = $val; + $val = null; + } + if (!empty($name)) { + if (strpos($name, 'xmlns') === 0) { + if ($name == 'xmlns') { + $this->namespace = $val; + } else { + list($pre, $prefix) = explode(':', $name); + $this->addNamespace($prefix, $val); + return true; + } + } + $this->attributes[$name] = $val; + return true; + } + return false; + } + +/** + * Remove attributes to this element + * + * @param string $name name of the node + * @return boolean + */ + function removeAttribute($attr) { + if (array_key_exists($attr, $this->attributes)) { + unset($this->attributes[$attr]); + return true; + } + return false; + } +} + +/** + * XML text or CDATA node + * + * Stores XML text data according to the encoding of the parent document + * + * @package cake + * @subpackage cake.cake.libs + * @since CakePHP v .1.2.6000 + */ +class XmlTextNode extends XmlNode { + +/** + * Harcoded XML node name, represents this object as a text node + * + * @var string + */ + var $name = '#text'; + +/** + * The text/data value which this node contains + * + * @var string + */ + var $value = null; + +/** + * Construct text node with the given parent object and data + * + * @param object $parent Parent XmlNode/XmlElement object + * @param mixed $value Node value + */ + function __construct($value = null) { + $this->value = $value; + } + +/** + * Looks for child nodes in this element + * + * @return boolean False - not supported + */ + function hasChildren() { + return false; + } + +/** + * Append an XML node: XmlTextNode does not support this operation + * + * @return boolean False - not supported + * @todo make convertEntities work without mb support, convert entities to number entities + */ + function append() { + return false; + } + +/** + * Return string representation of current text node object. + * + * @return string String representation + * @access public + */ + function toString($options = array(), $depth = 0) { + if (is_int($options)) { + $depth = $options; + $options = array(); + } + + $defaults = array('cdata' => true, 'whitespace' => false, 'convertEntities' => false); + $options = array_merge($defaults, Xml::options(), $options); + $val = $this->value; + + if ($options['convertEntities'] && function_exists('mb_convert_encoding')) { + $val = mb_convert_encoding($val,'UTF-8', 'HTML-ENTITIES'); + } + + if ($options['cdata'] === true && !is_numeric($val)) { + $val = ''; + } + + if ($options['whitespace']) { + return str_repeat("\t", $depth) . $val . "\n"; + } + return $val; + } +} + +/** + * Manages application-wide namespaces and XML parsing/generation settings. + * Private class, used exclusively within scope of XML class. + * + * @access private + */ +class XmlManager { + +/** + * Global XML namespaces. Used in all XML documents processed by this application + * + * @var array + * @access public + */ + var $namespaces = array(); + +/** + * Global XML document parsing/generation settings. + * + * @var array + * @access public + */ + var $options = array(); + +/** + * Map of common namespace URIs + * + * @access private + * @var array + */ + var $defaultNamespaceMap = array( + 'dc' => 'http://purl.org/dc/elements/1.1/', // Dublin Core + 'dct' => 'http://purl.org/dc/terms/', // Dublin Core Terms + 'g' => 'http://base.google.com/ns/1.0', // Google Base + 'rc' => 'http://purl.org/rss/1.0/modules/content/', // RSS 1.0 Content Module + 'wf' => 'http://wellformedweb.org/CommentAPI/', // Well-Formed Web Comment API + 'fb' => 'http://rssnamespace.org/feedburner/ext/1.0', // FeedBurner extensions + 'lj' => 'http://www.livejournal.org/rss/lj/1.0/', // Live Journal + 'itunes' => 'http://www.itunes.com/dtds/podcast-1.0.dtd', // iTunes + 'xhtml' => 'http://www.w3.org/1999/xhtml', // XHTML, + 'atom' => 'http://www.w3.org/2005/Atom' // Atom + ); + +/** + * Returns a reference to the global XML object that manages app-wide XML settings + * + * @return object + * @access public + */ + function &getInstance() { + static $instance = array(); + + if (!$instance) { + $instance[0] =& new XmlManager(); + } + return $instance[0]; + } +} diff --git a/cake/tests/.DS_Store b/cake/tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..10d3e25d9b63f8be7495f08d08e7eb6b9cea81ca GIT binary patch literal 6148 zcmeHK%}T>S5T0$TCjLM#g5DNS9!g2@_uwIfDtZ%A=)p=&jL<+Z(x&uKsu5qvNALkW z`#N=IcUzF^O+?BJ%zne{H%azO*v$Zd@CUIAPz3-Bov>u%@Qu+t`J9zZri>`mH3G;X zgC5*nq;qUe{6_`o-Purw1_aPSpS{2AHcGPyXX(>8L*Jb!!w8@ZDI^eGq+eL?#6n-5 zOo%jPMZ^Asxz=m+kS6`yaXv(;Tv=LPv8+{Vz1>Rg<80_>gZsFD6?C&UU*t=G7 z9_E9-ANJJDWtewyM#ar6OEGR6b}NbVZl}6E8o9^&HR&BJ9y$l(v29y+ z_08Jcsh^xT!|~%&@vNQ`1b)5BHVjVTWg0ND0;~Wluuuw^UC&xus8#V|SOHexHx!`# zL823S1`Ca9>%c*^0EiV#E5n$67^y}Y^b8gnaRyE3Qbb)UOp76OIp(F|c?JuOx*UXQ zK7_fmFdd3ecgO2XMF-(&dky&qbY&i~V&`+r5^ffZl{7E=LHX#@=)*JjSv yxmD6xE75Pz$%t2IoRwgpj$-7}QM`q&4D*r#M9*NM5i@A~BcNp9ffe{u1wH{2#8q?v literal 0 HcmV?d00001 diff --git a/cake/tests/.svn/entries b/cake/tests/.svn/entries new file mode 100644 index 0000000..7465eaf --- /dev/null +++ b/cake/tests/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/tests +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +lib +dir + diff --git a/cake/tests/lib/.DS_Store b/cake/tests/lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1c2cf93270de88696c24f6fa340a4a1cc658fa9c GIT binary patch literal 6148 zcmeHKOHRWu5FM8;TG&(|5NuGEtdO`tR23w)uqXWijYw&fw!kvS;7}ZZ18@&`Gh?AN zO{A_+g=VDjvz?h2`&qGLB68j3_=2cIL@hXDa~DO0@pJYyYxtfv&+{Onr{HKM~xjt7eA z4ZFdTvRbB(64OB?)0Ad321imo9(Pk>Ijv-wVCz>STmVvR0m@DE5%xNl6Q=PwJI88@?;NwD%xuT|%^Oq0j-|YMi z#mU>jA4oX4P|-?Lz!X?jU`LxBKL0Q4@Bgbw)-nZ5fq$idYxZt?T};WJt!tCxvo?VD q;cOh2D@qCqe;iANkK$vv7@h@O0fruPMfAYzM?hq-!W8&Z1%3cYF00J| literal 0 HcmV?d00001 diff --git a/cake/tests/lib/.svn/entries b/cake/tests/lib/.svn/entries new file mode 100644 index 0000000..188cca1 --- /dev/null +++ b/cake/tests/lib/.svn/entries @@ -0,0 +1,272 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/tests/lib +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +test_manager.php +file + + + + +2010-08-30T06:36:28.000000Z +4f36a9d865982cacbbeb7d2982d56671 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +11739 + +cake_web_test_case.php +file + + + + +2010-08-30T06:36:28.000000Z +83fa13156d1a637bab83dd41bbe30b3a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1007 + +reporter +dir + +cake_test_case.php +file + + + + +2010-08-30T06:36:28.000000Z +7cb26bd1c2617a8143b210bd34b1e8ff +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +22101 + +code_coverage_manager.php +file + + + + +2010-08-30T06:36:28.000000Z +574d3ea32aa0828c50be19c7c9038f9e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +21860 + +cake_test_suite_dispatcher.php +file + + + + +2010-08-30T06:36:28.000000Z +2a16b57fce002209146677dd07385fa6 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5788 + +cake_test_model.php +file + + + + +2010-08-30T06:36:28.000000Z +88e5c5affb60d085608f404086894e43 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +980 + +cake_test_fixture.php +file + + + + +2010-08-30T06:36:28.000000Z +42c2c4338f2794f80f864d4afdcf7fa7 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5774 + +templates +dir + diff --git a/cake/tests/lib/.svn/text-base/cake_test_case.php.svn-base b/cake/tests/lib/.svn/text-base/cake_test_case.php.svn-base new file mode 100644 index 0000000..06a96b5 --- /dev/null +++ b/cake/tests/lib/.svn/text-base/cake_test_case.php.svn-base @@ -0,0 +1,831 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +if (!class_exists('dispatcher')) { + require CAKE . 'dispatcher.php'; +} +require_once CAKE_TESTS_LIB . 'cake_test_model.php'; +require_once CAKE_TESTS_LIB . 'cake_test_fixture.php'; +App::import('Vendor', 'simpletest' . DS . 'unit_tester'); + +/** + * CakeTestDispatcher + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestDispatcher extends Dispatcher { + +/** + * controller property + * + * @var Controller + * @access public + */ + var $controller; + var $testCase; + +/** + * testCase method + * + * @param CakeTestCase $testCase + * @return void + * @access public + */ + function testCase(&$testCase) { + $this->testCase =& $testCase; + } + +/** + * invoke method + * + * @param Controller $controller + * @param array $params + * @param boolean $missingAction + * @return Controller + * @access protected + */ + function _invoke(&$controller, $params, $missingAction = false) { + $this->controller =& $controller; + + if (isset($this->testCase) && method_exists($this->testCase, 'startController')) { + $this->testCase->startController($this->controller, $params); + } + + $result = parent::_invoke($this->controller, $params, $missingAction); + + if (isset($this->testCase) && method_exists($this->testCase, 'endController')) { + $this->testCase->endController($this->controller, $params); + } + + return $result; + } +} + +/** + * CakeTestCase class + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestCase extends UnitTestCase { + +/** + * Methods used internally. + * + * @var array + * @access public + */ + var $methods = array('start', 'end', 'startcase', 'endcase', 'starttest', 'endtest'); + +/** + * By default, all fixtures attached to this class will be truncated and reloaded after each test. + * Set this to false to handle manually + * + * @var array + * @access public + */ + var $autoFixtures = true; + +/** + * Set this to false to avoid tables to be dropped if they already exist + * + * @var boolean + * @access public + */ + var $dropTables = true; + +/** + * Maps fixture class names to fixture identifiers as included in CakeTestCase::$fixtures + * + * @var array + * @access protected + */ + var $_fixtureClassMap = array(); + +/** + * truncated property + * + * @var boolean + * @access private + */ + var $__truncated = true; + +/** + * savedGetData property + * + * @var array + * @access private + */ + var $__savedGetData = array(); + +/** + * Called when a test case (group of methods) is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * @return void + * @access public + */ + function startCase() { + } + +/** + * Called when a test case (group of methods) has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * @return void + * @access public + */ + function endCase() { + } + +/** + * Called when a test case method is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * @return void + * @access public + */ + function startTest($method) { + } + +/** + * Called when a test case method has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * @return void + * @access public + */ + function endTest($method) { + } + +/** + * Overrides SimpleTestCase::assert to enable calling of skipIf() from within tests + * + * @param Expectation $expectation + * @param mixed $compare + * @param string $message + * @return boolean|null + * @access public + */ + function assert(&$expectation, $compare, $message = '%s') { + if ($this->_should_skip) { + return; + } + return parent::assert($expectation, $compare, $message); + } + +/** + * Overrides SimpleTestCase::skipIf to provide a boolean return value + * + * @param boolean $shouldSkip + * @param string $message + * @return boolean + * @access public + */ + function skipIf($shouldSkip, $message = '%s') { + parent::skipIf($shouldSkip, $message); + return $shouldSkip; + } + +/** + * Callback issued when a controller's action is about to be invoked through testAction(). + * + * @param Controller $controller Controller that's about to be invoked. + * @param array $params Additional parameters as sent by testAction(). + * @return void + * @access public + */ + function startController(&$controller, $params = array()) { + if (isset($params['fixturize']) && ((is_array($params['fixturize']) && !empty($params['fixturize'])) || $params['fixturize'] === true)) { + if (!isset($this->db)) { + $this->_initDb(); + } + + if ($controller->uses === false) { + $list = array($controller->modelClass); + } else { + $list = is_array($controller->uses) ? $controller->uses : array($controller->uses); + } + + $models = array(); + ClassRegistry::config(array('ds' => $params['connection'])); + + foreach ($list as $name) { + if ((is_array($params['fixturize']) && in_array($name, $params['fixturize'])) || $params['fixturize'] === true) { + if (class_exists($name) || App::import('Model', $name)) { + $object =& ClassRegistry::init($name); + //switch back to specified datasource. + $object->setDataSource($params['connection']); + $db =& ConnectionManager::getDataSource($object->useDbConfig); + $db->cacheSources = false; + + $models[$object->alias] = array( + 'table' => $object->table, + 'model' => $object->alias, + 'key' => strtolower($name), + ); + } + } + } + ClassRegistry::config(array('ds' => 'test_suite')); + + if (!empty($models) && isset($this->db)) { + $this->_actionFixtures = array(); + + foreach ($models as $model) { + $fixture =& new CakeTestFixture($this->db); + + $fixture->name = $model['model'] . 'Test'; + $fixture->table = $model['table']; + $fixture->import = array('model' => $model['model'], 'records' => true); + $fixture->init(); + + $fixture->create($this->db); + $fixture->insert($this->db); + $this->_actionFixtures[] =& $fixture; + } + + foreach ($models as $model) { + $object =& ClassRegistry::getObject($model['key']); + if ($object !== false) { + $object->setDataSource('test_suite'); + $object->cacheSources = false; + } + } + } + } + } + +/** + * Callback issued when a controller's action has been invoked through testAction(). + * + * @param Controller $controller Controller that has been invoked. + * @param array $params Additional parameters as sent by testAction(). + * @return void + * @access public + */ + function endController(&$controller, $params = array()) { + if (isset($this->db) && isset($this->_actionFixtures) && !empty($this->_actionFixtures) && $this->dropTables) { + foreach ($this->_actionFixtures as $fixture) { + $fixture->drop($this->db); + } + } + } + +/** + * Executes a Cake URL, and can get (depending on the $params['return'] value): + * + * Params: + * - 'return' has several possible values: + * 1. 'result': Whatever the action returns (and also specifies $this->params['requested'] for controller) + * 2. 'view': The rendered view, without the layout + * 3. 'contents': The rendered view, within the layout. + * 4. 'vars': the view vars + * + * - 'fixturize' - Set to true if you want to copy model data from 'connection' to the test_suite connection + * - 'data' - The data you want to insert into $this->data in the controller. + * - 'connection' - Which connection to use in conjunction with fixturize (defaults to 'default') + * - 'method' - What type of HTTP method to simulate (defaults to post) + * + * @param string $url Cake URL to execute (e.g: /articles/view/455) + * @param mixed $params Parameters (see above), or simply a string of what to return + * @return mixed Whatever is returned depending of requested result + * @access public + */ + function testAction($url, $params = array()) { + $default = array( + 'return' => 'result', + 'fixturize' => false, + 'data' => array(), + 'method' => 'post', + 'connection' => 'default' + ); + + if (is_string($params)) { + $params = array('return' => $params); + } + $params = array_merge($default, $params); + + $toSave = array( + 'case' => null, + 'group' => null, + 'app' => null, + 'output' => null, + 'show' => null, + 'plugin' => null + ); + $this->__savedGetData = (empty($this->__savedGetData)) + ? array_intersect_key($_GET, $toSave) + : $this->__savedGetData; + + $data = (!empty($params['data'])) ? $params['data'] : array(); + + if (strtolower($params['method']) == 'get') { + $_GET = array_merge($this->__savedGetData, $data); + $_POST = array(); + } else { + $_POST = array('data' => $data); + $_GET = $this->__savedGetData; + } + + $return = $params['return']; + $params = array_diff_key($params, array('data' => null, 'method' => null, 'return' => null)); + + $dispatcher =& new CakeTestDispatcher(); + $dispatcher->testCase($this); + + if ($return != 'result') { + if ($return != 'contents') { + $params['layout'] = false; + } + + ob_start(); + @$dispatcher->dispatch($url, $params); + $result = ob_get_clean(); + + if ($return == 'vars') { + $view =& ClassRegistry::getObject('view'); + $viewVars = $view->getVars(); + + $result = array(); + + foreach ($viewVars as $var) { + $result[$var] = $view->getVar($var); + } + + if (!empty($view->pageTitle)) { + $result = array_merge($result, array('title' => $view->pageTitle)); + } + } + } else { + $params['return'] = 1; + $params['bare'] = 1; + $params['requested'] = 1; + + $result = @$dispatcher->dispatch($url, $params); + } + + if (isset($this->_actionFixtures)) { + unset($this->_actionFixtures); + } + ClassRegistry::flush(); + + return $result; + } + +/** + * Announces the start of a test. + * + * @param string $method Test method just started. + * @return void + * @access public + */ + function before($method) { + parent::before($method); + + if (isset($this->fixtures) && (!is_array($this->fixtures) || empty($this->fixtures))) { + unset($this->fixtures); + } + + // Set up DB connection + if (isset($this->fixtures) && strtolower($method) == 'start') { + $this->_initDb(); + $this->_loadFixtures(); + } + + // Create records + if (isset($this->_fixtures) && isset($this->db) && !in_array(strtolower($method), array('start', 'end')) && $this->__truncated && $this->autoFixtures == true) { + foreach ($this->_fixtures as $fixture) { + $inserts = $fixture->insert($this->db); + } + } + + if (!in_array(strtolower($method), $this->methods)) { + $this->startTest($method); + } + } + +/** + * Runs as first test to create tables. + * + * @return void + * @access public + */ + function start() { + if (isset($this->_fixtures) && isset($this->db)) { + Configure::write('Cache.disable', true); + $cacheSources = $this->db->cacheSources; + $this->db->cacheSources = false; + $sources = $this->db->listSources(); + $this->db->cacheSources = $cacheSources; + + if (!$this->dropTables) { + return; + } + foreach ($this->_fixtures as $fixture) { + $table = $this->db->config['prefix'] . $fixture->table; + if (in_array($table, $sources)) { + $fixture->drop($this->db); + $fixture->create($this->db); + } elseif (!in_array($table, $sources)) { + $fixture->create($this->db); + } + } + } + } + +/** + * Runs as last test to drop tables. + * + * @return void + * @access public + */ + function end() { + if (isset($this->_fixtures) && isset($this->db)) { + if ($this->dropTables) { + foreach (array_reverse($this->_fixtures) as $fixture) { + $fixture->drop($this->db); + } + } + $this->db->sources(true); + Configure::write('Cache.disable', false); + } + + if (class_exists('ClassRegistry')) { + ClassRegistry::flush(); + } + } + +/** + * Announces the end of a test. + * + * @param string $method Test method just finished. + * @return void + * @access public + */ + function after($method) { + $isTestMethod = !in_array(strtolower($method), array('start', 'end')); + + if (isset($this->_fixtures) && isset($this->db) && $isTestMethod) { + foreach ($this->_fixtures as $fixture) { + $fixture->truncate($this->db); + } + $this->__truncated = true; + } else { + $this->__truncated = false; + } + + if (!in_array(strtolower($method), $this->methods)) { + $this->endTest($method); + } + $this->_should_skip = false; + + parent::after($method); + } + +/** + * Gets a list of test names. Normally that will be all internal methods that start with the + * name "test". This method should be overridden if you want a different rule. + * + * @return array List of test names. + * @access public + */ + function getTests() { + return array_merge( + array('start', 'startCase'), + array_diff(parent::getTests(), array('testAction', 'testaction')), + array('endCase', 'end') + ); + } + +/** + * Chooses which fixtures to load for a given test + * + * @param string $fixture Each parameter is a model name that corresponds to a + * fixture, i.e. 'Post', 'Author', etc. + * @return void + * @access public + * @see CakeTestCase::$autoFixtures + */ + function loadFixtures() { + $args = func_get_args(); + foreach ($args as $class) { + if (isset($this->_fixtureClassMap[$class])) { + $fixture = $this->_fixtures[$this->_fixtureClassMap[$class]]; + + $fixture->truncate($this->db); + $fixture->insert($this->db); + } else { + trigger_error(sprintf(__('Referenced fixture class %s not found', true), $class), E_USER_WARNING); + } + } + } + +/** + * Takes an array $expected and generates a regex from it to match the provided $string. + * Samples for $expected: + * + * Checks for an input tag with a name attribute (contains any non-empty value) and an id + * attribute that contains 'my-input': + * array('input' => array('name', 'id' => 'my-input')) + * + * Checks for two p elements with some text in them: + * array( + * array('p' => true), + * 'textA', + * '/p', + * array('p' => true), + * 'textB', + * '/p' + * ) + * + * You can also specify a pattern expression as part of the attribute values, or the tag + * being defined, if you prepend the value with preg: and enclose it with slashes, like so: + * array( + * array('input' => array('name', 'id' => 'preg:/FieldName\d+/')), + * 'preg:/My\s+field/' + * ) + * + * Important: This function is very forgiving about whitespace and also accepts any + * permutation of attribute order. It will also allow whitespaces between specified tags. + * + * @param string $string An HTML/XHTML/XML string + * @param array $expected An array, see above + * @param string $message SimpleTest failure output string + * @return boolean + * @access public + */ + function assertTags($string, $expected, $fullDebug = false) { + $regex = array(); + $normalized = array(); + foreach ((array) $expected as $key => $val) { + if (!is_numeric($key)) { + $normalized[] = array($key => $val); + } else { + $normalized[] = $val; + } + } + $i = 0; + foreach ($normalized as $tags) { + if (!is_array($tags)) { + $tags = (string)$tags; + } + $i++; + if (is_string($tags) && $tags{0} == '<') { + $tags = array(substr($tags, 1) => array()); + } elseif (is_string($tags)) { + $tagsTrimmed = preg_replace('/\s+/m', '', $tags); + + if (preg_match('/^\*?\//', $tags, $match) && $tagsTrimmed !== '//') { + $prefix = array(null, null); + + if ($match[0] == '*/') { + $prefix = array('Anything, ', '.*?'); + } + $regex[] = array( + sprintf('%sClose %s tag', $prefix[0], substr($tags, strlen($match[0]))), + sprintf('%s<[\s]*\/[\s]*%s[\s]*>[\n\r]*', $prefix[1], substr($tags, strlen($match[0]))), + $i, + ); + continue; + } + if (!empty($tags) && preg_match('/^preg\:\/(.+)\/$/i', $tags, $matches)) { + $tags = $matches[1]; + $type = 'Regex matches'; + } else { + $tags = preg_quote($tags, '/'); + $type = 'Text equals'; + } + $regex[] = array( + sprintf('%s "%s"', $type, $tags), + $tags, + $i, + ); + continue; + } + foreach ($tags as $tag => $attributes) { + $regex[] = array( + sprintf('Open %s tag', $tag), + sprintf('[\s]*<%s', preg_quote($tag, '/')), + $i, + ); + if ($attributes === true) { + $attributes = array(); + } + $attrs = array(); + $explanations = array(); + $i = 1; + foreach ($attributes as $attr => $val) { + if (is_numeric($attr) && preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) { + $attrs[] = $matches[1]; + $explanations[] = sprintf('Regex "%s" matches', $matches[1]); + continue; + } else { + $quotes = '["\']'; + if (is_numeric($attr)) { + $attr = $val; + $val = '.+?'; + $explanations[] = sprintf('Attribute "%s" present', $attr); + } elseif (!empty($val) && preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) { + $quotes = '["\']?'; + $val = $matches[1]; + $explanations[] = sprintf('Attribute "%s" matches "%s"', $attr, $val); + } else { + $explanations[] = sprintf('Attribute "%s" == "%s"', $attr, $val); + $val = preg_quote($val, '/'); + } + $attrs[] = '[\s]+' . preg_quote($attr, '/') . '=' . $quotes . $val . $quotes; + } + $i++; + } + if ($attrs) { + $permutations = $this->__array_permute($attrs); + + $permutationTokens = array(); + foreach ($permutations as $permutation) { + $permutationTokens[] = implode('', $permutation); + } + $regex[] = array( + sprintf('%s', implode(', ', $explanations)), + $permutationTokens, + $i, + ); + } + $regex[] = array( + sprintf('End %s tag', $tag), + '[\s]*\/?[\s]*>[\n\r]*', + $i, + ); + } + } + foreach ($regex as $i => $assertation) { + list($description, $expressions, $itemNum) = $assertation; + $matches = false; + foreach ((array)$expressions as $expression) { + if (preg_match(sprintf('/^%s/s', $expression), $string, $match)) { + $matches = true; + $string = substr($string, strlen($match[0])); + break; + } + } + if (!$matches) { + $this->assert(new TrueExpectation(), false, sprintf('Item #%d / regex #%d failed: %s', $itemNum, $i, $description)); + if ($fullDebug) { + debug($string, true); + debug($regex, true); + } + return false; + } + } + return $this->assert(new TrueExpectation(), true, '%s'); + } + +/** + * Initialize DB connection. + * + * @return void + * @access protected + */ + function _initDb() { + $testDbAvailable = in_array('test', array_keys(ConnectionManager::enumConnectionObjects())); + + $_prefix = null; + + if ($testDbAvailable) { + // Try for test DB + restore_error_handler(); + @$db =& ConnectionManager::getDataSource('test'); + set_error_handler('simpleTestErrorHandler'); + $testDbAvailable = $db->isConnected(); + } + + // Try for default DB + if (!$testDbAvailable) { + $db =& ConnectionManager::getDataSource('default'); + $_prefix = $db->config['prefix']; + $db->config['prefix'] = 'test_suite_'; + } + + ConnectionManager::create('test_suite', $db->config); + $db->config['prefix'] = $_prefix; + + // Get db connection + $this->db =& ConnectionManager::getDataSource('test_suite'); + $this->db->cacheSources = false; + + ClassRegistry::config(array('ds' => 'test_suite')); + } + +/** + * Load fixtures specified in var $fixtures. + * + * @return void + * @access protected + */ + function _loadFixtures() { + if (!isset($this->fixtures) || empty($this->fixtures)) { + return; + } + + if (!is_array($this->fixtures)) { + $this->fixtures = array_map('trim', explode(',', $this->fixtures)); + } + + $this->_fixtures = array(); + + foreach ($this->fixtures as $index => $fixture) { + $fixtureFile = null; + + if (strpos($fixture, 'core.') === 0) { + $fixture = substr($fixture, strlen('core.')); + foreach (App::core('cake') as $key => $path) { + $fixturePaths[] = $path . 'tests' . DS . 'fixtures'; + } + } elseif (strpos($fixture, 'app.') === 0) { + $fixture = substr($fixture, strlen('app.')); + $fixturePaths = array( + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures' + ); + } elseif (strpos($fixture, 'plugin.') === 0) { + $parts = explode('.', $fixture, 3); + $pluginName = $parts[1]; + $fixture = $parts[2]; + $fixturePaths = array( + App::pluginPath($pluginName) . 'tests' . DS . 'fixtures', + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures' + ); + } else { + $fixturePaths = array( + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures', + TEST_CAKE_CORE_INCLUDE_PATH . DS . 'cake' . DS . 'tests' . DS . 'fixtures' + ); + } + + foreach ($fixturePaths as $path) { + if (is_readable($path . DS . $fixture . '_fixture.php')) { + $fixtureFile = $path . DS . $fixture . '_fixture.php'; + break; + } + } + + if (isset($fixtureFile)) { + require_once($fixtureFile); + $fixtureClass = Inflector::camelize($fixture) . 'Fixture'; + $this->_fixtures[$this->fixtures[$index]] =& new $fixtureClass($this->db); + $this->_fixtureClassMap[Inflector::camelize($fixture)] = $this->fixtures[$index]; + } + } + + if (empty($this->_fixtures)) { + unset($this->_fixtures); + } + } + +/** + * Generates all permutation of an array $items and returns them in a new array. + * + * @param array $items An array of items + * @return array + * @access private + */ + function __array_permute($items, $perms = array()) { + static $permuted; + if (empty($perms)) { + $permuted = array(); + } + + if (empty($items)) { + $permuted[] = $perms; + } else { + $numItems = count($items) - 1; + for ($i = $numItems; $i >= 0; --$i) { + $newItems = $items; + $newPerms = $perms; + list($tmp) = array_splice($newItems, $i, 1); + array_unshift($newPerms, $tmp); + $this->__array_permute($newItems, $newPerms); + } + return $permuted; + } + } +} diff --git a/cake/tests/lib/.svn/text-base/cake_test_fixture.php.svn-base b/cake/tests/lib/.svn/text-base/cake_test_fixture.php.svn-base new file mode 100644 index 0000000..6c434bf --- /dev/null +++ b/cake/tests/lib/.svn/text-base/cake_test_fixture.php.svn-base @@ -0,0 +1,195 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestFixture extends Object { + +/** + * Name of the object + * + * @var string + */ + var $name = null; + +/** + * Cake's DBO driver (e.g: DboMysql). + * + * @access public + */ + var $db = null; + +/** + * Full Table Name + * + * @access public + */ + var $table = null; + +/** + * Instantiate the fixture. + * + * @access public + */ + function __construct() { + App::import('Model', 'CakeSchema'); + $this->Schema = new CakeSchema(array('name' => 'TestSuite', 'connection' => 'test_suite')); + + $this->init(); + } + +/** + * Initialize the fixture. + * + * @param object Cake's DBO driver (e.g: DboMysql). + * @access public + * + */ + function init() { + if (isset($this->import) && (is_string($this->import) || is_array($this->import))) { + $import = array_merge( + array('connection' => 'default', 'records' => false), + is_array($this->import) ? $this->import : array('model' => $this->import) + ); + + if (isset($import['model']) && App::import('Model', $import['model'])) { + ClassRegistry::config(array('ds' => $import['connection'])); + $model =& ClassRegistry::init($import['model']); + $db =& ConnectionManager::getDataSource($model->useDbConfig); + $db->cacheSources = false; + $this->fields = $model->schema(true); + $this->fields[$model->primaryKey]['key'] = 'primary'; + $this->table = $db->fullTableName($model, false); + ClassRegistry::config(array('ds' => 'test_suite')); + ClassRegistry::flush(); + } elseif (isset($import['table'])) { + $model =& new Model(null, $import['table'], $import['connection']); + $db =& ConnectionManager::getDataSource($import['connection']); + $db->cacheSources = false; + $model->useDbConfig = $import['connection']; + $model->name = Inflector::camelize(Inflector::singularize($import['table'])); + $model->table = $import['table']; + $model->tablePrefix = $db->config['prefix']; + $this->fields = $model->schema(true); + } + + if (isset($import['records']) && $import['records'] !== false && isset($model) && isset($db)) { + $this->records = array(); + $query = array( + 'fields' => $db->fields($model, null, array_keys($this->fields)), + 'table' => $db->fullTableName($model), + 'alias' => $model->alias, + 'conditions' => array(), + 'order' => null, + 'limit' => null, + 'group' => null + ); + $records = $db->fetchAll($db->buildStatement($query, $model), false, $model->alias); + + if ($records !== false && !empty($records)) { + $this->records = Set::extract($records, '{n}.' . $model->alias); + } + } + } + + if (!isset($this->table)) { + $this->table = Inflector::underscore(Inflector::pluralize($this->name)); + } + + if (!isset($this->primaryKey) && isset($this->fields['id'])) { + $this->primaryKey = 'id'; + } + } + +/** + * Run before all tests execute, should return SQL statement to create table for this fixture could be executed successfully. + * + * @param object $db An instance of the database object used to create the fixture table + * @return boolean True on success, false on failure + * @access public + */ + function create(&$db) { + if (!isset($this->fields) || empty($this->fields)) { + return false; + } + + $this->Schema->_build(array($this->table => $this->fields)); + return ( + $db->execute($db->createSchema($this->Schema), array('log' => false)) !== false + ); + } + +/** + * Run after all tests executed, should return SQL statement to drop table for this fixture. + * + * @param object $db An instance of the database object used to create the fixture table + * @return boolean True on success, false on failure + * @access public + */ + function drop(&$db) { + $this->Schema->_build(array($this->table => $this->fields)); + return ( + $db->execute($db->dropSchema($this->Schema), array('log' => false)) !== false + ); + } + +/** + * Run before each tests is executed, should return a set of SQL statements to insert records for the table + * of this fixture could be executed successfully. + * + * @param object $db An instance of the database into which the records will be inserted + * @return boolean on success or if there are no records to insert, or false on failure + * @access public + */ + function insert(&$db) { + if (!isset($this->_insert)) { + $values = array(); + + if (isset($this->records) && !empty($this->records)) { + foreach ($this->records as $record) { + $fields = array_keys($record); + $values[] = '(' . implode(', ', array_map(array(&$db, 'value'), array_values($record))) . ')'; + } + return $db->insertMulti($this->table, $fields, $values); + } + return true; + } + } + +/** + * Truncates the current fixture. Can be overwritten by classes extending CakeFixture to trigger other events before / after + * truncate. + * + * @param object $db A reference to a db instance + * @return boolean + * @access public + */ + function truncate(&$db) { + $fullDebug = $db->fullDebug; + $db->fullDebug = false; + $return = $db->truncate($this->table); + $db->fullDebug = $fullDebug; + return $return; + } +} diff --git a/cake/tests/lib/.svn/text-base/cake_test_model.php.svn-base b/cake/tests/lib/.svn/text-base/cake_test_model.php.svn-base new file mode 100644 index 0000000..759e739 --- /dev/null +++ b/cake/tests/lib/.svn/text-base/cake_test_model.php.svn-base @@ -0,0 +1,31 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +require_once LIBS.'model'.DS.'model.php'; + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestModel extends Model { + var $useDbConfig = 'test_suite'; + var $cacheSources = false; +} diff --git a/cake/tests/lib/.svn/text-base/cake_test_suite_dispatcher.php.svn-base b/cake/tests/lib/.svn/text-base/cake_test_suite_dispatcher.php.svn-base new file mode 100644 index 0000000..0723285 --- /dev/null +++ b/cake/tests/lib/.svn/text-base/cake_test_suite_dispatcher.php.svn-base @@ -0,0 +1,249 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +require_once CAKE_TESTS_LIB . 'test_manager.php'; + +/** + * CakeTestSuiteDispatcher handles web requests to the test suite and runs the correct action. + * + * @package cake.tests.libs + */ +class CakeTestSuiteDispatcher { +/** + * 'Request' parameters + * + * @var array + */ + var $params = array( + 'codeCoverage' => false, + 'group' => null, + 'case' => null, + 'app' => false, + 'plugin' => null, + 'output' => 'html', + 'show' => 'groups', + 'show_passes' => false + ); + +/** + * The classname for the TestManager being used + * + * @var string + */ + var $_managerClass = 'TestManager'; + +/** + * The Instance of the Manager being used. + * + * @var TestManager subclass + */ + var $Manager; + +/** + * Baseurl for the request + * + * @var string + */ + var $_baseUrl; + +/** + * Base dir of the request. Used for accessing assets. + * + * @var string + */ + var $_baseDir; + +/** + * constructor + * + * @return void + */ + function CakeTestSuiteDispatcher() { + $this->_baseUrl = $_SERVER['PHP_SELF']; + $dir = rtrim(dirname($this->_baseUrl), '\\'); + $this->_baseDir = ($dir === '/') ? $dir : $dir . '/'; + } + +/** + * Runs the actions required by the URL parameters. + * + * @return void + */ + function dispatch() { + $this->_checkSimpleTest(); + $this->_parseParams(); + + if ($this->params['group']) { + $this->_runGroupTest(); + } elseif ($this->params['case']) { + $this->_runTestCase(); + } elseif (isset($_GET['show']) && $_GET['show'] == 'cases') { + $this->_testCaseList(); + } else { + $this->_groupTestList(); + } + + $output = ob_get_clean(); + echo $output; + } + +/** + * Checks that simpleTest is installed. Will exit if it doesn't + * + * @return void + */ + function _checkSimpleTest() { + if (!App::import('Vendor', 'simpletest' . DS . 'reporter')) { + $baseDir = $this->_baseDir; + include CAKE_TESTS_LIB . 'templates' . DS . 'simpletest.php'; + exit(); + } + } + +/** + * Checks for the xdebug extension required to do code coverage. Displays an error + * if xdebug isn't installed. + * + * @return void + */ + function _checkXdebug() { + if (!extension_loaded('xdebug')) { + $baseDir = $this->_baseDir; + include CAKE_TESTS_LIB . 'templates' . DS . 'xdebug.php'; + exit(); + } + } + +/** + * Generates a page containing the a list of test cases that could be run. + * + * @return void + */ + function _testCaseList() { + $Reporter =& $this->getReporter(); + $Reporter->paintDocumentStart(); + $Reporter->paintTestMenu(); + $Reporter->testCaseList(); + $Reporter->paintDocumentEnd(); + } + +/** + * Generates a page containing a list of group tests that could be run. + * + * @return void + */ + function _groupTestList() { + $Reporter =& $this->getReporter(); + $Reporter->paintDocumentStart(); + $Reporter->paintTestMenu(); + $Reporter->groupTestList(); + $Reporter->paintDocumentEnd(); + } + +/** + * Sets the Manager to use for the request. + * + * @return string The manager class name + * @static + */ + function &getManager() { + if (empty($this->Manager)) { + $this->Manager = new $this->_managerClass(); + } + return $this->Manager; + } + +/** + * Gets the reporter based on the request parameters + * + * @return void + * @static + */ + function &getReporter() { + static $Reporter = NULL; + if (!$Reporter) { + $type = strtolower($this->params['output']); + $coreClass = 'Cake' . ucwords($this->params['output']) . 'Reporter'; + $coreFile = CAKE_TESTS_LIB . 'reporter' . DS . 'cake_' . $type . '_reporter.php'; + + $appClass = $this->params['output'] . 'Reporter'; + $appFile = APPLIBS . 'test_suite' . DS . 'reporter' . DS . $type . '_reporter.php'; + if (include_once $coreFile) { + $Reporter =& new $coreClass(null, $this->params); + } elseif (include_once $appFile) { + $Reporter =& new $appClass(null, $this->params); + } + } + return $Reporter; + } + +/** + * Parse url params into a 'request' + * + * @return void + */ + function _parseParams() { + if (!isset($_SERVER['SERVER_NAME'])) { + $_SERVER['SERVER_NAME'] = ''; + } + foreach ($this->params as $key => $value) { + if (isset($_GET[$key])) { + $this->params[$key] = $_GET[$key]; + } + } + if (isset($_GET['code_coverage'])) { + $this->params['codeCoverage'] = true; + require_once CAKE_TESTS_LIB . 'code_coverage_manager.php'; + $this->_checkXdebug(); + } + $this->params['baseUrl'] = $this->_baseUrl; + $this->params['baseDir'] = $this->_baseDir; + $this->getManager(); + } + +/** + * Runs the group test case. + * + * @return void + */ + function _runGroupTest() { + $Reporter =& CakeTestSuiteDispatcher::getReporter(); + if ($this->params['codeCoverage']) { + CodeCoverageManager::init($this->params['group'], $Reporter); + } + if ('all' == $this->params['group']) { + $this->Manager->runAllTests($Reporter); + } else { + $this->Manager->runGroupTest(ucfirst($this->params['group']), $Reporter); + } + } + +/** + * Runs a test case file. + * + * @return void + */ + function _runTestCase() { + $Reporter =& CakeTestSuiteDispatcher::getReporter(); + if ($this->params['codeCoverage']) { + CodeCoverageManager::init($this->params['case'], $Reporter); + } + $this->Manager->runTestCase($this->params['case'], $Reporter); + } +} diff --git a/cake/tests/lib/.svn/text-base/cake_web_test_case.php.svn-base b/cake/tests/lib/.svn/text-base/cake_web_test_case.php.svn-base new file mode 100644 index 0000000..34ac3b6 --- /dev/null +++ b/cake/tests/lib/.svn/text-base/cake_web_test_case.php.svn-base @@ -0,0 +1,33 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * Ignore base class. + */ + SimpleTest::ignore('CakeWebTestCase'); + +/** + * Simple wrapper for the WebTestCase provided by SimpleTest + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeWebTestCase extends WebTestCase { +} diff --git a/cake/tests/lib/.svn/text-base/code_coverage_manager.php.svn-base b/cake/tests/lib/.svn/text-base/code_coverage_manager.php.svn-base new file mode 100644 index 0000000..22dce2d --- /dev/null +++ b/cake/tests/lib/.svn/text-base/code_coverage_manager.php.svn-base @@ -0,0 +1,804 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +App::import('Core', 'Folder'); + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CodeCoverageManager { + +/** + * Is this an app test case? + * + * @var string + */ + var $appTest = false; + +/** + * Is this an app test case? + * + * @var string + */ + var $pluginTest = false; + +/** + * Is this a grouptest? + * + * @var string + * @access public + */ + var $groupTest = false; + +/** + * The test case file to analyze + * + * @var string + */ + var $testCaseFile = ''; + +/** + * The currently used CakeTestReporter + * + * @var string + */ + var $reporter = ''; + +/** + * undocumented variable + * + * @var string + */ + var $numDiffContextLines = 7; + +/** + * Returns a singleton instance + * + * @return object + * @access public + */ + function &getInstance() { + static $instance = array(); + if (!$instance) { + $instance[0] =& new CodeCoverageManager(); + } + return $instance[0]; + } + +/** + * Initializes a new Coverage Analyzation for a given test case file + * + * @param string $testCaseFile The test case file being covered. + * @param object $reporter Instance of the reporter running. + * @return void + * @static + */ + function init($testCaseFile, &$reporter) { + $manager =& CodeCoverageManager::getInstance(); + $manager->reporter =& $reporter; + $testCaseFile = str_replace(DS . DS, DS, $testCaseFile); + $thisFile = str_replace('.php', '.test.php', basename(__FILE__)); + + if (strpos($testCaseFile, $thisFile) !== false) { + trigger_error(__('Xdebug supports no parallel coverage analysis - so this is not possible.', true), E_USER_ERROR); + } + $manager->setParams($reporter); + $manager->testCaseFile = $testCaseFile; + } + +/** + * Start/resume Code coverage collection. + * + * @return void + * @static + */ + function start() { + xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); + } + +/** + * Stops/pauses code coverage collection. Does not clean the + * code coverage memory. Use clean() to clear code coverage memory + * + * @return void + * @static + */ + function stop() { + xdebug_stop_code_coverage(false); + } + +/** + * Clears the existing code coverage information. Also stops any + * running collection. + * + * @return void + * @static + */ + function clear() { + xdebug_stop_code_coverage(); + } + +/** + * Set the parameters from a reporter to the CodeCoverageManager + * + * @return void + */ + function setParams(&$reporter) { + if ($reporter->params['app']) { + $this->appTest = true; + } + + if ($reporter->params['group']) { + $this->groupTest = true; + } + + if ($reporter->params['plugin']) { + $this->pluginTest = Inflector::underscore($reporter->params['plugin']); + } + } + +/** + * Stops the current code coverage analyzation and dumps a nice report + * depending on the reporter that was passed to start() + * + * @return void + * @static + */ + function report($output = true) { + $manager =& CodeCoverageManager::getInstance(); + + CodeCoverageManager::stop(); + CodeCoverageManager::clear(); + + list($coverageData, $testObjectFile) = $manager->_getCoverageData(); + + if (empty($coverageData) && $output) { + echo "The test object file is never loaded.\n"; + } + + if (!$manager->groupTest) { + $execCodeLines = $manager->__getExecutableLines(file_get_contents($testObjectFile)); + $result = ''; + + switch (get_class($manager->reporter)) { + case 'CakeHtmlReporter': + $result = $manager->reportCaseHtmlDiff(@file($testObjectFile), $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + case 'CakeCliReporter': + default: + $result = $manager->reportCaseCli(@file($testObjectFile), $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + } + } else { + $execCodeLines = $manager->__getExecutableLines($testObjectFile); + $result = ''; + + switch (get_class($manager->reporter)) { + case 'CakeHtmlReporter': + $result = $manager->reportGroupHtml($testObjectFile, $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + case 'CakeCliReporter': + default: + $result = $manager->reportGroupCli($testObjectFile, $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + } + } + + if ($output) { + echo $result; + } + } + +/** + * Gets the coverage data for the test case or group test that is being run. + * + * @return void + */ + function _getCoverageData() { + $coverageData = array(); + $dump = xdebug_get_code_coverage(); + + if ($this->groupTest) { + $testObjectFile = $this->__testObjectFilesFromGroupFile($this->testCaseFile, $this->appTest); + foreach ($testObjectFile as $file) { + if (!file_exists($file)) { + trigger_error(sprintf(__('This test object file is invalid: %s', true), $file)); + return ; + } + } + foreach ($testObjectFile as $file) { + if (isset($dump[$file])) { + $coverageData[$file] = $dump[$file]; + } + } + } else { + $testObjectFile = $this->__testObjectFileFromCaseFile($this->testCaseFile, $this->appTest); + + if (!file_exists($testObjectFile)) { + trigger_error(sprintf(__('This test object file is invalid: %s', true), $testObjectFile)); + return ; + } + + if (isset($dump[$testObjectFile])) { + $coverageData = $dump[$testObjectFile]; + } + } + return array($coverageData, $testObjectFile); + } + +/** + * Diff reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportCaseHtmlDiff($testObjectFile, $coverageData, $execCodeLines, $numContextLines) { + $manager = CodeCoverageManager::getInstance(); + $total = count($testObjectFile); + $lines = array(); + + for ($i = 1; $i < $total + 1; $i++) { + $foundByManualFinder = isset($execCodeLines[$i]) && trim($execCodeLines[$i]) != ''; + $foundByXdebug = isset($coverageData[$i]); + + if (!$foundByManualFinder || !$foundByXdebug || $coverageData[$i] === -2) { + if (isset($lines[$i])) { + $lines[$i] = 'ignored ' . $lines[$i]; + } else { + $lines[$i] = 'ignored'; + } + continue; + } + + if ($coverageData[$i] !== -1) { + if (isset($lines[$i])) { + $lines[$i] = 'covered ' . $lines[$i]; + } else { + $lines[$i] = 'covered'; + } + continue; + } + $lines[$i] = 'uncovered show'; + $foundEndBlockInContextSearch = false; + + for ($j = 1; $j <= $numContextLines; $j++) { + $key = $i - $j; + + if ($key > 0 && isset($lines[$key])) { + if (strpos($lines[$key], 'end') !== false) { + $foundEndBlockInContextSearch = true; + if ($j < $numContextLines) { + $lines[$key] = str_replace('end', '', $lines[$key-1]); + } + } + + if (strpos($lines[$key], 'uncovered') === false) { + if (strpos($lines[$key], 'covered') !== false) { + $lines[$key] .= ' show'; + } else { + $lines[$key] = 'ignored show'; + } + } + + if ($j == $numContextLines) { + $lineBeforeIsEndBlock = strpos($lines[$key-1], 'end') !== false; + $lineBeforeIsShown = strpos($lines[$key-1], 'show') !== false; + $lineBeforeIsUncovered = strpos($lines[$key-1], 'uncovered') !== false; + + if (!$foundEndBlockInContextSearch && !$lineBeforeIsUncovered && ($lineBeforeIsEndBlock)) { + $lines[$key-1] = str_replace('end', '', $lines[$key-1]); + } + + if (!$lineBeforeIsShown && !$lineBeforeIsUncovered) { + $lines[$key] .= ' start'; + } + } + } + $key = $i + $j; + + if ($key < $total) { + $lines[$key] = 'show'; + + if ($j == $numContextLines) { + $lines[$key] .= ' end'; + } + } + } + } + + // find the last "uncovered" or "show"n line and "end" its block + $lastShownLine = $manager->__array_strpos($lines, 'show', true); + if (isset($lines[$lastShownLine])) { + $lines[$lastShownLine] .= ' end'; + } + + // give the first start line another class so we can control the top padding of the entire results + $firstShownLine = $manager->__array_strpos($lines, 'show'); + if (isset($lines[$firstShownLine])) { + $lines[$firstShownLine] .= ' realstart'; + } + + // get the output + $lineCount = $coveredCount = 0; + $report = ''; + foreach ($testObjectFile as $num => $line) { + // start line count at 1 + $num++; + $class = $lines[$num]; + + if (strpos($class, 'ignored') === false) { + $lineCount++; + + if (strpos($class, 'covered') !== false && strpos($class, 'uncovered') === false) { + $coveredCount++; + } + } + + if (strpos($class, 'show') !== false) { + $report .= $manager->__paintCodeline($class, $num, $line); + } + } + return $manager->__paintHeader($lineCount, $coveredCount, $report); + } + +/** + * CLI reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportCaseCli($testObjectFile, $coverageData, $execCodeLines) { + $manager = CodeCoverageManager::getInstance(); + $lineCount = $coveredCount = 0; + $report = ''; + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$num]) && trim($execCodeLines[$num]) != ''; + $foundByXdebug = isset($coverageData[$num]) && $coverageData[$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $lineCount++; + + if ($coverageData[$num] > 0) { + $coveredCount++; + } + } + } + return $manager->__paintHeaderCli($lineCount, $coveredCount, $report); + } + +/** + * Diff reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportGroupHtml($testObjectFiles, $coverageData, $execCodeLines, $numContextLines) { + $manager = CodeCoverageManager::getInstance(); + $report = ''; + + foreach ($testObjectFiles as $testObjectFile) { + $lineCount = $coveredCount = 0; + $objFilename = $testObjectFile; + $testObjectFile = file($testObjectFile); + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$objFilename][$num]) && trim($execCodeLines[$objFilename][$num]) != ''; + $foundByXdebug = isset($coverageData[$objFilename][$num]) && $coverageData[$objFilename][$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $class = 'uncovered'; + $lineCount++; + + if ($coverageData[$objFilename][$num] > 0) { + $class = 'covered'; + $coveredCount++; + } + } else { + $class = 'ignored'; + } + } + $report .= $manager->__paintGroupResultLine($objFilename, $lineCount, $coveredCount); + } + return $manager->__paintGroupResultHeader($report); + } + +/** + * CLI reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportGroupCli($testObjectFiles, $coverageData, $execCodeLines) { + $manager = CodeCoverageManager::getInstance(); + $report = ''; + + foreach ($testObjectFiles as $testObjectFile) { + $lineCount = $coveredCount = 0; + $objFilename = $testObjectFile; + $testObjectFile = file($testObjectFile); + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$objFilename][$num]) && trim($execCodeLines[$objFilename][$num]) != ''; + $foundByXdebug = isset($coverageData[$objFilename][$num]) && $coverageData[$objFilename][$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $lineCount++; + + if ($coverageData[$objFilename][$num] > 0) { + $coveredCount++; + } + } + } + $report .= $manager->__paintGroupResultLineCli($objFilename, $lineCount, $coveredCount); + } + return $report; + } + +/** + * Returns the name of the test object file based on a given test case file name + * + * @param string $file + * @param string $isApp + * @return string name of the test object file + * @access private + */ + function __testObjectFileFromCaseFile($file, $isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $path = $manager->__getTestFilesPath($isApp); + $folderPrefixMap = array( + 'behaviors' => 'models', + 'components' => 'controllers', + 'helpers' => 'views' + ); + + foreach ($folderPrefixMap as $dir => $prefix) { + if (strpos($file, $dir) === 0) { + $path .= $prefix . DS; + break; + } + } + $testManager =& new TestManager(); + $testFile = str_replace(array('/', $testManager->_testExtension), array(DS, '.php'), $file); + + $folder =& new Folder(); + $folder->cd(ROOT . DS . CAKE_TESTS_LIB); + $contents = $folder->read(); + + if (in_array(basename($testFile), $contents[1])) { + $testFile = basename($testFile); + $path = ROOT . DS . CAKE_TESTS_LIB; + } + $path .= $testFile; + $realpath = realpath($path); + + if ($realpath) { + return $realpath; + } + return $path; + } + +/** + * Returns an array of names of the test object files based on a given test group file name + * + * @param array $files + * @param string $isApp + * @return array names of the test object files + * @access private + */ + function __testObjectFilesFromGroupFile($groupFile, $isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $testManager =& new TestManager(); + + $path = TESTS; + if (!$isApp) { + $path = ROOT . DS . 'cake' . DS . 'tests'; + } + if (!!$manager->pluginTest) { + $path = App::pluginPath($manager->pluginTest) . DS . 'tests'; + } + + $result = array(); + if ($groupFile == 'all') { + $files = array_keys($testManager->getTestCaseList()); + foreach ($files as $file) { + $file = str_replace(DS . 'tests' . DS . 'cases' . DS, DS, $file); + $file = str_replace('.test.php', '.php', $file); + $file = str_replace(DS . DS, DS, $file); + $result[] = $file; + } + } else { + $path .= DS . 'groups' . DS . $groupFile . $testManager->_groupExtension; + if (!file_exists($path)) { + trigger_error(__('This group file does not exist!', true)); + return array(); + } + + $result = array(); + $groupContent = file_get_contents($path); + $ds = '\s*\.\s*DS\s*\.\s*'; + $pluginTest = 'APP\.\'plugins\'' . $ds . '\'' . $manager->pluginTest . '\'' . $ds . '\'tests\'' . $ds . '\'cases\''; + $pluginTest .= '|App::pluginPath\(\'' . $manager->pluginTest . '\'\)' . $ds . '\'tests\'' . $ds . '\'cases\''; + $pattern = '/\s*TestManager::addTestFile\(\s*\$this,\s*(' . $pluginTest . '|APP_TEST_CASES|CORE_TEST_CASES)' . $ds . '(.*?)\)/i'; + preg_match_all($pattern, $groupContent, $matches); + + foreach ($matches[2] as $file) { + $patterns = array( + '/\s*\.\s*DS\s*\.\s*/', + '/\s*APP_TEST_CASES\s*/', + '/\s*CORE_TEST_CASES\s*/', + ); + + $replacements = array(DS, '', ''); + $file = preg_replace($patterns, $replacements, $file); + $file = str_replace("'", '', $file); + $result[] = $manager->__testObjectFileFromCaseFile($file, $isApp) . '.php'; + } + } + return $result; + } + +/** + * Parses a given code string into an array of lines and replaces some non-executable code lines with the needed + * amount of new lines in order for the code line numbers to stay in sync + * + * @param string $content + * @return array array of lines + * @access private + */ + function __getExecutableLines($content) { + if (is_array($content)) { + $manager =& CodeCoverageManager::getInstance(); + $result = array(); + foreach ($content as $file) { + $result[$file] = $manager->__getExecutableLines(file_get_contents($file)); + } + return $result; + } + $content = h($content); + // arrays are 0-indexed, but we want 1-indexed stuff now as we are talking code lines mind you (**) + $content = "\n" . $content; + // // strip unwanted lines + $content = preg_replace_callback("/(@codeCoverageIgnoreStart.*?@codeCoverageIgnoreEnd)/is", array('CodeCoverageManager', '__replaceWithNewlines'), $content); + // strip php | ?\> tag only lines + $content = preg_replace('/[ |\t]*[<\?php|\?>]+[ |\t]*/', '', $content); + + // strip lines that contain only braces and parenthesis + $content = preg_replace('/[ |\t]*[{|}|\(|\)]+[ |\t]*/', '', $content); + $result = explode("\n", $content); + // unset the zero line again to get the original line numbers, but starting at 1, see (**) + unset($result[0]); + return $result; + } + +/** + * Replaces a given arg with the number of newlines in it + * + * @return string the number of newlines in a given arg + * @access private + */ + function __replaceWithNewlines() { + $args = func_get_args(); + $numLineBreaks = count(explode("\n", $args[0][0])); + return str_pad('', $numLineBreaks - 1, "\n"); + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintHeader($lineCount, $coveredCount, $report) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + return $report = '

      Code Coverage: ' . $codeCoverage . '%

      +
      ' . $report . '
      '; + } + +/** + * Displays a notification concerning group test results + * + * @return void + * @access public + */ + function __paintGroupResultHeader($report) { + return '

      Please keep in mind that the coverage can vary a little bit depending on how much the different tests in the group interfere. If for example, TEST A calls a line from TEST OBJECT B, the coverage for TEST OBJECT B will be a little greater than if you were running the corresponding test case for TEST OBJECT B alone.

      ' . $report . '
      '; + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintGroupResultLine($file, $lineCount, $coveredCount) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'result-bad'; + + if ($codeCoverage > 50) { + $class = 'result-ok'; + } + if ($codeCoverage > 80) { + $class = 'result-good'; + } + return '

      Code Coverage for ' . $file . ': ' . $codeCoverage . '%

      '; + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintGroupResultLineCli($file, $lineCount, $coveredCount) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'bad'; + if ($codeCoverage > 50) { + $class = 'ok'; + } + if ($codeCoverage > 80) { + $class = 'good'; + } + return "\n" . 'Code Coverage for ' . $file . ': ' . $codeCoverage . '% (' . $class . ')' . "\n"; + } + +/** + * Paints the headline for code coverage analysis in the CLI + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintHeaderCli($lineCount, $coveredCount, $report) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'bad'; + if ($codeCoverage > 50) { + $class = 'ok'; + } + if ($codeCoverage > 80) { + $class = 'good'; + } + return $report = "Code Coverage: $codeCoverage% ($class)\n"; + } + +/** + * Paints a code line for html output + * + * @package default + * @access private + */ + function __paintCodeline($class, $num, $line) { + $line = h($line); + + if (trim($line) == '') { + $line = ' '; // Win IE fix + } + return '
      ' . $num . '' . $line . '
      '; + } + +/** + * Calculates the coverage percentage based on a line count and a covered line count + * + * @param string $lineCount + * @param string $coveredCount + * @return void + * @access private + */ + function __calcCoverage($lineCount, $coveredCount) { + if ($coveredCount > $lineCount) { + trigger_error(__('Sorry, you cannot have more covered lines than total lines!', true)); + } + return ($lineCount != 0) + ? round(100 * $coveredCount / $lineCount, 2) + : '0.00'; + } + +/** + * Gets us the base path to look for the test files + * + * @param string $isApp + * @return void + * @access public + */ + function __getTestFilesPath($isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $path = ROOT . DS; + + if ($isApp) { + $path .= APP_DIR . DS; + } elseif (!!$manager->pluginTest) { + $pluginPath = APP . 'plugins' . DS . $manager->pluginTest . DS; + + $pluginPaths = App::path('plugins'); + foreach ($pluginPaths as $tmpPath) { + $tmpPath = $tmpPath . $manager->pluginTest . DS; + if (file_exists($tmpPath)) { + $pluginPath = $tmpPath; + break; + } + } + + $path = $pluginPath; + } else { + $path = TEST_CAKE_CORE_INCLUDE_PATH; + } + + return $path; + } + +/** + * Finds the last element of an array that contains $needle in a strpos computation + * + * @param array $arr + * @param string $needle + * @return void + * @access private + */ + function __array_strpos($arr, $needle, $reverse = false) { + if (!is_array($arr) || empty($arr)) { + return false; + } + + if ($reverse) { + $arr = array_reverse($arr, true); + } + + foreach ($arr as $key => $val) { + if (strpos($val, $needle) !== false) { + return $key; + } + } + return false; + } +} diff --git a/cake/tests/lib/.svn/text-base/test_manager.php.svn-base b/cake/tests/lib/.svn/text-base/test_manager.php.svn-base new file mode 100644 index 0000000..3aff520 --- /dev/null +++ b/cake/tests/lib/.svn/text-base/test_manager.php.svn-base @@ -0,0 +1,421 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +define('CORE_TEST_CASES', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'cases'); +define('CORE_TEST_GROUPS', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'groups'); +define('APP_TEST_CASES', TESTS . 'cases'); +define('APP_TEST_GROUPS', TESTS . 'groups'); + +/** + * TestManager is the base class that handles loading and initiating the running + * of TestCase and TestSuite classes that the user has selected. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class TestManager { +/** + * Extension suffix for test case files. + * + * @var string + */ + var $_testExtension = '.test.php'; + +/** + * Extension suffix for group test case files. + * + * @var string + */ + var $_groupExtension = '.group.php'; + +/** + * Is this test an AppTest? + * + * @var boolean + */ + var $appTest = false; + +/** + * Is this test a plugin test? + * + * @var mixed boolean false or string name of the plugin being used. + */ + var $pluginTest = false; + +/** + * Constructor for the TestManager class + * + * @return void + * @access public + */ + function TestManager() { + $this->_installSimpleTest(); + if (isset($_GET['app'])) { + $this->appTest = true; + } + if (isset($_GET['plugin'])) { + $this->pluginTest = htmlentities($_GET['plugin']); + } + } + +/** + * Includes the required simpletest files in order for the testsuite to run + * + * @return void + * @access public + */ + function _installSimpleTest() { + App::import('Vendor', array( + 'simpletest' . DS . 'unit_tester', + 'simpletest' . DS . 'mock_objects', + 'simpletest' . DS . 'web_tester' + )); + require_once(CAKE_TESTS_LIB . 'cake_web_test_case.php'); + require_once(CAKE_TESTS_LIB . 'cake_test_case.php'); + } + +/** + * Runs all tests in the Application depending on the current appTest setting + * + * @param Object $reporter Reporter object for the tests being run. + * @param boolean $testing Are tests supposed to be auto run. Set to true to return testcase list. + * @return mixed + * @access public + */ + function runAllTests(&$reporter, $testing = false) { + $testCases =& $this->_getTestFileList($this->_getTestsPath()); + if ($this->appTest) { + $test =& new TestSuite(__('All App Tests', true)); + } else if ($this->pluginTest) { + $test =& new TestSuite(sprintf(__('All %s Plugin Tests', true), Inflector::humanize($this->pluginTest))); + } else { + $test =& new TestSuite(__('All Core Tests', true)); + } + + if ($testing) { + return $testCases; + } + + foreach ($testCases as $testCase) { + $test->addTestFile($testCase); + } + + return $test->run($reporter); + } + +/** + * Runs a specific test case file + * + * @param string $testCaseFile Filename of the test to be run. + * @param Object $reporter Reporter instance to attach to the test case. + * @param boolean $testing Set to true if testing, otherwise test case will be run. + * @return mixed Result of test case being run. + * @access public + */ + function runTestCase($testCaseFile, &$reporter, $testing = false) { + $testCaseFileWithPath = $this->_getTestsPath() . DS . $testCaseFile; + + if (!file_exists($testCaseFileWithPath) || strpos($testCaseFileWithPath, '..')) { + trigger_error( + sprintf(__("Test case %s cannot be found", true), htmlentities($testCaseFile)), + E_USER_ERROR + ); + return false; + } + + if ($testing) { + return true; + } + + $test =& new TestSuite(sprintf(__('Individual test case: %s', true), $testCaseFile)); + $test->addTestFile($testCaseFileWithPath); + return $test->run($reporter); + } + +/** + * Runs a specific group test file + * + * @param string $groupTestName GroupTest that you want to run. + * @param Object $reporter Reporter instance to use with the group test being run. + * @return mixed Results of group test being run. + * @access public + */ + function runGroupTest($groupTestName, &$reporter) { + $filePath = $this->_getTestsPath('groups') . DS . strtolower($groupTestName) . $this->_groupExtension; + + if (!file_exists($filePath) || strpos($filePath, '..')) { + trigger_error(sprintf( + __("Group test %s cannot be found at %s", true), + htmlentities($groupTestName), + htmlentities($filePath) + ), + E_USER_ERROR + ); + } + + require_once $filePath; + $test =& new TestSuite(sprintf(__('%s group test', true), $groupTestName)); + foreach ($this->_getGroupTestClassNames($filePath) as $groupTest) { + $testCase = new $groupTest(); + $test->addTestCase($testCase); + if (isset($testCase->label)) { + $test->_label = $testCase->label; + } + } + return $test->run($reporter); + } + +/** + * Adds all testcases in a given directory to a given GroupTest object + * + * @param object $groupTest Instance of TestSuite/GroupTest that files are to be added to. + * @param string $directory The directory to add tests from. + * @return void + * @access public + * @static + */ + function addTestCasesFromDirectory(&$groupTest, $directory = '.') { + $manager =& new TestManager(); + $testCases =& $manager->_getTestFileList($directory); + foreach ($testCases as $testCase) { + $groupTest->addTestFile($testCase); + } + } + +/** + * Adds a specific test file and thereby all of its test cases and group tests to a given group test file + * + * @param object $groupTest Instance of TestSuite/GroupTest that a file should be added to. + * @param string $file The file name, minus the suffix to add. + * @return void + * @access public + * @static + */ + function addTestFile(&$groupTest, $file) { + $manager =& new TestManager(); + + if (file_exists($file . $manager->_testExtension)) { + $file .= $manager->_testExtension; + } elseif (file_exists($file . $manager->_groupExtension)) { + $file .= $manager->_groupExtension; + } + $groupTest->addTestFile($file); + } + +/** + * Returns a list of test cases found in the current valid test case path + * + * @access public + * @static + */ + function &getTestCaseList() { + $manager =& new TestManager(); + $return = $manager->_getTestCaseList($manager->_getTestsPath()); + return $return; + } + +/** + * Builds the list of test cases from a given directory + * + * @param string $directory Directory to get test case list from. + * @access protected + */ + function &_getTestCaseList($directory = '.') { + $fileList =& $this->_getTestFileList($directory); + $testCases = array(); + foreach ($fileList as $testCaseFile) { + $testCases[$testCaseFile] = str_replace($directory . DS, '', $testCaseFile); + } + return $testCases; + } + +/** + * Returns a list of test files from a given directory + * + * @param string $directory Directory to get test case files from. + * @access protected + */ + function &_getTestFileList($directory = '.') { + $return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestCaseFile')); + return $return; + } + +/** + * Returns a list of group tests found in the current valid test case path + * + * @access public + * @static + */ + function &getGroupTestList() { + $manager =& new TestManager(); + $return = $manager->_getTestGroupList($manager->_getTestsPath('groups')); + return $return; + } + +/** + * Returns a list of group test files from a given directory + * + * @param string $directory The directory to get group test files from. + * @access protected + */ + function &_getTestGroupFileList($directory = '.') { + $return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestGroupFile')); + return $return; + } + +/** + * Returns a list of group test files from a given directory + * + * @param string $directory The directory to get group tests from. + * @access protected + */ + function &_getTestGroupList($directory = '.') { + $fileList =& $this->_getTestGroupFileList($directory); + $groupTests = array(); + + foreach ($fileList as $groupTestFile) { + $groupTests[$groupTestFile] = str_replace($this->_groupExtension, '', basename($groupTestFile)); + } + sort($groupTests); + return $groupTests; + } + +/** + * Returns a list of class names from a group test file + * + * @param string $groupTestFile The groupTest file to scan for TestSuite classnames. + * @access protected + */ + function &_getGroupTestClassNames($groupTestFile) { + $file = implode("\n", file($groupTestFile)); + preg_match("~lass\s+?(.*)\s+?extends TestSuite~", $file, $matches); + if (!empty($matches)) { + unset($matches[0]); + return $matches; + } + $matches = array(); + return $matches; + } + +/** + * Gets a recursive list of files from a given directory and matches then against + * a given fileTestFunction, like isTestCaseFile() + * + * @param string $directory The directory to scan for files. + * @param mixed $fileTestFunction + * @access protected + */ + function &_getRecursiveFileList($directory = '.', $fileTestFunction) { + $fileList = array(); + if (!is_dir($directory)) { + return $fileList; + } + + $files = glob($directory . DS . '*'); + $files = $files ? $files : array(); + + foreach ($files as $file) { + if (is_dir($file)) { + $fileList = array_merge($fileList, $this->_getRecursiveFileList($file, $fileTestFunction)); + } elseif ($fileTestFunction[0]->$fileTestFunction[1]($file)) { + $fileList[] = $file; + } + } + return $fileList; + } + +/** + * Tests if a file has the correct test case extension + * + * @param string $file + * @return boolean Whether $file is a test case. + * @access protected + */ + function _isTestCaseFile($file) { + return $this->_hasExpectedExtension($file, $this->_testExtension); + } + +/** + * Tests if a file has the correct group test extension + * + * @param string $file + * @return boolean Whether $file is a group + * @access protected + */ + function _isTestGroupFile($file) { + return $this->_hasExpectedExtension($file, $this->_groupExtension); + } + +/** + * Check if a file has a specific extension + * + * @param string $file + * @param string $extension + * @return void + * @access protected + */ + function _hasExpectedExtension($file, $extension) { + return $extension == strtolower(substr($file, (0 - strlen($extension)))); + } + +/** + * Returns the given path to the test files depending on a given type of tests (cases, group, ..) + * + * @param string $type either 'cases' or 'groups' + * @return string The path tests are located on + * @access protected + */ + function _getTestsPath($type = 'cases') { + if (!empty($this->appTest)) { + if ($type == 'cases') { + $result = APP_TEST_CASES; + } else if ($type == 'groups') { + $result = APP_TEST_GROUPS; + } + } else if (!empty($this->pluginTest)) { + $_pluginBasePath = APP . 'plugins' . DS . $this->pluginTest . DS . 'tests'; + $pluginPath = App::pluginPath($this->pluginTest); + if (file_exists($pluginPath . DS . 'tests')) { + $_pluginBasePath = $pluginPath . DS . 'tests'; + } + $result = $_pluginBasePath . DS . $type; + } else { + if ($type == 'cases') { + $result = CORE_TEST_CASES; + } else if ($type == 'groups') { + $result = CORE_TEST_GROUPS; + } + } + return $result; + } + +/** + * Get the extension for either 'group' or 'test' types. + * + * @param string $type Type of test to get, either 'test' or 'group' + * @return string Extension suffix for test. + * @access public + */ + function getExtension($type = 'test') { + if ($type == 'test' || $type == 'case') { + return $this->_testExtension; + } + return $this->_groupExtension; + } +} diff --git a/cake/tests/lib/cake_test_case.php b/cake/tests/lib/cake_test_case.php new file mode 100644 index 0000000..1d4b89e --- /dev/null +++ b/cake/tests/lib/cake_test_case.php @@ -0,0 +1,835 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +if (!class_exists('dispatcher')) { + require CAKE . 'dispatcher.php'; +} +require_once CAKE_TESTS_LIB . 'cake_test_model.php'; +require_once CAKE_TESTS_LIB . 'cake_test_fixture.php'; +App::import('Vendor', 'simpletest' . DS . 'unit_tester'); + +/** + * CakeTestDispatcher + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestDispatcher extends Dispatcher { + +/** + * controller property + * + * @var Controller + * @access public + */ + var $controller; + var $testCase; + +/** + * testCase method + * + * @param CakeTestCase $testCase + * @return void + * @access public + */ + function testCase(&$testCase) { + $this->testCase =& $testCase; + } + +/** + * invoke method + * + * @param Controller $controller + * @param array $params + * @param boolean $missingAction + * @return Controller + * @access protected + */ + function _invoke(&$controller, $params, $missingAction = false) { + $this->controller =& $controller; + + if (array_key_exists('layout', $params)) { + $this->controller->layout = $params['layout']; + } + + if (isset($this->testCase) && method_exists($this->testCase, 'startController')) { + $this->testCase->startController($this->controller, $params); + } + + $result = parent::_invoke($this->controller, $params, $missingAction); + + if (isset($this->testCase) && method_exists($this->testCase, 'endController')) { + $this->testCase->endController($this->controller, $params); + } + + return $result; + } +} + +/** + * CakeTestCase class + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestCase extends UnitTestCase { + +/** + * Methods used internally. + * + * @var array + * @access public + */ + var $methods = array('start', 'end', 'startcase', 'endcase', 'starttest', 'endtest'); + +/** + * By default, all fixtures attached to this class will be truncated and reloaded after each test. + * Set this to false to handle manually + * + * @var array + * @access public + */ + var $autoFixtures = true; + +/** + * Set this to false to avoid tables to be dropped if they already exist + * + * @var boolean + * @access public + */ + var $dropTables = true; + +/** + * Maps fixture class names to fixture identifiers as included in CakeTestCase::$fixtures + * + * @var array + * @access protected + */ + var $_fixtureClassMap = array(); + +/** + * truncated property + * + * @var boolean + * @access private + */ + var $__truncated = true; + +/** + * savedGetData property + * + * @var array + * @access private + */ + var $__savedGetData = array(); + +/** + * Called when a test case (group of methods) is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * @return void + * @access public + */ + function startCase() { + } + +/** + * Called when a test case (group of methods) has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * @return void + * @access public + */ + function endCase() { + } + +/** + * Called when a test case method is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * @return void + * @access public + */ + function startTest($method) { + } + +/** + * Called when a test case method has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * @return void + * @access public + */ + function endTest($method) { + } + +/** + * Overrides SimpleTestCase::assert to enable calling of skipIf() from within tests + * + * @param Expectation $expectation + * @param mixed $compare + * @param string $message + * @return boolean|null + * @access public + */ + function assert(&$expectation, $compare, $message = '%s') { + if ($this->_should_skip) { + return; + } + return parent::assert($expectation, $compare, $message); + } + +/** + * Overrides SimpleTestCase::skipIf to provide a boolean return value + * + * @param boolean $shouldSkip + * @param string $message + * @return boolean + * @access public + */ + function skipIf($shouldSkip, $message = '%s') { + parent::skipIf($shouldSkip, $message); + return $shouldSkip; + } + +/** + * Callback issued when a controller's action is about to be invoked through testAction(). + * + * @param Controller $controller Controller that's about to be invoked. + * @param array $params Additional parameters as sent by testAction(). + * @return void + * @access public + */ + function startController(&$controller, $params = array()) { + if (isset($params['fixturize']) && ((is_array($params['fixturize']) && !empty($params['fixturize'])) || $params['fixturize'] === true)) { + if (!isset($this->db)) { + $this->_initDb(); + } + + if ($controller->uses === false) { + $list = array($controller->modelClass); + } else { + $list = is_array($controller->uses) ? $controller->uses : array($controller->uses); + } + + $models = array(); + ClassRegistry::config(array('ds' => $params['connection'])); + + foreach ($list as $name) { + if ((is_array($params['fixturize']) && in_array($name, $params['fixturize'])) || $params['fixturize'] === true) { + if (class_exists($name) || App::import('Model', $name)) { + $object =& ClassRegistry::init($name); + //switch back to specified datasource. + $object->setDataSource($params['connection']); + $db =& ConnectionManager::getDataSource($object->useDbConfig); + $db->cacheSources = false; + + $models[$object->alias] = array( + 'table' => $object->table, + 'model' => $object->alias, + 'key' => strtolower($name), + ); + } + } + } + ClassRegistry::config(array('ds' => 'test_suite')); + + if (!empty($models) && isset($this->db)) { + $this->_actionFixtures = array(); + + foreach ($models as $model) { + $fixture =& new CakeTestFixture($this->db); + + $fixture->name = $model['model'] . 'Test'; + $fixture->table = $model['table']; + $fixture->import = array('model' => $model['model'], 'records' => true); + $fixture->init(); + + $fixture->create($this->db); + $fixture->insert($this->db); + $this->_actionFixtures[] =& $fixture; + } + + foreach ($models as $model) { + $object =& ClassRegistry::getObject($model['key']); + if ($object !== false) { + $object->setDataSource('test_suite'); + $object->cacheSources = false; + } + } + } + } + } + +/** + * Callback issued when a controller's action has been invoked through testAction(). + * + * @param Controller $controller Controller that has been invoked. + * @param array $params Additional parameters as sent by testAction(). + * @return void + * @access public + */ + function endController(&$controller, $params = array()) { + if (isset($this->db) && isset($this->_actionFixtures) && !empty($this->_actionFixtures) && $this->dropTables) { + foreach ($this->_actionFixtures as $fixture) { + $fixture->drop($this->db); + } + } + } + +/** + * Executes a Cake URL, and can get (depending on the $params['return'] value): + * + * Params: + * - 'return' has several possible values: + * 1. 'result': Whatever the action returns (and also specifies $this->params['requested'] for controller) + * 2. 'view': The rendered view, without the layout + * 3. 'contents': The rendered view, within the layout. + * 4. 'vars': the view vars + * + * - 'fixturize' - Set to true if you want to copy model data from 'connection' to the test_suite connection + * - 'data' - The data you want to insert into $this->data in the controller. + * - 'connection' - Which connection to use in conjunction with fixturize (defaults to 'default') + * - 'method' - What type of HTTP method to simulate (defaults to post) + * + * @param string $url Cake URL to execute (e.g: /articles/view/455) + * @param mixed $params Parameters (see above), or simply a string of what to return + * @return mixed Whatever is returned depending of requested result + * @access public + */ + function testAction($url, $params = array()) { + $default = array( + 'return' => 'result', + 'fixturize' => false, + 'data' => array(), + 'method' => 'post', + 'connection' => 'default' + ); + + if (is_string($params)) { + $params = array('return' => $params); + } + $params = array_merge($default, $params); + + $toSave = array( + 'case' => null, + 'group' => null, + 'app' => null, + 'output' => null, + 'show' => null, + 'plugin' => null + ); + $this->__savedGetData = (empty($this->__savedGetData)) + ? array_intersect_key($_GET, $toSave) + : $this->__savedGetData; + + $data = (!empty($params['data'])) ? $params['data'] : array(); + + if (strtolower($params['method']) == 'get') { + $_GET = array_merge($this->__savedGetData, $data); + $_POST = array(); + } else { + $_POST = array('data' => $data); + $_GET = $this->__savedGetData; + } + + $return = $params['return']; + $params = array_diff_key($params, array('data' => null, 'method' => null, 'return' => null)); + + $dispatcher =& new CakeTestDispatcher(); + $dispatcher->testCase($this); + + if ($return != 'result') { + if ($return != 'contents') { + $params['layout'] = false; + } + + ob_start(); + @$dispatcher->dispatch($url, $params); + $result = ob_get_clean(); + + if ($return == 'vars') { + $view =& ClassRegistry::getObject('view'); + $viewVars = $view->getVars(); + + $result = array(); + + foreach ($viewVars as $var) { + $result[$var] = $view->getVar($var); + } + + if (!empty($view->pageTitle)) { + $result = array_merge($result, array('title' => $view->pageTitle)); + } + } + } else { + $params['return'] = 1; + $params['bare'] = 1; + $params['requested'] = 1; + + $result = @$dispatcher->dispatch($url, $params); + } + + if (isset($this->_actionFixtures)) { + unset($this->_actionFixtures); + } + ClassRegistry::flush(); + + return $result; + } + +/** + * Announces the start of a test. + * + * @param string $method Test method just started. + * @return void + * @access public + */ + function before($method) { + parent::before($method); + + if (isset($this->fixtures) && (!is_array($this->fixtures) || empty($this->fixtures))) { + unset($this->fixtures); + } + + // Set up DB connection + if (isset($this->fixtures) && strtolower($method) == 'start') { + $this->_initDb(); + $this->_loadFixtures(); + } + + // Create records + if (isset($this->_fixtures) && isset($this->db) && !in_array(strtolower($method), array('start', 'end')) && $this->__truncated && $this->autoFixtures == true) { + foreach ($this->_fixtures as $fixture) { + $inserts = $fixture->insert($this->db); + } + } + + if (!in_array(strtolower($method), $this->methods)) { + $this->startTest($method); + } + } + +/** + * Runs as first test to create tables. + * + * @return void + * @access public + */ + function start() { + if (isset($this->_fixtures) && isset($this->db)) { + Configure::write('Cache.disable', true); + $cacheSources = $this->db->cacheSources; + $this->db->cacheSources = false; + $sources = $this->db->listSources(); + $this->db->cacheSources = $cacheSources; + + if (!$this->dropTables) { + return; + } + foreach ($this->_fixtures as $fixture) { + $table = $this->db->config['prefix'] . $fixture->table; + if (in_array($table, $sources)) { + $fixture->drop($this->db); + $fixture->create($this->db); + } elseif (!in_array($table, $sources)) { + $fixture->create($this->db); + } + } + } + } + +/** + * Runs as last test to drop tables. + * + * @return void + * @access public + */ + function end() { + if (isset($this->_fixtures) && isset($this->db)) { + if ($this->dropTables) { + foreach (array_reverse($this->_fixtures) as $fixture) { + $fixture->drop($this->db); + } + } + $this->db->sources(true); + Configure::write('Cache.disable', false); + } + + if (class_exists('ClassRegistry')) { + ClassRegistry::flush(); + } + } + +/** + * Announces the end of a test. + * + * @param string $method Test method just finished. + * @return void + * @access public + */ + function after($method) { + $isTestMethod = !in_array(strtolower($method), array('start', 'end')); + + if (isset($this->_fixtures) && isset($this->db) && $isTestMethod) { + foreach ($this->_fixtures as $fixture) { + $fixture->truncate($this->db); + } + $this->__truncated = true; + } else { + $this->__truncated = false; + } + + if (!in_array(strtolower($method), $this->methods)) { + $this->endTest($method); + } + $this->_should_skip = false; + + parent::after($method); + } + +/** + * Gets a list of test names. Normally that will be all internal methods that start with the + * name "test". This method should be overridden if you want a different rule. + * + * @return array List of test names. + * @access public + */ + function getTests() { + return array_merge( + array('start', 'startCase'), + array_diff(parent::getTests(), array('testAction', 'testaction')), + array('endCase', 'end') + ); + } + +/** + * Chooses which fixtures to load for a given test + * + * @param string $fixture Each parameter is a model name that corresponds to a + * fixture, i.e. 'Post', 'Author', etc. + * @return void + * @access public + * @see CakeTestCase::$autoFixtures + */ + function loadFixtures() { + $args = func_get_args(); + foreach ($args as $class) { + if (isset($this->_fixtureClassMap[$class])) { + $fixture = $this->_fixtures[$this->_fixtureClassMap[$class]]; + + $fixture->truncate($this->db); + $fixture->insert($this->db); + } else { + trigger_error(sprintf(__('Referenced fixture class %s not found', true), $class), E_USER_WARNING); + } + } + } + +/** + * Takes an array $expected and generates a regex from it to match the provided $string. + * Samples for $expected: + * + * Checks for an input tag with a name attribute (contains any non-empty value) and an id + * attribute that contains 'my-input': + * array('input' => array('name', 'id' => 'my-input')) + * + * Checks for two p elements with some text in them: + * array( + * array('p' => true), + * 'textA', + * '/p', + * array('p' => true), + * 'textB', + * '/p' + * ) + * + * You can also specify a pattern expression as part of the attribute values, or the tag + * being defined, if you prepend the value with preg: and enclose it with slashes, like so: + * array( + * array('input' => array('name', 'id' => 'preg:/FieldName\d+/')), + * 'preg:/My\s+field/' + * ) + * + * Important: This function is very forgiving about whitespace and also accepts any + * permutation of attribute order. It will also allow whitespaces between specified tags. + * + * @param string $string An HTML/XHTML/XML string + * @param array $expected An array, see above + * @param string $message SimpleTest failure output string + * @return boolean + * @access public + */ + function assertTags($string, $expected, $fullDebug = false) { + $regex = array(); + $normalized = array(); + foreach ((array) $expected as $key => $val) { + if (!is_numeric($key)) { + $normalized[] = array($key => $val); + } else { + $normalized[] = $val; + } + } + $i = 0; + foreach ($normalized as $tags) { + if (!is_array($tags)) { + $tags = (string)$tags; + } + $i++; + if (is_string($tags) && $tags{0} == '<') { + $tags = array(substr($tags, 1) => array()); + } elseif (is_string($tags)) { + $tagsTrimmed = preg_replace('/\s+/m', '', $tags); + + if (preg_match('/^\*?\//', $tags, $match) && $tagsTrimmed !== '//') { + $prefix = array(null, null); + + if ($match[0] == '*/') { + $prefix = array('Anything, ', '.*?'); + } + $regex[] = array( + sprintf('%sClose %s tag', $prefix[0], substr($tags, strlen($match[0]))), + sprintf('%s<[\s]*\/[\s]*%s[\s]*>[\n\r]*', $prefix[1], substr($tags, strlen($match[0]))), + $i, + ); + continue; + } + if (!empty($tags) && preg_match('/^preg\:\/(.+)\/$/i', $tags, $matches)) { + $tags = $matches[1]; + $type = 'Regex matches'; + } else { + $tags = preg_quote($tags, '/'); + $type = 'Text equals'; + } + $regex[] = array( + sprintf('%s "%s"', $type, $tags), + $tags, + $i, + ); + continue; + } + foreach ($tags as $tag => $attributes) { + $regex[] = array( + sprintf('Open %s tag', $tag), + sprintf('[\s]*<%s', preg_quote($tag, '/')), + $i, + ); + if ($attributes === true) { + $attributes = array(); + } + $attrs = array(); + $explanations = array(); + $i = 1; + foreach ($attributes as $attr => $val) { + if (is_numeric($attr) && preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) { + $attrs[] = $matches[1]; + $explanations[] = sprintf('Regex "%s" matches', $matches[1]); + continue; + } else { + $quotes = '["\']'; + if (is_numeric($attr)) { + $attr = $val; + $val = '.+?'; + $explanations[] = sprintf('Attribute "%s" present', $attr); + } elseif (!empty($val) && preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) { + $quotes = '["\']?'; + $val = $matches[1]; + $explanations[] = sprintf('Attribute "%s" matches "%s"', $attr, $val); + } else { + $explanations[] = sprintf('Attribute "%s" == "%s"', $attr, $val); + $val = preg_quote($val, '/'); + } + $attrs[] = '[\s]+' . preg_quote($attr, '/') . '=' . $quotes . $val . $quotes; + } + $i++; + } + if ($attrs) { + $permutations = $this->__array_permute($attrs); + + $permutationTokens = array(); + foreach ($permutations as $permutation) { + $permutationTokens[] = implode('', $permutation); + } + $regex[] = array( + sprintf('%s', implode(', ', $explanations)), + $permutationTokens, + $i, + ); + } + $regex[] = array( + sprintf('End %s tag', $tag), + '[\s]*\/?[\s]*>[\n\r]*', + $i, + ); + } + } + foreach ($regex as $i => $assertation) { + list($description, $expressions, $itemNum) = $assertation; + $matches = false; + foreach ((array)$expressions as $expression) { + if (preg_match(sprintf('/^%s/s', $expression), $string, $match)) { + $matches = true; + $string = substr($string, strlen($match[0])); + break; + } + } + if (!$matches) { + $this->assert(new TrueExpectation(), false, sprintf('Item #%d / regex #%d failed: %s', $itemNum, $i, $description)); + if ($fullDebug) { + debug($string, true); + debug($regex, true); + } + return false; + } + } + return $this->assert(new TrueExpectation(), true, '%s'); + } + +/** + * Initialize DB connection. + * + * @return void + * @access protected + */ + function _initDb() { + $testDbAvailable = in_array('test', array_keys(ConnectionManager::enumConnectionObjects())); + + $_prefix = null; + + if ($testDbAvailable) { + // Try for test DB + restore_error_handler(); + @$db =& ConnectionManager::getDataSource('test'); + set_error_handler('simpleTestErrorHandler'); + $testDbAvailable = $db->isConnected(); + } + + // Try for default DB + if (!$testDbAvailable) { + $db =& ConnectionManager::getDataSource('default'); + $_prefix = $db->config['prefix']; + $db->config['prefix'] = 'test_suite_'; + } + + ConnectionManager::create('test_suite', $db->config); + $db->config['prefix'] = $_prefix; + + // Get db connection + $this->db =& ConnectionManager::getDataSource('test_suite'); + $this->db->cacheSources = false; + + ClassRegistry::config(array('ds' => 'test_suite')); + } + +/** + * Load fixtures specified in var $fixtures. + * + * @return void + * @access protected + */ + function _loadFixtures() { + if (!isset($this->fixtures) || empty($this->fixtures)) { + return; + } + + if (!is_array($this->fixtures)) { + $this->fixtures = array_map('trim', explode(',', $this->fixtures)); + } + + $this->_fixtures = array(); + + foreach ($this->fixtures as $index => $fixture) { + $fixtureFile = null; + + if (strpos($fixture, 'core.') === 0) { + $fixture = substr($fixture, strlen('core.')); + foreach (App::core('cake') as $key => $path) { + $fixturePaths[] = $path . 'tests' . DS . 'fixtures'; + } + } elseif (strpos($fixture, 'app.') === 0) { + $fixture = substr($fixture, strlen('app.')); + $fixturePaths = array( + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures' + ); + } elseif (strpos($fixture, 'plugin.') === 0) { + $parts = explode('.', $fixture, 3); + $pluginName = $parts[1]; + $fixture = $parts[2]; + $fixturePaths = array( + App::pluginPath($pluginName) . 'tests' . DS . 'fixtures', + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures' + ); + } else { + $fixturePaths = array( + TESTS . 'fixtures', + VENDORS . 'tests' . DS . 'fixtures', + TEST_CAKE_CORE_INCLUDE_PATH . DS . 'cake' . DS . 'tests' . DS . 'fixtures' + ); + } + + foreach ($fixturePaths as $path) { + if (is_readable($path . DS . $fixture . '_fixture.php')) { + $fixtureFile = $path . DS . $fixture . '_fixture.php'; + break; + } + } + + if (isset($fixtureFile)) { + require_once($fixtureFile); + $fixtureClass = Inflector::camelize($fixture) . 'Fixture'; + $this->_fixtures[$this->fixtures[$index]] =& new $fixtureClass($this->db); + $this->_fixtureClassMap[Inflector::camelize($fixture)] = $this->fixtures[$index]; + } + } + + if (empty($this->_fixtures)) { + unset($this->_fixtures); + } + } + +/** + * Generates all permutation of an array $items and returns them in a new array. + * + * @param array $items An array of items + * @return array + * @access private + */ + function __array_permute($items, $perms = array()) { + static $permuted; + if (empty($perms)) { + $permuted = array(); + } + + if (empty($items)) { + $permuted[] = $perms; + } else { + $numItems = count($items) - 1; + for ($i = $numItems; $i >= 0; --$i) { + $newItems = $items; + $newPerms = $perms; + list($tmp) = array_splice($newItems, $i, 1); + array_unshift($newPerms, $tmp); + $this->__array_permute($newItems, $newPerms); + } + return $permuted; + } + } +} \ No newline at end of file diff --git a/cake/tests/lib/cake_test_fixture.php b/cake/tests/lib/cake_test_fixture.php new file mode 100644 index 0000000..91264d8 --- /dev/null +++ b/cake/tests/lib/cake_test_fixture.php @@ -0,0 +1,203 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestFixture extends Object { + +/** + * Name of the object + * + * @var string + */ + var $name = null; + +/** + * Cake's DBO driver (e.g: DboMysql). + * + * @access public + */ + var $db = null; + +/** + * Full Table Name + * + * @access public + */ + var $table = null; + +/** + * Instantiate the fixture. + * + * @access public + */ + function __construct() { + App::import('Model', 'CakeSchema'); + $this->Schema = new CakeSchema(array('name' => 'TestSuite', 'connection' => 'test_suite')); + + $this->init(); + } + +/** + * Initialize the fixture. + * + * @param object Cake's DBO driver (e.g: DboMysql). + * @access public + * + */ + function init() { + if (isset($this->import) && (is_string($this->import) || is_array($this->import))) { + $import = array_merge( + array('connection' => 'default', 'records' => false), + is_array($this->import) ? $this->import : array('model' => $this->import) + ); + + if (isset($import['model']) && App::import('Model', $import['model'])) { + ClassRegistry::config(array('ds' => $import['connection'])); + $model =& ClassRegistry::init($import['model']); + $db =& ConnectionManager::getDataSource($model->useDbConfig); + $db->cacheSources = false; + $this->fields = $model->schema(true); + $this->fields[$model->primaryKey]['key'] = 'primary'; + $this->table = $db->fullTableName($model, false); + ClassRegistry::config(array('ds' => 'test_suite')); + ClassRegistry::flush(); + } elseif (isset($import['table'])) { + $model =& new Model(null, $import['table'], $import['connection']); + $db =& ConnectionManager::getDataSource($import['connection']); + $db->cacheSources = false; + $model->useDbConfig = $import['connection']; + $model->name = Inflector::camelize(Inflector::singularize($import['table'])); + $model->table = $import['table']; + $model->tablePrefix = $db->config['prefix']; + $this->fields = $model->schema(true); + ClassRegistry::flush(); + } + + if (!empty($db->config['prefix']) && strpos($this->table, $db->config['prefix']) === 0) { + $this->table = str_replace($db->config['prefix'], '', $this->table); + } + + if (isset($import['records']) && $import['records'] !== false && isset($model) && isset($db)) { + $this->records = array(); + $query = array( + 'fields' => $db->fields($model, null, array_keys($this->fields)), + 'table' => $db->fullTableName($model), + 'alias' => $model->alias, + 'conditions' => array(), + 'order' => null, + 'limit' => null, + 'group' => null + ); + $records = $db->fetchAll($db->buildStatement($query, $model), false, $model->alias); + + if ($records !== false && !empty($records)) { + $this->records = Set::extract($records, '{n}.' . $model->alias); + } + } + } + + if (!isset($this->table)) { + $this->table = Inflector::underscore(Inflector::pluralize($this->name)); + } + + if (!isset($this->primaryKey) && isset($this->fields['id'])) { + $this->primaryKey = 'id'; + } + } + +/** + * Run before all tests execute, should return SQL statement to create table for this fixture could be executed successfully. + * + * @param object $db An instance of the database object used to create the fixture table + * @return boolean True on success, false on failure + * @access public + */ + function create(&$db) { + if (!isset($this->fields) || empty($this->fields)) { + return false; + } + + $this->Schema->_build(array($this->table => $this->fields)); + return ( + $db->execute($db->createSchema($this->Schema), array('log' => false)) !== false + ); + } + +/** + * Run after all tests executed, should return SQL statement to drop table for this fixture. + * + * @param object $db An instance of the database object used to create the fixture table + * @return boolean True on success, false on failure + * @access public + */ + function drop(&$db) { + if (empty($this->fields)) { + return false; + } + $this->Schema->_build(array($this->table => $this->fields)); + return ( + $db->execute($db->dropSchema($this->Schema), array('log' => false)) !== false + ); + } + +/** + * Run before each tests is executed, should return a set of SQL statements to insert records for the table + * of this fixture could be executed successfully. + * + * @param object $db An instance of the database into which the records will be inserted + * @return boolean on success or if there are no records to insert, or false on failure + * @access public + */ + function insert(&$db) { + if (!isset($this->_insert)) { + $values = array(); + + if (isset($this->records) && !empty($this->records)) { + foreach ($this->records as $record) { + $fields = array_keys($record); + $values[] = '(' . implode(', ', array_map(array(&$db, 'value'), array_values($record))) . ')'; + } + return $db->insertMulti($this->table, $fields, $values); + } + return true; + } + } + +/** + * Truncates the current fixture. Can be overwritten by classes extending CakeFixture to trigger other events before / after + * truncate. + * + * @param object $db A reference to a db instance + * @return boolean + * @access public + */ + function truncate(&$db) { + $fullDebug = $db->fullDebug; + $db->fullDebug = false; + $return = $db->truncate($this->table); + $db->fullDebug = $fullDebug; + return $return; + } +} diff --git a/cake/tests/lib/cake_test_model.php b/cake/tests/lib/cake_test_model.php new file mode 100644 index 0000000..759e739 --- /dev/null +++ b/cake/tests/lib/cake_test_model.php @@ -0,0 +1,31 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4667 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +require_once LIBS.'model'.DS.'model.php'; + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeTestModel extends Model { + var $useDbConfig = 'test_suite'; + var $cacheSources = false; +} diff --git a/cake/tests/lib/cake_test_suite_dispatcher.php b/cake/tests/lib/cake_test_suite_dispatcher.php new file mode 100644 index 0000000..85bb558 --- /dev/null +++ b/cake/tests/lib/cake_test_suite_dispatcher.php @@ -0,0 +1,249 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +require_once CAKE_TESTS_LIB . 'test_manager.php'; + +/** + * CakeTestSuiteDispatcher handles web requests to the test suite and runs the correct action. + * + * @package cake.tests.libs + */ +class CakeTestSuiteDispatcher { +/** + * 'Request' parameters + * + * @var array + */ + var $params = array( + 'codeCoverage' => false, + 'group' => null, + 'case' => null, + 'app' => false, + 'plugin' => null, + 'output' => 'html', + 'show' => 'groups', + 'show_passes' => false + ); + +/** + * The classname for the TestManager being used + * + * @var string + */ + var $_managerClass = 'TestManager'; + +/** + * The Instance of the Manager being used. + * + * @var TestManager subclass + */ + var $Manager; + +/** + * Baseurl for the request + * + * @var string + */ + var $_baseUrl; + +/** + * Base dir of the request. Used for accessing assets. + * + * @var string + */ + var $_baseDir; + +/** + * constructor + * + * @return void + */ + function CakeTestSuiteDispatcher() { + $this->_baseUrl = $_SERVER['PHP_SELF']; + $dir = rtrim(dirname($this->_baseUrl), '\\'); + $this->_baseDir = ($dir === '/') ? $dir : $dir . '/'; + } + +/** + * Runs the actions required by the URL parameters. + * + * @return void + */ + function dispatch() { + $this->_checkSimpleTest(); + $this->_parseParams(); + + if ($this->params['group']) { + $this->_runGroupTest(); + } elseif ($this->params['case']) { + $this->_runTestCase(); + } elseif (isset($_GET['show']) && $_GET['show'] == 'cases') { + $this->_testCaseList(); + } else { + $this->_groupTestList(); + } + + $output = ob_get_clean(); + echo $output; + } + +/** + * Checks that simpleTest is installed. Will exit if it doesn't + * + * @return void + */ + function _checkSimpleTest() { + if (!App::import('Vendor', 'simpletest' . DS . 'reporter')) { + $baseDir = $this->_baseDir; + include CAKE_TESTS_LIB . 'templates' . DS . 'simpletest.php'; + exit(); + } + } + +/** + * Checks for the xdebug extension required to do code coverage. Displays an error + * if xdebug isn't installed. + * + * @return void + */ + function _checkXdebug() { + if (!extension_loaded('xdebug')) { + $baseDir = $this->_baseDir; + include CAKE_TESTS_LIB . 'templates' . DS . 'xdebug.php'; + exit(); + } + } + +/** + * Generates a page containing the a list of test cases that could be run. + * + * @return void + */ + function _testCaseList() { + $Reporter =& $this->getReporter(); + $Reporter->paintDocumentStart(); + $Reporter->paintTestMenu(); + $Reporter->testCaseList(); + $Reporter->paintDocumentEnd(); + } + +/** + * Generates a page containing a list of group tests that could be run. + * + * @return void + */ + function _groupTestList() { + $Reporter =& $this->getReporter(); + $Reporter->paintDocumentStart(); + $Reporter->paintTestMenu(); + $Reporter->groupTestList(); + $Reporter->paintDocumentEnd(); + } + +/** + * Sets the Manager to use for the request. + * + * @return string The manager class name + * @static + */ + function &getManager() { + if (empty($this->Manager)) { + $this->Manager = new $this->_managerClass(); + } + return $this->Manager; + } + +/** + * Gets the reporter based on the request parameters + * + * @return void + * @static + */ + function &getReporter() { + static $Reporter = NULL; + if (!$Reporter) { + $type = strtolower($this->params['output']); + $coreClass = 'Cake' . ucwords($this->params['output']) . 'Reporter'; + $coreFile = CAKE_TESTS_LIB . 'reporter' . DS . 'cake_' . $type . '_reporter.php'; + + $appClass = $this->params['output'] . 'Reporter'; + $appFile = APPLIBS . 'test_suite' . DS . 'reporter' . DS . $type . '_reporter.php'; + if (include_once $coreFile) { + $Reporter =& new $coreClass(null, $this->params); + } elseif (include_once $appFile) { + $Reporter =& new $appClass(null, $this->params); + } + } + return $Reporter; + } + +/** + * Parse url params into a 'request' + * + * @return void + */ + function _parseParams() { + if (!isset($_SERVER['SERVER_NAME'])) { + $_SERVER['SERVER_NAME'] = ''; + } + foreach ($this->params as $key => $value) { + if (isset($_GET[$key])) { + $this->params[$key] = $_GET[$key]; + } + } + if (isset($_GET['code_coverage'])) { + $this->params['codeCoverage'] = true; + require_once CAKE_TESTS_LIB . 'code_coverage_manager.php'; + $this->_checkXdebug(); + } + $this->params['baseUrl'] = $this->_baseUrl; + $this->params['baseDir'] = $this->_baseDir; + $this->getManager(); + } + +/** + * Runs the group test case. + * + * @return void + */ + function _runGroupTest() { + $Reporter =& CakeTestSuiteDispatcher::getReporter(); + if ($this->params['codeCoverage']) { + CodeCoverageManager::init($this->params['group'], $Reporter); + } + if ('all' == $this->params['group']) { + $this->Manager->runAllTests($Reporter); + } else { + $this->Manager->runGroupTest(ucfirst($this->params['group']), $Reporter); + } + } + +/** + * Runs a test case file. + * + * @return void + */ + function _runTestCase() { + $Reporter =& CakeTestSuiteDispatcher::getReporter(); + if ($this->params['codeCoverage']) { + CodeCoverageManager::init($this->params['case'], $Reporter); + } + $this->Manager->runTestCase($this->params['case'], $Reporter); + } +} diff --git a/cake/tests/lib/cake_web_test_case.php b/cake/tests/lib/cake_web_test_case.php new file mode 100644 index 0000000..34ac3b6 --- /dev/null +++ b/cake/tests/lib/cake_web_test_case.php @@ -0,0 +1,33 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * Ignore base class. + */ + SimpleTest::ignore('CakeWebTestCase'); + +/** + * Simple wrapper for the WebTestCase provided by SimpleTest + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CakeWebTestCase extends WebTestCase { +} diff --git a/cake/tests/lib/code_coverage_manager.php b/cake/tests/lib/code_coverage_manager.php new file mode 100644 index 0000000..22dce2d --- /dev/null +++ b/cake/tests/lib/code_coverage_manager.php @@ -0,0 +1,804 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +App::import('Core', 'Folder'); + +/** + * Short description for class. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class CodeCoverageManager { + +/** + * Is this an app test case? + * + * @var string + */ + var $appTest = false; + +/** + * Is this an app test case? + * + * @var string + */ + var $pluginTest = false; + +/** + * Is this a grouptest? + * + * @var string + * @access public + */ + var $groupTest = false; + +/** + * The test case file to analyze + * + * @var string + */ + var $testCaseFile = ''; + +/** + * The currently used CakeTestReporter + * + * @var string + */ + var $reporter = ''; + +/** + * undocumented variable + * + * @var string + */ + var $numDiffContextLines = 7; + +/** + * Returns a singleton instance + * + * @return object + * @access public + */ + function &getInstance() { + static $instance = array(); + if (!$instance) { + $instance[0] =& new CodeCoverageManager(); + } + return $instance[0]; + } + +/** + * Initializes a new Coverage Analyzation for a given test case file + * + * @param string $testCaseFile The test case file being covered. + * @param object $reporter Instance of the reporter running. + * @return void + * @static + */ + function init($testCaseFile, &$reporter) { + $manager =& CodeCoverageManager::getInstance(); + $manager->reporter =& $reporter; + $testCaseFile = str_replace(DS . DS, DS, $testCaseFile); + $thisFile = str_replace('.php', '.test.php', basename(__FILE__)); + + if (strpos($testCaseFile, $thisFile) !== false) { + trigger_error(__('Xdebug supports no parallel coverage analysis - so this is not possible.', true), E_USER_ERROR); + } + $manager->setParams($reporter); + $manager->testCaseFile = $testCaseFile; + } + +/** + * Start/resume Code coverage collection. + * + * @return void + * @static + */ + function start() { + xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); + } + +/** + * Stops/pauses code coverage collection. Does not clean the + * code coverage memory. Use clean() to clear code coverage memory + * + * @return void + * @static + */ + function stop() { + xdebug_stop_code_coverage(false); + } + +/** + * Clears the existing code coverage information. Also stops any + * running collection. + * + * @return void + * @static + */ + function clear() { + xdebug_stop_code_coverage(); + } + +/** + * Set the parameters from a reporter to the CodeCoverageManager + * + * @return void + */ + function setParams(&$reporter) { + if ($reporter->params['app']) { + $this->appTest = true; + } + + if ($reporter->params['group']) { + $this->groupTest = true; + } + + if ($reporter->params['plugin']) { + $this->pluginTest = Inflector::underscore($reporter->params['plugin']); + } + } + +/** + * Stops the current code coverage analyzation and dumps a nice report + * depending on the reporter that was passed to start() + * + * @return void + * @static + */ + function report($output = true) { + $manager =& CodeCoverageManager::getInstance(); + + CodeCoverageManager::stop(); + CodeCoverageManager::clear(); + + list($coverageData, $testObjectFile) = $manager->_getCoverageData(); + + if (empty($coverageData) && $output) { + echo "The test object file is never loaded.\n"; + } + + if (!$manager->groupTest) { + $execCodeLines = $manager->__getExecutableLines(file_get_contents($testObjectFile)); + $result = ''; + + switch (get_class($manager->reporter)) { + case 'CakeHtmlReporter': + $result = $manager->reportCaseHtmlDiff(@file($testObjectFile), $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + case 'CakeCliReporter': + default: + $result = $manager->reportCaseCli(@file($testObjectFile), $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + } + } else { + $execCodeLines = $manager->__getExecutableLines($testObjectFile); + $result = ''; + + switch (get_class($manager->reporter)) { + case 'CakeHtmlReporter': + $result = $manager->reportGroupHtml($testObjectFile, $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + case 'CakeCliReporter': + default: + $result = $manager->reportGroupCli($testObjectFile, $coverageData, $execCodeLines, $manager->numDiffContextLines); + break; + } + } + + if ($output) { + echo $result; + } + } + +/** + * Gets the coverage data for the test case or group test that is being run. + * + * @return void + */ + function _getCoverageData() { + $coverageData = array(); + $dump = xdebug_get_code_coverage(); + + if ($this->groupTest) { + $testObjectFile = $this->__testObjectFilesFromGroupFile($this->testCaseFile, $this->appTest); + foreach ($testObjectFile as $file) { + if (!file_exists($file)) { + trigger_error(sprintf(__('This test object file is invalid: %s', true), $file)); + return ; + } + } + foreach ($testObjectFile as $file) { + if (isset($dump[$file])) { + $coverageData[$file] = $dump[$file]; + } + } + } else { + $testObjectFile = $this->__testObjectFileFromCaseFile($this->testCaseFile, $this->appTest); + + if (!file_exists($testObjectFile)) { + trigger_error(sprintf(__('This test object file is invalid: %s', true), $testObjectFile)); + return ; + } + + if (isset($dump[$testObjectFile])) { + $coverageData = $dump[$testObjectFile]; + } + } + return array($coverageData, $testObjectFile); + } + +/** + * Diff reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportCaseHtmlDiff($testObjectFile, $coverageData, $execCodeLines, $numContextLines) { + $manager = CodeCoverageManager::getInstance(); + $total = count($testObjectFile); + $lines = array(); + + for ($i = 1; $i < $total + 1; $i++) { + $foundByManualFinder = isset($execCodeLines[$i]) && trim($execCodeLines[$i]) != ''; + $foundByXdebug = isset($coverageData[$i]); + + if (!$foundByManualFinder || !$foundByXdebug || $coverageData[$i] === -2) { + if (isset($lines[$i])) { + $lines[$i] = 'ignored ' . $lines[$i]; + } else { + $lines[$i] = 'ignored'; + } + continue; + } + + if ($coverageData[$i] !== -1) { + if (isset($lines[$i])) { + $lines[$i] = 'covered ' . $lines[$i]; + } else { + $lines[$i] = 'covered'; + } + continue; + } + $lines[$i] = 'uncovered show'; + $foundEndBlockInContextSearch = false; + + for ($j = 1; $j <= $numContextLines; $j++) { + $key = $i - $j; + + if ($key > 0 && isset($lines[$key])) { + if (strpos($lines[$key], 'end') !== false) { + $foundEndBlockInContextSearch = true; + if ($j < $numContextLines) { + $lines[$key] = str_replace('end', '', $lines[$key-1]); + } + } + + if (strpos($lines[$key], 'uncovered') === false) { + if (strpos($lines[$key], 'covered') !== false) { + $lines[$key] .= ' show'; + } else { + $lines[$key] = 'ignored show'; + } + } + + if ($j == $numContextLines) { + $lineBeforeIsEndBlock = strpos($lines[$key-1], 'end') !== false; + $lineBeforeIsShown = strpos($lines[$key-1], 'show') !== false; + $lineBeforeIsUncovered = strpos($lines[$key-1], 'uncovered') !== false; + + if (!$foundEndBlockInContextSearch && !$lineBeforeIsUncovered && ($lineBeforeIsEndBlock)) { + $lines[$key-1] = str_replace('end', '', $lines[$key-1]); + } + + if (!$lineBeforeIsShown && !$lineBeforeIsUncovered) { + $lines[$key] .= ' start'; + } + } + } + $key = $i + $j; + + if ($key < $total) { + $lines[$key] = 'show'; + + if ($j == $numContextLines) { + $lines[$key] .= ' end'; + } + } + } + } + + // find the last "uncovered" or "show"n line and "end" its block + $lastShownLine = $manager->__array_strpos($lines, 'show', true); + if (isset($lines[$lastShownLine])) { + $lines[$lastShownLine] .= ' end'; + } + + // give the first start line another class so we can control the top padding of the entire results + $firstShownLine = $manager->__array_strpos($lines, 'show'); + if (isset($lines[$firstShownLine])) { + $lines[$firstShownLine] .= ' realstart'; + } + + // get the output + $lineCount = $coveredCount = 0; + $report = ''; + foreach ($testObjectFile as $num => $line) { + // start line count at 1 + $num++; + $class = $lines[$num]; + + if (strpos($class, 'ignored') === false) { + $lineCount++; + + if (strpos($class, 'covered') !== false && strpos($class, 'uncovered') === false) { + $coveredCount++; + } + } + + if (strpos($class, 'show') !== false) { + $report .= $manager->__paintCodeline($class, $num, $line); + } + } + return $manager->__paintHeader($lineCount, $coveredCount, $report); + } + +/** + * CLI reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportCaseCli($testObjectFile, $coverageData, $execCodeLines) { + $manager = CodeCoverageManager::getInstance(); + $lineCount = $coveredCount = 0; + $report = ''; + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$num]) && trim($execCodeLines[$num]) != ''; + $foundByXdebug = isset($coverageData[$num]) && $coverageData[$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $lineCount++; + + if ($coverageData[$num] > 0) { + $coveredCount++; + } + } + } + return $manager->__paintHeaderCli($lineCount, $coveredCount, $report); + } + +/** + * Diff reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportGroupHtml($testObjectFiles, $coverageData, $execCodeLines, $numContextLines) { + $manager = CodeCoverageManager::getInstance(); + $report = ''; + + foreach ($testObjectFiles as $testObjectFile) { + $lineCount = $coveredCount = 0; + $objFilename = $testObjectFile; + $testObjectFile = file($testObjectFile); + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$objFilename][$num]) && trim($execCodeLines[$objFilename][$num]) != ''; + $foundByXdebug = isset($coverageData[$objFilename][$num]) && $coverageData[$objFilename][$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $class = 'uncovered'; + $lineCount++; + + if ($coverageData[$objFilename][$num] > 0) { + $class = 'covered'; + $coveredCount++; + } + } else { + $class = 'ignored'; + } + } + $report .= $manager->__paintGroupResultLine($objFilename, $lineCount, $coveredCount); + } + return $manager->__paintGroupResultHeader($report); + } + +/** + * CLI reporting + * + * @param string $testObjectFile + * @param string $coverageData + * @param string $execCodeLines + * @param string $output + * @return void + * @static + */ + function reportGroupCli($testObjectFiles, $coverageData, $execCodeLines) { + $manager = CodeCoverageManager::getInstance(); + $report = ''; + + foreach ($testObjectFiles as $testObjectFile) { + $lineCount = $coveredCount = 0; + $objFilename = $testObjectFile; + $testObjectFile = file($testObjectFile); + + foreach ($testObjectFile as $num => $line) { + $num++; + $foundByManualFinder = isset($execCodeLines[$objFilename][$num]) && trim($execCodeLines[$objFilename][$num]) != ''; + $foundByXdebug = isset($coverageData[$objFilename][$num]) && $coverageData[$objFilename][$num] !== -2; + + if ($foundByManualFinder && $foundByXdebug) { + $lineCount++; + + if ($coverageData[$objFilename][$num] > 0) { + $coveredCount++; + } + } + } + $report .= $manager->__paintGroupResultLineCli($objFilename, $lineCount, $coveredCount); + } + return $report; + } + +/** + * Returns the name of the test object file based on a given test case file name + * + * @param string $file + * @param string $isApp + * @return string name of the test object file + * @access private + */ + function __testObjectFileFromCaseFile($file, $isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $path = $manager->__getTestFilesPath($isApp); + $folderPrefixMap = array( + 'behaviors' => 'models', + 'components' => 'controllers', + 'helpers' => 'views' + ); + + foreach ($folderPrefixMap as $dir => $prefix) { + if (strpos($file, $dir) === 0) { + $path .= $prefix . DS; + break; + } + } + $testManager =& new TestManager(); + $testFile = str_replace(array('/', $testManager->_testExtension), array(DS, '.php'), $file); + + $folder =& new Folder(); + $folder->cd(ROOT . DS . CAKE_TESTS_LIB); + $contents = $folder->read(); + + if (in_array(basename($testFile), $contents[1])) { + $testFile = basename($testFile); + $path = ROOT . DS . CAKE_TESTS_LIB; + } + $path .= $testFile; + $realpath = realpath($path); + + if ($realpath) { + return $realpath; + } + return $path; + } + +/** + * Returns an array of names of the test object files based on a given test group file name + * + * @param array $files + * @param string $isApp + * @return array names of the test object files + * @access private + */ + function __testObjectFilesFromGroupFile($groupFile, $isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $testManager =& new TestManager(); + + $path = TESTS; + if (!$isApp) { + $path = ROOT . DS . 'cake' . DS . 'tests'; + } + if (!!$manager->pluginTest) { + $path = App::pluginPath($manager->pluginTest) . DS . 'tests'; + } + + $result = array(); + if ($groupFile == 'all') { + $files = array_keys($testManager->getTestCaseList()); + foreach ($files as $file) { + $file = str_replace(DS . 'tests' . DS . 'cases' . DS, DS, $file); + $file = str_replace('.test.php', '.php', $file); + $file = str_replace(DS . DS, DS, $file); + $result[] = $file; + } + } else { + $path .= DS . 'groups' . DS . $groupFile . $testManager->_groupExtension; + if (!file_exists($path)) { + trigger_error(__('This group file does not exist!', true)); + return array(); + } + + $result = array(); + $groupContent = file_get_contents($path); + $ds = '\s*\.\s*DS\s*\.\s*'; + $pluginTest = 'APP\.\'plugins\'' . $ds . '\'' . $manager->pluginTest . '\'' . $ds . '\'tests\'' . $ds . '\'cases\''; + $pluginTest .= '|App::pluginPath\(\'' . $manager->pluginTest . '\'\)' . $ds . '\'tests\'' . $ds . '\'cases\''; + $pattern = '/\s*TestManager::addTestFile\(\s*\$this,\s*(' . $pluginTest . '|APP_TEST_CASES|CORE_TEST_CASES)' . $ds . '(.*?)\)/i'; + preg_match_all($pattern, $groupContent, $matches); + + foreach ($matches[2] as $file) { + $patterns = array( + '/\s*\.\s*DS\s*\.\s*/', + '/\s*APP_TEST_CASES\s*/', + '/\s*CORE_TEST_CASES\s*/', + ); + + $replacements = array(DS, '', ''); + $file = preg_replace($patterns, $replacements, $file); + $file = str_replace("'", '', $file); + $result[] = $manager->__testObjectFileFromCaseFile($file, $isApp) . '.php'; + } + } + return $result; + } + +/** + * Parses a given code string into an array of lines and replaces some non-executable code lines with the needed + * amount of new lines in order for the code line numbers to stay in sync + * + * @param string $content + * @return array array of lines + * @access private + */ + function __getExecutableLines($content) { + if (is_array($content)) { + $manager =& CodeCoverageManager::getInstance(); + $result = array(); + foreach ($content as $file) { + $result[$file] = $manager->__getExecutableLines(file_get_contents($file)); + } + return $result; + } + $content = h($content); + // arrays are 0-indexed, but we want 1-indexed stuff now as we are talking code lines mind you (**) + $content = "\n" . $content; + // // strip unwanted lines + $content = preg_replace_callback("/(@codeCoverageIgnoreStart.*?@codeCoverageIgnoreEnd)/is", array('CodeCoverageManager', '__replaceWithNewlines'), $content); + // strip php | ?\> tag only lines + $content = preg_replace('/[ |\t]*[<\?php|\?>]+[ |\t]*/', '', $content); + + // strip lines that contain only braces and parenthesis + $content = preg_replace('/[ |\t]*[{|}|\(|\)]+[ |\t]*/', '', $content); + $result = explode("\n", $content); + // unset the zero line again to get the original line numbers, but starting at 1, see (**) + unset($result[0]); + return $result; + } + +/** + * Replaces a given arg with the number of newlines in it + * + * @return string the number of newlines in a given arg + * @access private + */ + function __replaceWithNewlines() { + $args = func_get_args(); + $numLineBreaks = count(explode("\n", $args[0][0])); + return str_pad('', $numLineBreaks - 1, "\n"); + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintHeader($lineCount, $coveredCount, $report) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + return $report = '

      Code Coverage: ' . $codeCoverage . '%

      +
      ' . $report . '
      '; + } + +/** + * Displays a notification concerning group test results + * + * @return void + * @access public + */ + function __paintGroupResultHeader($report) { + return '

      Please keep in mind that the coverage can vary a little bit depending on how much the different tests in the group interfere. If for example, TEST A calls a line from TEST OBJECT B, the coverage for TEST OBJECT B will be a little greater than if you were running the corresponding test case for TEST OBJECT B alone.

      ' . $report . '
      '; + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintGroupResultLine($file, $lineCount, $coveredCount) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'result-bad'; + + if ($codeCoverage > 50) { + $class = 'result-ok'; + } + if ($codeCoverage > 80) { + $class = 'result-good'; + } + return '

      Code Coverage for ' . $file . ': ' . $codeCoverage . '%

      '; + } + +/** + * Paints the headline for code coverage analysis + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintGroupResultLineCli($file, $lineCount, $coveredCount) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'bad'; + if ($codeCoverage > 50) { + $class = 'ok'; + } + if ($codeCoverage > 80) { + $class = 'good'; + } + return "\n" . 'Code Coverage for ' . $file . ': ' . $codeCoverage . '% (' . $class . ')' . "\n"; + } + +/** + * Paints the headline for code coverage analysis in the CLI + * + * @param string $codeCoverage + * @param string $report + * @return void + * @access private + */ + function __paintHeaderCli($lineCount, $coveredCount, $report) { + $manager =& CodeCoverageManager::getInstance(); + $codeCoverage = $manager->__calcCoverage($lineCount, $coveredCount); + $class = 'bad'; + if ($codeCoverage > 50) { + $class = 'ok'; + } + if ($codeCoverage > 80) { + $class = 'good'; + } + return $report = "Code Coverage: $codeCoverage% ($class)\n"; + } + +/** + * Paints a code line for html output + * + * @package default + * @access private + */ + function __paintCodeline($class, $num, $line) { + $line = h($line); + + if (trim($line) == '') { + $line = ' '; // Win IE fix + } + return '
      ' . $num . '' . $line . '
      '; + } + +/** + * Calculates the coverage percentage based on a line count and a covered line count + * + * @param string $lineCount + * @param string $coveredCount + * @return void + * @access private + */ + function __calcCoverage($lineCount, $coveredCount) { + if ($coveredCount > $lineCount) { + trigger_error(__('Sorry, you cannot have more covered lines than total lines!', true)); + } + return ($lineCount != 0) + ? round(100 * $coveredCount / $lineCount, 2) + : '0.00'; + } + +/** + * Gets us the base path to look for the test files + * + * @param string $isApp + * @return void + * @access public + */ + function __getTestFilesPath($isApp = true) { + $manager = CodeCoverageManager::getInstance(); + $path = ROOT . DS; + + if ($isApp) { + $path .= APP_DIR . DS; + } elseif (!!$manager->pluginTest) { + $pluginPath = APP . 'plugins' . DS . $manager->pluginTest . DS; + + $pluginPaths = App::path('plugins'); + foreach ($pluginPaths as $tmpPath) { + $tmpPath = $tmpPath . $manager->pluginTest . DS; + if (file_exists($tmpPath)) { + $pluginPath = $tmpPath; + break; + } + } + + $path = $pluginPath; + } else { + $path = TEST_CAKE_CORE_INCLUDE_PATH; + } + + return $path; + } + +/** + * Finds the last element of an array that contains $needle in a strpos computation + * + * @param array $arr + * @param string $needle + * @return void + * @access private + */ + function __array_strpos($arr, $needle, $reverse = false) { + if (!is_array($arr) || empty($arr)) { + return false; + } + + if ($reverse) { + $arr = array_reverse($arr, true); + } + + foreach ($arr as $key => $val) { + if (strpos($val, $needle) !== false) { + return $key; + } + } + return false; + } +} diff --git a/cake/tests/lib/reporter/.svn/entries b/cake/tests/lib/reporter/.svn/entries new file mode 100644 index 0000000..2bca480 --- /dev/null +++ b/cake/tests/lib/reporter/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/tests/lib/reporter +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +cake_html_reporter.php +file + + + + +2010-08-30T06:36:28.000000Z +2749f81939568a03e728154af66331fa +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +10862 + +cake_text_reporter.php +file + + + + +2010-08-30T06:36:28.000000Z +fecfe8d5dcb3bccc8dfc827aa2a6f7b8 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5129 + +cake_cli_reporter.php +file + + + + +2010-08-30T06:36:28.000000Z +5396b5fc5ac45852884e63dbd19978b1 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4816 + +cake_base_reporter.php +file + + + + +2010-08-30T06:36:28.000000Z +6ca9d1575ae163a14c63b4a56afc7cba +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +5243 + diff --git a/cake/tests/lib/reporter/.svn/text-base/cake_base_reporter.php.svn-base b/cake/tests/lib/reporter/.svn/text-base/cake_base_reporter.php.svn-base new file mode 100644 index 0000000..2561f8c --- /dev/null +++ b/cake/tests/lib/reporter/.svn/text-base/cake_base_reporter.php.svn-base @@ -0,0 +1,225 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * CakeBaseReporter contains common reporting features used in the CakePHP Test suite + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeBaseReporter extends SimpleReporter { + +/** + * Time the test runs started. + * + * @var integer + * @access protected + */ + var $_timeStart = 0; + +/** + * Time the test runs ended + * + * @var integer + * @access protected + */ + var $_timeEnd = 0; + +/** + * Duration of all test methods. + * + * @var integer + * @access protected + */ + var $_timeDuration = 0; + +/** + * Array of request parameters. Usually parsed GET params. + * + * @var array + */ + var $params = array(); + +/** + * Character set for the output of test reporting. + * + * @var string + * @access protected + */ + var $_characterSet; + +/** + * Does nothing yet. The first output will + * be sent on the first test start. + * + * ### Params + * + * - show_passes - Should passes be shown + * - plugin - Plugin test being run? + * - app - App test being run. + * - case - The case being run + * - codeCoverage - Whether the case/group being run is being code covered. + * + * @param string $charset The character set to output with. Defaults to UTF-8 + * @param array $params Array of request parameters the reporter should use. See above. + * @access public + */ + function CakeBaseReporter($charset = 'utf-8', $params = array()) { + $this->SimpleReporter(); + if (!$charset) { + $charset = 'utf-8'; + } + $this->_characterSet = $charset; + $this->params = $params; + } + +/** + * Signals / Paints the beginning of a TestSuite executing. + * Starts the timer for the TestSuite execution time. + * + * @param string $test_name Name of the test that is being run. + * @param integer $size + * @return void + */ + function paintGroupStart($test_name, $size) { + if (empty($this->_timeStart)) { + $this->_timeStart = $this->_getTime(); + } + parent::paintGroupStart($test_name, $size); + } + +/** + * Signals/Paints the end of a TestSuite. All test cases have run + * and timers are stopped. + * + * @param string $test_name Name of the test that is being run. + * @return void + */ + function paintGroupEnd($test_name) { + $this->_timeEnd = $this->_getTime(); + $this->_timeDuration = $this->_timeEnd - $this->_timeStart; + parent::paintGroupEnd($test_name); + } + +/** + * Paints the beginning of a test method being run. This is used + * to start/resume the code coverage tool. + * + * @param string $method The method name being run. + * @return void + */ + function paintMethodStart($method) { + parent::paintMethodStart($method); + if (!empty($this->params['codeCoverage'])) { + CodeCoverageManager::start(); + } + } + +/** + * Paints the end of a test method being run. This is used + * to pause the collection of code coverage if its being used. + * + * @param string $method The name of the method being run. + * @return void + */ + function paintMethodEnd($method) { + parent::paintMethodEnd($method); + if (!empty($this->params['codeCoverage'])) { + CodeCoverageManager::stop(); + } + } + +/** + * Get the current time in microseconds. Similar to getMicrotime in basics.php + * but in a separate function to reduce dependancies. + * + * @return float Time in microseconds + * @access protected + */ + function _getTime() { + list($usec, $sec) = explode(' ', microtime()); + return ((float)$sec + (float)$usec); + } + +/** + * Retrieves a list of test cases from the active Manager class, + * displaying it in the correct format for the reporter subclass + * + * @return mixed + */ + function testCaseList() { + $testList = TestManager::getTestCaseList(); + return $testList; + } + +/** + * Retrieves a list of group test cases from the active Manager class + * displaying it in the correct format for the reporter subclass. + * + * @return void + */ + function groupTestList() { + $testList = TestManager::getGroupTestList(); + return $testList; + } + +/** + * Paints the start of the response from the test suite. + * Used to paint things like head elements in an html page. + * + * @return void + */ + function paintDocumentStart() { + + } + +/** + * Paints the end of the response from the test suite. + * Used to paint things like in an html page. + * + * @return void + */ + function paintDocumentEnd() { + + } + +/** + * Paint a list of test sets, core, app, and plugin test sets + * available. + * + * @return void + */ + function paintTestMenu() { + + } + +/** + * Get the baseUrl if one is available. + * + * @return string The base url for the request. + */ + function baseUrl() { + if (!empty($_SERVER['PHP_SELF'])) { + return $_SERVER['PHP_SELF']; + } + return ''; + } + +} diff --git a/cake/tests/lib/reporter/.svn/text-base/cake_cli_reporter.php.svn-base b/cake/tests/lib/reporter/.svn/text-base/cake_cli_reporter.php.svn-base new file mode 100644 index 0000000..a424e28 --- /dev/null +++ b/cake/tests/lib/reporter/.svn/text-base/cake_cli_reporter.php.svn-base @@ -0,0 +1,178 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + if (version_compare(PHP_VERSION, '4.4.4', '<=') || + PHP_SAPI == 'cgi') { + define('STDOUT', fopen('php://stdout', 'w')); + define('STDERR', fopen('php://stderr', 'w')); + register_shutdown_function(create_function('', 'fclose(STDOUT); fclose(STDERR); return true;')); + } + +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * Minimal command line test displayer. Writes fail details to STDERR. Returns 0 + * to the shell if all tests pass, ST_FAILS_RETURN_CODE if any test fails. + * + * @package cake + * @subpackage cake.tests.libs.reporter + */ +class CakeCliReporter extends CakeBaseReporter { +/** + * separator string for fail, error, exception, and skip messages. + * + * @var string + */ + var $separator = '->'; + +/** + * array of 'request' parameters + * + * @var array + */ + var $params = array(); + +/** + * Constructor + * + * @param string $separator + * @param array $params + * @return void + */ + function CakeCLIReporter($charset = 'utf-8', $params = array()) { + $this->CakeBaseReporter($charset, $params); + } + + function setFailDetailSeparator($separator) { + $this->separator = $separator; + } + +/** + * Paint fail faildetail to STDERR. + * + * @param string $message Message of the fail. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'FAIL' . $this->separator . $message); + } + +/** + * Paint PHP errors to STDERR. + * + * @param string $message Message of the Error + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'ERROR' . $this->separator . $message); + } + +/** + * Paint exception faildetail to STDERR. + * + * @param string $message Message of the Error + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + $message .= sprintf('Unexpected exception of type [%s] with message [%s] in [%s] line [%s]', + get_class($exception), + $exception->getMessage(), + $exception->getFile(), + $exception->getLine() + ); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'EXCEPTION' . $this->separator . $message); + } + +/** + * Get the breadcrumb trail for the current test method/case + * + * @return string The string for the breadcrumb + */ + function _getBreadcrumb() { + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + $out = "\n\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + $out .= "\n\n"; + return $out; + } + +/** + * Paint a test skip message + * + * @param string $message The message of the skip + * @return void + */ + function paintSkip($message) { + parent::paintSkip($message); + fwrite(STDOUT, 'SKIP' . $this->separator . $message . "\n\n"); + } + +/** + * Paint a footer with test case name, timestamp, counts of fails and exceptions. + */ + function paintFooter($test_name) { + $buffer = $this->getTestCaseProgress() . '/' . $this->getTestCaseCount() . ' test cases complete: '; + + if (0 < ($this->getFailCount() + $this->getExceptionCount())) { + $buffer .= $this->getPassCount() . " passes"; + if (0 < $this->getFailCount()) { + $buffer .= ", " . $this->getFailCount() . " fails"; + } + if (0 < $this->getExceptionCount()) { + $buffer .= ", " . $this->getExceptionCount() . " exceptions"; + } + $buffer .= ".\n"; + $buffer .= $this->_timeStats(); + fwrite(STDOUT, $buffer); + } else { + fwrite(STDOUT, $buffer . $this->getPassCount() . " passes.\n" . $this->_timeStats()); + } + + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + } + +/** + * Get the time and memory stats for this test case/group + * + * @return string String content to display + * @access protected + */ + function _timeStats() { + $out = 'Time taken by tests (in seconds): ' . $this->_timeDuration . "\n"; + if (function_exists('memory_get_peak_usage')) { + $out .= 'Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . "\n"; + } + return $out; + } +} diff --git a/cake/tests/lib/reporter/.svn/text-base/cake_html_reporter.php.svn-base b/cake/tests/lib/reporter/.svn/text-base/cake_html_reporter.php.svn-base new file mode 100644 index 0000000..aa0fcb5 --- /dev/null +++ b/cake/tests/lib/reporter/.svn/text-base/cake_html_reporter.php.svn-base @@ -0,0 +1,378 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * CakeHtmlReporter Reports Results of TestSuites and Test Cases + * in an HTML format / context. + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeHtmlReporter extends CakeBaseReporter { +/** + * Constructor + * + * @param string $charset + * @param string $params + * @return void + */ + function CakeHtmlReporter($charset = 'utf-8', $params = array()) { + $params = array_map(array($this, '_htmlEntities'), $params); + $this->CakeBaseReporter($charset, $params); + } +/** + * Paints the top of the web page setting the + * title to the name of the starting test. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintHeader($testName) { + $this->sendNoCacheHeaders(); + $this->paintDocumentStart(); + $this->paintTestMenu(); + printf("

      %s

      \n", $this->_htmlEntities($testName)); + echo "
        \n"; + } + +/** + * Paints the document start content contained in header.php + * + * @return void + */ + function paintDocumentStart() { + ob_start(); + $baseDir = $this->params['baseDir']; + include CAKE_TESTS_LIB . 'templates' . DS . 'header.php'; + } + +/** + * Paints the menu on the left side of the test suite interface. + * Contains all of the various plugin, core, and app buttons. + * + * @return void + */ + function paintTestMenu() { + $groups = $this->baseUrl() . '?show=groups'; + $cases = $this->baseUrl() . '?show=cases'; + $plugins = App::objects('plugin'); + sort($plugins); + include CAKE_TESTS_LIB . 'templates' . DS . 'menu.php'; + } + +/** + * Retrieves and paints the list of tests cases in an HTML format. + * + * @return void + */ + function testCaseList() { + $testCases = parent::testCaseList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "

        Core Test Cases:

        \n
          "; + $urlExtra = null; + if ($app) { + $buffer = "

          App Test Cases:

          \n
            "; + $urlExtra = '&app=true'; + } elseif ($plugin) { + $buffer = "

            " . Inflector::humanize($plugin) . " Test Cases:

            \n
              "; + $urlExtra = '&plugin=' . $plugin; + } + + if (1 > count($testCases)) { + $buffer .= "EMPTY"; + } + + foreach ($testCases as $testCaseFile => $testCase) { + $title = explode(strpos($testCase, '\\') ? '\\' : '/', str_replace('.test.php', '', $testCase)); + $title[count($title) - 1] = Inflector::camelize($title[count($title) - 1]); + $title = implode(' / ', $title); + $buffer .= "
            • " . $title . "
            • \n"; + } + $buffer .= "
            \n"; + echo $buffer; + } + +/** + * Retrieves and paints the list of group tests in an HTML format. + * + * @return void + */ + function groupTestList() { + $groupTests = parent::groupTestList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "

            Core Test Groups:

            \n
              "; + $urlExtra = null; + if ($app) { + $buffer = "

              App Test Groups:

              \n
                "; + $urlExtra = '&app=true'; + } else if ($plugin) { + $buffer = "

                " . Inflector::humanize($plugin) . " Test Groups:

                \n
                  "; + $urlExtra = '&plugin=' . $plugin; + } + + $buffer .= "
                • All tests
                • \n"; + + foreach ($groupTests as $groupTest) { + $buffer .= "
                • " . $groupTest . "
                • \n"; + } + $buffer .= "
                \n"; + echo $buffer; + } + +/** + * Send the headers necessary to ensure the page is + * reloaded on every request. Otherwise you could be + * scratching your head over out of date test data. + * + * @return void + * @access public + */ + function sendNoCacheHeaders() { + if (!headers_sent()) { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + } + } + +/** + * Paints the end of the test with a summary of + * the passes and failures. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintFooter($test_name) { + $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green"); + echo "
              \n"; + echo "
              "; + echo $this->getTestCaseProgress() . "/" . $this->getTestCaseCount(); + echo " test cases complete:\n"; + echo "" . $this->getPassCount() . " passes, "; + echo "" . $this->getFailCount() . " fails and "; + echo "" . $this->getExceptionCount() . " exceptions."; + echo "
              \n"; + echo '
              '; + echo '

              Time taken by tests (in seconds): ' . $this->_timeDuration . '

              '; + if (function_exists('memory_get_peak_usage')) { + echo '

              Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . '

              '; + } + echo $this->_paintLinks(); + echo '
              '; + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + $this->paintDocumentEnd(); + } + +/** + * Renders the links that for accessing things in the test suite. + * + * @return void + */ + function _paintLinks() { + $show = $query = array(); + if (!empty($this->params['group'])) { + $show['show'] = 'groups'; + } elseif (!empty($this->params['case'])) { + $show['show'] = 'cases'; + } + + if (!empty($this->params['app'])) { + $show['app'] = $query['app'] = 'true'; + } + if (!empty($this->params['plugin'])) { + $show['plugin'] = $query['plugin'] = $this->params['plugin']; + } + if (!empty($this->params['case'])) { + $query['case'] = $this->params['case']; + } elseif (!empty($this->params['group'])) { + $query['group'] = $this->params['group']; + } + $show = $this->_queryString($show); + $query = $this->_queryString($query); + + echo "

              Run more tests | Show Passes | \n"; + echo " Analyze Code Coverage

              \n"; + } + +/** + * Convert an array of parameters into a query string url + * + * @param array $url Url hash to be converted + * @return string Converted url query string + */ + function _queryString($url) { + $out = '?'; + $params = array(); + foreach ($url as $key => $value) { + $params[] = "$key=$value"; + } + $out .= implode('&', $params); + return $out; + } + +/** + * Paints the end of the document html. + * + * @return void + */ + function paintDocumentEnd() { + $baseDir = $this->params['baseDir']; + include CAKE_TESTS_LIB . 'templates' . DS . 'footer.php'; + ob_end_flush(); + } + +/** + * Paints the test failure with a breadcrumbs + * trail of the nesting test suites below the + * top level test. + * + * @param string $message Failure message displayed in + * the context of the other tests. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + echo "
            • \n"; + echo "Failed"; + echo "
              " . $this->_htmlEntities($message) . "
              \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
              " . implode(" -> ", $breadcrumb) . "
              \n"; + echo "
            • \n"; + } + +/** + * Paints the test pass with a breadcrumbs + * trail of the nesting test suites below the + * top level test. + * + * @param string $message Pass message displayed in the context of the other tests. + * @return void + * @access public + */ + function paintPass($message) { + parent::paintPass($message); + + if (isset($this->params['show_passes']) && $this->params['show_passes']) { + echo "
            • \n"; + echo "Passed "; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo implode(" -> ", $breadcrumb); + echo "
              " . $this->_htmlEntities($message) . "\n"; + echo "
            • \n"; + } + } + +/** + * Paints a PHP error. + * + * @param string $message Message is ignored. + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + echo "
            • \n"; + echo "Error"; + echo "
              " . $this->_htmlEntities($message) . "
              \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
              " . implode(" -> ", $breadcrumb) . "
              \n"; + echo "
            • \n"; + } + +/** + * Paints a PHP exception. + * + * @param Exception $exception Exception to display. + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + echo "
            • \n"; + echo "Exception"; + $message = 'Unexpected exception of type [' . get_class($exception) . + '] with message ['. $exception->getMessage() . + '] in ['. $exception->getFile() . + ' line ' . $exception->getLine() . ']'; + echo "
              " . $this->_htmlEntities($message) . "
              \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
              " . implode(" -> ", $breadcrumb) . "
              \n"; + echo "
            • \n"; + } + +/** + * Prints the message for skipping tests. + * + * @param string $message Text of skip condition. + * @return void + * @access public + */ + function paintSkip($message) { + parent::paintSkip($message); + echo "
            • \n"; + echo "Skipped "; + echo $this->_htmlEntities($message); + echo "
            • \n"; + } + +/** + * Paints formatted text such as dumped variables. + * + * @param string $message Text to show. + * @return void + * @access public + */ + function paintFormattedMessage($message) { + echo '
              ' . $this->_htmlEntities($message) . '
              '; + } + +/** + * Character set adjusted entity conversion. + * + * @param string $message Plain text or Unicode message. + * @return string Browser readable message. + * @access protected + */ + function _htmlEntities($message) { + return htmlentities($message, ENT_COMPAT, $this->_characterSet); + } +} diff --git a/cake/tests/lib/reporter/.svn/text-base/cake_text_reporter.php.svn-base b/cake/tests/lib/reporter/.svn/text-base/cake_text_reporter.php.svn-base new file mode 100644 index 0000000..48cd052 --- /dev/null +++ b/cake/tests/lib/reporter/.svn/text-base/cake_text_reporter.php.svn-base @@ -0,0 +1,198 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * CakeTextReporter contains reporting features used for plain text based output + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeTextReporter extends CakeBaseReporter { + +/** + * Sets the text/plain header if the test is not a CLI test. + * + * @return void + */ + function paintDocumentStart() { + if (!SimpleReporter::inCli()) { + header('Content-type: text/plain'); + } + } + +/** + * Paints the end of the test with a summary of + * the passes and failures. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintFooter($test_name) { + if ($this->getFailCount() + $this->getExceptionCount() == 0) { + echo "OK\n"; + } else { + echo "FAILURES!!!\n"; + } + echo "Test cases run: " . $this->getTestCaseProgress() . + "/" . $this->getTestCaseCount() . + ", Passes: " . $this->getPassCount() . + ", Failures: " . $this->getFailCount() . + ", Exceptions: " . $this->getExceptionCount() . "\n"; + + echo 'Time taken by tests (in seconds): ' . $this->_timeDuration . "\n"; + if (function_exists('memory_get_peak_usage')) { + echo 'Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . "\n"; + } + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + } + +/** + * Paints the title only. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintHeader($test_name) { + $this->paintDocumentStart(); + echo "$test_name\n"; + flush(); + } + +/** + * Paints the test failure as a stack trace. + * + * @param string $message Failure message displayed in + * the context of the other tests. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + echo $this->getFailCount() . ") $message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Paints a PHP error. + * + * @param string $message Message to be shown. + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + echo "Exception " . $this->getExceptionCount() . "!\n$message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Paints a PHP exception. + * + * @param Exception $exception Exception to describe. + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + $message = 'Unexpected exception of type [' . get_class($exception) . + '] with message ['. $exception->getMessage() . + '] in ['. $exception->getFile() . + ' line ' . $exception->getLine() . ']'; + echo "Exception " . $this->getExceptionCount() . "!\n$message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Prints the message for skipping tests. + * + * @param string $message Text of skip condition. + * @return void + * @access public + */ + function paintSkip($message) { + parent::paintSkip($message); + echo "Skip: $message\n"; + } + +/** + * Paints formatted text such as dumped variables. + * + * @param string $message Text to show. + * @return void + * @access public + */ + function paintFormattedMessage($message) { + echo "$message\n"; + flush(); + } + +/** + * Generate a test case list in plain text. + * Creates as series of url's for tests that can be run. + * One case per line. + * + * @return void + */ + function testCaseList() { + $testCases = parent::testCaseList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "Core Test Cases:\n"; + $urlExtra = ''; + if ($app) { + $buffer = "App Test Cases:\n"; + $urlExtra = '&app=true'; + } elseif ($plugin) { + $buffer = Inflector::humanize($plugin) . " Test Cases:\n"; + $urlExtra = '&plugin=' . $plugin; + } + + if (1 > count($testCases)) { + $buffer .= "EMPTY"; + echo $buffer; + } + + foreach ($testCases as $testCaseFile => $testCase) { + $buffer .= $_SERVER['SERVER_NAME'] . $this->baseUrl() ."?case=" . $testCase . "&output=text"."\n"; + } + + $buffer .= "\n"; + echo $buffer; + } +} diff --git a/cake/tests/lib/reporter/cake_base_reporter.php b/cake/tests/lib/reporter/cake_base_reporter.php new file mode 100644 index 0000000..957fb8f --- /dev/null +++ b/cake/tests/lib/reporter/cake_base_reporter.php @@ -0,0 +1,225 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + +/** + * CakeBaseReporter contains common reporting features used in the CakePHP Test suite + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeBaseReporter extends SimpleReporter { + +/** + * Time the test runs started. + * + * @var integer + * @access protected + */ + var $_timeStart = 0; + +/** + * Time the test runs ended + * + * @var integer + * @access protected + */ + var $_timeEnd = 0; + +/** + * Duration of all test methods. + * + * @var integer + * @access protected + */ + var $_timeDuration = 0; + +/** + * Array of request parameters. Usually parsed GET params. + * + * @var array + */ + var $params = array(); + +/** + * Character set for the output of test reporting. + * + * @var string + * @access protected + */ + var $_characterSet; + +/** + * Does nothing yet. The first output will + * be sent on the first test start. + * + * ### Params + * + * - show_passes - Should passes be shown + * - plugin - Plugin test being run? + * - app - App test being run. + * - case - The case being run + * - codeCoverage - Whether the case/group being run is being code covered. + * + * @param string $charset The character set to output with. Defaults to UTF-8 + * @param array $params Array of request parameters the reporter should use. See above. + * @access public + */ + function CakeBaseReporter($charset = 'utf-8', $params = array()) { + $this->SimpleReporter(); + if (!$charset) { + $charset = 'utf-8'; + } + $this->_characterSet = $charset; + $this->params = $params; + } + +/** + * Signals / Paints the beginning of a TestSuite executing. + * Starts the timer for the TestSuite execution time. + * + * @param string $test_name Name of the test that is being run. + * @param integer $size + * @return void + */ + function paintGroupStart($test_name, $size) { + if (empty($this->_timeStart)) { + $this->_timeStart = $this->_getTime(); + } + parent::paintGroupStart($test_name, $size); + } + +/** + * Signals/Paints the end of a TestSuite. All test cases have run + * and timers are stopped. + * + * @param string $test_name Name of the test that is being run. + * @return void + */ + function paintGroupEnd($test_name) { + $this->_timeEnd = $this->_getTime(); + $this->_timeDuration = $this->_timeEnd - $this->_timeStart; + parent::paintGroupEnd($test_name); + } + +/** + * Paints the beginning of a test method being run. This is used + * to start/resume the code coverage tool. + * + * @param string $method The method name being run. + * @return void + */ + function paintMethodStart($method) { + parent::paintMethodStart($method); + if (!empty($this->params['codeCoverage'])) { + CodeCoverageManager::start(); + } + } + +/** + * Paints the end of a test method being run. This is used + * to pause the collection of code coverage if its being used. + * + * @param string $method The name of the method being run. + * @return void + */ + function paintMethodEnd($method) { + parent::paintMethodEnd($method); + if (!empty($this->params['codeCoverage'])) { + CodeCoverageManager::stop(); + } + } + +/** + * Get the current time in microseconds. Similar to getMicrotime in basics.php + * but in a separate function to reduce dependancies. + * + * @return float Time in microseconds + * @access protected + */ + function _getTime() { + list($usec, $sec) = explode(' ', microtime()); + return ((float)$sec + (float)$usec); + } + +/** + * Retrieves a list of test cases from the active Manager class, + * displaying it in the correct format for the reporter subclass + * + * @return mixed + */ + function testCaseList() { + $testList = TestManager::getTestCaseList(); + return $testList; + } + +/** + * Retrieves a list of group test cases from the active Manager class + * displaying it in the correct format for the reporter subclass. + * + * @return void + */ + function groupTestList() { + $testList = TestManager::getGroupTestList(); + return $testList; + } + +/** + * Paints the start of the response from the test suite. + * Used to paint things like head elements in an html page. + * + * @return void + */ + function paintDocumentStart() { + + } + +/** + * Paints the end of the response from the test suite. + * Used to paint things like in an html page. + * + * @return void + */ + function paintDocumentEnd() { + + } + +/** + * Paint a list of test sets, core, app, and plugin test sets + * available. + * + * @return void + */ + function paintTestMenu() { + + } + +/** + * Get the baseUrl if one is available. + * + * @return string The base url for the request. + */ + function baseUrl() { + if (!empty($_SERVER['PHP_SELF'])) { + return $_SERVER['PHP_SELF']; + } + return ''; + } + +} diff --git a/cake/tests/lib/reporter/cake_cli_reporter.php b/cake/tests/lib/reporter/cake_cli_reporter.php new file mode 100644 index 0000000..da1de37 --- /dev/null +++ b/cake/tests/lib/reporter/cake_cli_reporter.php @@ -0,0 +1,178 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ + if (version_compare(PHP_VERSION, '4.4.4', '<=') || + PHP_SAPI == 'cgi') { + define('STDOUT', fopen('php://stdout', 'w')); + define('STDERR', fopen('php://stderr', 'w')); + register_shutdown_function(create_function('', 'fclose(STDOUT); fclose(STDERR); return true;')); + } + +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * Minimal command line test displayer. Writes fail details to STDERR. Returns 0 + * to the shell if all tests pass, ST_FAILS_RETURN_CODE if any test fails. + * + * @package cake + * @subpackage cake.tests.libs.reporter + */ +class CakeCliReporter extends CakeBaseReporter { +/** + * separator string for fail, error, exception, and skip messages. + * + * @var string + */ + var $separator = '->'; + +/** + * array of 'request' parameters + * + * @var array + */ + var $params = array(); + +/** + * Constructor + * + * @param string $separator + * @param array $params + * @return void + */ + function CakeCLIReporter($charset = 'utf-8', $params = array()) { + $this->CakeBaseReporter($charset, $params); + } + + function setFailDetailSeparator($separator) { + $this->separator = $separator; + } + +/** + * Paint fail faildetail to STDERR. + * + * @param string $message Message of the fail. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'FAIL' . $this->separator . $message); + } + +/** + * Paint PHP errors to STDERR. + * + * @param string $message Message of the Error + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'ERROR' . $this->separator . $message); + } + +/** + * Paint exception faildetail to STDERR. + * + * @param object $exception Exception instance + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + $message = sprintf('Unexpected exception of type [%s] with message [%s] in [%s] line [%s]', + get_class($exception), + $exception->getMessage(), + $exception->getFile(), + $exception->getLine() + ); + $message .= $this->_getBreadcrumb(); + fwrite(STDERR, 'EXCEPTION' . $this->separator . $message); + } + +/** + * Get the breadcrumb trail for the current test method/case + * + * @return string The string for the breadcrumb + */ + function _getBreadcrumb() { + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + $out = "\n\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + $out .= "\n\n"; + return $out; + } + +/** + * Paint a test skip message + * + * @param string $message The message of the skip + * @return void + */ + function paintSkip($message) { + parent::paintSkip($message); + fwrite(STDOUT, 'SKIP' . $this->separator . $message . "\n\n"); + } + +/** + * Paint a footer with test case name, timestamp, counts of fails and exceptions. + */ + function paintFooter($test_name) { + $buffer = $this->getTestCaseProgress() . '/' . $this->getTestCaseCount() . ' test cases complete: '; + + if (0 < ($this->getFailCount() + $this->getExceptionCount())) { + $buffer .= $this->getPassCount() . " passes"; + if (0 < $this->getFailCount()) { + $buffer .= ", " . $this->getFailCount() . " fails"; + } + if (0 < $this->getExceptionCount()) { + $buffer .= ", " . $this->getExceptionCount() . " exceptions"; + } + $buffer .= ".\n"; + $buffer .= $this->_timeStats(); + fwrite(STDOUT, $buffer); + } else { + fwrite(STDOUT, $buffer . $this->getPassCount() . " passes.\n" . $this->_timeStats()); + } + + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + } + +/** + * Get the time and memory stats for this test case/group + * + * @return string String content to display + * @access protected + */ + function _timeStats() { + $out = 'Time taken by tests (in seconds): ' . $this->_timeDuration . "\n"; + if (function_exists('memory_get_peak_usage')) { + $out .= 'Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . "\n"; + } + return $out; + } +} diff --git a/cake/tests/lib/reporter/cake_html_reporter.php b/cake/tests/lib/reporter/cake_html_reporter.php new file mode 100644 index 0000000..b1ef7ac --- /dev/null +++ b/cake/tests/lib/reporter/cake_html_reporter.php @@ -0,0 +1,378 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * CakeHtmlReporter Reports Results of TestSuites and Test Cases + * in an HTML format / context. + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeHtmlReporter extends CakeBaseReporter { +/** + * Constructor + * + * @param string $charset + * @param string $params + * @return void + */ + function CakeHtmlReporter($charset = 'utf-8', $params = array()) { + $params = array_map(array($this, '_htmlEntities'), $params); + $this->CakeBaseReporter($charset, $params); + } +/** + * Paints the top of the web page setting the + * title to the name of the starting test. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintHeader($testName) { + $this->sendNoCacheHeaders(); + $this->paintDocumentStart(); + $this->paintTestMenu(); + printf("

              %s

              \n", $this->_htmlEntities($testName)); + echo "
                \n"; + } + +/** + * Paints the document start content contained in header.php + * + * @return void + */ + function paintDocumentStart() { + ob_start(); + $baseDir = $this->params['baseDir']; + include CAKE_TESTS_LIB . 'templates' . DS . 'header.php'; + } + +/** + * Paints the menu on the left side of the test suite interface. + * Contains all of the various plugin, core, and app buttons. + * + * @return void + */ + function paintTestMenu() { + $groups = $this->baseUrl() . '?show=groups'; + $cases = $this->baseUrl() . '?show=cases'; + $plugins = App::objects('plugin', null, false); + sort($plugins); + include CAKE_TESTS_LIB . 'templates' . DS . 'menu.php'; + } + +/** + * Retrieves and paints the list of tests cases in an HTML format. + * + * @return void + */ + function testCaseList() { + $testCases = parent::testCaseList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "

                Core Test Cases:

                \n
                  "; + $urlExtra = null; + if ($app) { + $buffer = "

                  App Test Cases:

                  \n
                    "; + $urlExtra = '&app=true'; + } elseif ($plugin) { + $buffer = "

                    " . Inflector::humanize($plugin) . " Test Cases:

                    \n
                      "; + $urlExtra = '&plugin=' . $plugin; + } + + if (1 > count($testCases)) { + $buffer .= "EMPTY"; + } + + foreach ($testCases as $testCaseFile => $testCase) { + $title = explode(strpos($testCase, '\\') ? '\\' : '/', str_replace('.test.php', '', $testCase)); + $title[count($title) - 1] = Inflector::camelize($title[count($title) - 1]); + $title = implode(' / ', $title); + $buffer .= "
                    • " . $title . "
                    • \n"; + } + $buffer .= "
                    \n"; + echo $buffer; + } + +/** + * Retrieves and paints the list of group tests in an HTML format. + * + * @return void + */ + function groupTestList() { + $groupTests = parent::groupTestList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "

                    Core Test Groups:

                    \n
                      "; + $urlExtra = null; + if ($app) { + $buffer = "

                      App Test Groups:

                      \n
                        "; + $urlExtra = '&app=true'; + } else if ($plugin) { + $buffer = "

                        " . Inflector::humanize($plugin) . " Test Groups:

                        \n
                          "; + $urlExtra = '&plugin=' . $plugin; + } + + $buffer .= "
                        • All tests
                        • \n"; + + foreach ($groupTests as $groupTest) { + $buffer .= "
                        • " . $groupTest . "
                        • \n"; + } + $buffer .= "
                        \n"; + echo $buffer; + } + +/** + * Send the headers necessary to ensure the page is + * reloaded on every request. Otherwise you could be + * scratching your head over out of date test data. + * + * @return void + * @access public + */ + function sendNoCacheHeaders() { + if (!headers_sent()) { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + } + } + +/** + * Paints the end of the test with a summary of + * the passes and failures. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintFooter($test_name) { + $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green"); + echo "
                      \n"; + echo "
                      "; + echo $this->getTestCaseProgress() . "/" . $this->getTestCaseCount(); + echo " test cases complete:\n"; + echo "" . $this->getPassCount() . " passes, "; + echo "" . $this->getFailCount() . " fails and "; + echo "" . $this->getExceptionCount() . " exceptions."; + echo "
                      \n"; + echo '
                      '; + echo '

                      Time taken by tests (in seconds): ' . $this->_timeDuration . '

                      '; + if (function_exists('memory_get_peak_usage')) { + echo '

                      Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . '

                      '; + } + echo $this->_paintLinks(); + echo '
                      '; + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + $this->paintDocumentEnd(); + } + +/** + * Renders the links that for accessing things in the test suite. + * + * @return void + */ + function _paintLinks() { + $show = $query = array(); + if (!empty($this->params['group'])) { + $show['show'] = 'groups'; + } elseif (!empty($this->params['case'])) { + $show['show'] = 'cases'; + } + + if (!empty($this->params['app'])) { + $show['app'] = $query['app'] = 'true'; + } + if (!empty($this->params['plugin'])) { + $show['plugin'] = $query['plugin'] = $this->params['plugin']; + } + if (!empty($this->params['case'])) { + $query['case'] = $this->params['case']; + } elseif (!empty($this->params['group'])) { + $query['group'] = $this->params['group']; + } + $show = $this->_queryString($show); + $query = $this->_queryString($query); + + echo "

                      Run more tests | Show Passes | \n"; + echo " Analyze Code Coverage

                      \n"; + } + +/** + * Convert an array of parameters into a query string url + * + * @param array $url Url hash to be converted + * @return string Converted url query string + */ + function _queryString($url) { + $out = '?'; + $params = array(); + foreach ($url as $key => $value) { + $params[] = "$key=$value"; + } + $out .= implode('&', $params); + return $out; + } + +/** + * Paints the end of the document html. + * + * @return void + */ + function paintDocumentEnd() { + $baseDir = $this->params['baseDir']; + include CAKE_TESTS_LIB . 'templates' . DS . 'footer.php'; + ob_end_flush(); + } + +/** + * Paints the test failure with a breadcrumbs + * trail of the nesting test suites below the + * top level test. + * + * @param string $message Failure message displayed in + * the context of the other tests. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + echo "
                    • \n"; + echo "Failed"; + echo "
                      " . $this->_htmlEntities($message) . "
                      \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
                      " . implode(" -> ", $breadcrumb) . "
                      \n"; + echo "
                    • \n"; + } + +/** + * Paints the test pass with a breadcrumbs + * trail of the nesting test suites below the + * top level test. + * + * @param string $message Pass message displayed in the context of the other tests. + * @return void + * @access public + */ + function paintPass($message) { + parent::paintPass($message); + + if (isset($this->params['show_passes']) && $this->params['show_passes']) { + echo "
                    • \n"; + echo "Passed "; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo implode(" -> ", $breadcrumb); + echo "
                      " . $this->_htmlEntities($message) . "\n"; + echo "
                    • \n"; + } + } + +/** + * Paints a PHP error. + * + * @param string $message Message is ignored. + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + echo "
                    • \n"; + echo "Error"; + echo "
                      " . $this->_htmlEntities($message) . "
                      \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
                      " . implode(" -> ", $breadcrumb) . "
                      \n"; + echo "
                    • \n"; + } + +/** + * Paints a PHP exception. + * + * @param Exception $exception Exception to display. + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + echo "
                    • \n"; + echo "Exception"; + $message = 'Unexpected exception of type [' . get_class($exception) . + '] with message ['. $exception->getMessage() . + '] in ['. $exception->getFile() . + ' line ' . $exception->getLine() . ']'; + echo "
                      " . $this->_htmlEntities($message) . "
                      \n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "
                      " . implode(" -> ", $breadcrumb) . "
                      \n"; + echo "
                    • \n"; + } + +/** + * Prints the message for skipping tests. + * + * @param string $message Text of skip condition. + * @return void + * @access public + */ + function paintSkip($message) { + parent::paintSkip($message); + echo "
                    • \n"; + echo "Skipped "; + echo $this->_htmlEntities($message); + echo "
                    • \n"; + } + +/** + * Paints formatted text such as dumped variables. + * + * @param string $message Text to show. + * @return void + * @access public + */ + function paintFormattedMessage($message) { + echo '
                      ' . $this->_htmlEntities($message) . '
                      '; + } + +/** + * Character set adjusted entity conversion. + * + * @param string $message Plain text or Unicode message. + * @return string Browser readable message. + * @access protected + */ + function _htmlEntities($message) { + return htmlentities($message, ENT_COMPAT, $this->_characterSet); + } +} diff --git a/cake/tests/lib/reporter/cake_text_reporter.php b/cake/tests/lib/reporter/cake_text_reporter.php new file mode 100644 index 0000000..9767fec --- /dev/null +++ b/cake/tests/lib/reporter/cake_text_reporter.php @@ -0,0 +1,198 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package cake + * @subpackage cake.tests.libs.reporter + * @since CakePHP(tm) v 1.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +include_once dirname(__FILE__) . DS . 'cake_base_reporter.php'; + +/** + * CakeTextReporter contains reporting features used for plain text based output + * + * @package cake + * @subpackage cake.tests.lib + */ +class CakeTextReporter extends CakeBaseReporter { + +/** + * Sets the text/plain header if the test is not a CLI test. + * + * @return void + */ + function paintDocumentStart() { + if (!SimpleReporter::inCli()) { + header('Content-type: text/plain'); + } + } + +/** + * Paints the end of the test with a summary of + * the passes and failures. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintFooter($test_name) { + if ($this->getFailCount() + $this->getExceptionCount() == 0) { + echo "OK\n"; + } else { + echo "FAILURES!!!\n"; + } + echo "Test cases run: " . $this->getTestCaseProgress() . + "/" . $this->getTestCaseCount() . + ", Passes: " . $this->getPassCount() . + ", Failures: " . $this->getFailCount() . + ", Exceptions: " . $this->getExceptionCount() . "\n"; + + echo 'Time taken by tests (in seconds): ' . $this->_timeDuration . "\n"; + if (function_exists('memory_get_peak_usage')) { + echo 'Peak memory use: (in bytes): ' . number_format(memory_get_peak_usage()) . "\n"; + } + if ( + isset($this->params['codeCoverage']) && + $this->params['codeCoverage'] && + class_exists('CodeCoverageManager') + ) { + CodeCoverageManager::report(); + } + } + +/** + * Paints the title only. + * + * @param string $test_name Name class of test. + * @return void + * @access public + */ + function paintHeader($test_name) { + $this->paintDocumentStart(); + echo "$test_name\n"; + flush(); + } + +/** + * Paints the test failure as a stack trace. + * + * @param string $message Failure message displayed in + * the context of the other tests. + * @return void + * @access public + */ + function paintFail($message) { + parent::paintFail($message); + echo $this->getFailCount() . ") $message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Paints a PHP error. + * + * @param string $message Message to be shown. + * @return void + * @access public + */ + function paintError($message) { + parent::paintError($message); + echo "Exception " . $this->getExceptionCount() . "!\n$message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Paints a PHP exception. + * + * @param Exception $exception Exception to describe. + * @return void + * @access public + */ + function paintException($exception) { + parent::paintException($exception); + $message = 'Unexpected exception of type [' . get_class($exception) . + '] with message ['. $exception->getMessage() . + '] in ['. $exception->getFile() . + ' line ' . $exception->getLine() . ']'; + echo "Exception " . $this->getExceptionCount() . "!\n$message\n"; + $breadcrumb = $this->getTestList(); + array_shift($breadcrumb); + echo "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); + echo "\n"; + } + +/** + * Prints the message for skipping tests. + * + * @param string $message Text of skip condition. + * @return void + * @access public + */ + function paintSkip($message) { + parent::paintSkip($message); + echo "Skip: $message\n"; + } + +/** + * Paints formatted text such as dumped variables. + * + * @param string $message Text to show. + * @return void + * @access public + */ + function paintFormattedMessage($message) { + echo "$message\n"; + flush(); + } + +/** + * Generate a test case list in plain text. + * Creates as series of url's for tests that can be run. + * One case per line. + * + * @return void + */ + function testCaseList() { + $testCases = parent::testCaseList(); + $app = $this->params['app']; + $plugin = $this->params['plugin']; + + $buffer = "Core Test Cases:\n"; + $urlExtra = ''; + if ($app) { + $buffer = "App Test Cases:\n"; + $urlExtra = '&app=true'; + } elseif ($plugin) { + $buffer = Inflector::humanize($plugin) . " Test Cases:\n"; + $urlExtra = '&plugin=' . $plugin; + } + + if (1 > count($testCases)) { + $buffer .= "EMPTY"; + echo $buffer; + } + + foreach ($testCases as $testCaseFile => $testCase) { + $buffer .= $_SERVER['SERVER_NAME'] . $this->baseUrl() ."?case=" . $testCase . "&output=text"."\n"; + } + + $buffer .= "\n"; + echo $buffer; + } +} diff --git a/cake/tests/lib/templates/.svn/entries b/cake/tests/lib/templates/.svn/entries new file mode 100644 index 0000000..b64c50c --- /dev/null +++ b/cake/tests/lib/templates/.svn/entries @@ -0,0 +1,198 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/cake/tests/lib/templates +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +simpletest.php +file + + + + +2010-08-30T06:36:28.000000Z +a4ae846a597e45596b186c6e9c9da42a +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1250 + +footer.php +file + + + + +2010-08-30T06:36:28.000000Z +6e72f51da7bd2b5be301d46c9cf6714b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1179 + +xdebug.php +file + + + + +2010-08-30T06:36:28.000000Z +c9a843c9e1de4445504aea0da5a34303 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1080 + +menu.php +file + + + + +2010-08-30T06:36:28.000000Z +2c4718e72c0a4336a953290a6b567f16 +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +1821 + +header.php +file + + + + +2010-08-30T06:36:28.000000Z +b646c7bd1e9bed9b6ed6296625561f0b +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +4098 + diff --git a/cake/tests/lib/templates/.svn/text-base/footer.php.svn-base b/cake/tests/lib/templates/.svn/text-base/footer.php.svn-base new file mode 100644 index 0000000..63b5b05 --- /dev/null +++ b/cake/tests/lib/templates/.svn/text-base/footer.php.svn-base @@ -0,0 +1,37 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + + + element('sql_dump'); + ?> + + + \ No newline at end of file diff --git a/cake/tests/lib/templates/.svn/text-base/header.php.svn-base b/cake/tests/lib/templates/.svn/text-base/header.php.svn-base new file mode 100644 index 0000000..fb098d4 --- /dev/null +++ b/cake/tests/lib/templates/.svn/text-base/header.php.svn-base @@ -0,0 +1,125 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + + + + + CakePHP Test Suite 1.3 + + + + +
                      + +
                      +

                      CakePHP Test Suite 1.3

                      \ No newline at end of file diff --git a/cake/tests/lib/templates/.svn/text-base/menu.php.svn-base b/cake/tests/lib/templates/.svn/text-base/menu.php.svn-base new file mode 100644 index 0000000..c678e49 --- /dev/null +++ b/cake/tests/lib/templates/.svn/text-base/menu.php.svn-base @@ -0,0 +1,58 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> +
                      + +
                      +
                      \ No newline at end of file diff --git a/cake/tests/lib/templates/.svn/text-base/simpletest.php.svn-base b/cake/tests/lib/templates/.svn/text-base/simpletest.php.svn-base new file mode 100644 index 0000000..6523159 --- /dev/null +++ b/cake/tests/lib/templates/.svn/text-base/simpletest.php.svn-base @@ -0,0 +1,32 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + +
                      +

                      SimpleTest is not installed

                      +

                      You must install SimpleTest to use the CakePHP(tm) Test Suite.

                      +

                      SimpleTest can be placed in one of the following directories.

                      +
                        +
                      • vendors
                      • +
                      • vendors
                      • +
                      +

                      Download SimpleTest

                      +
                      + \ No newline at end of file diff --git a/cake/tests/lib/templates/.svn/text-base/xdebug.php.svn-base b/cake/tests/lib/templates/.svn/text-base/xdebug.php.svn-base new file mode 100644 index 0000000..4c97639 --- /dev/null +++ b/cake/tests/lib/templates/.svn/text-base/xdebug.php.svn-base @@ -0,0 +1,27 @@ + + * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + +
                      +

                      Xdebug is not installed

                      +

                      You must install Xdebug to use the CakePHP(tm) Code Coverage Analyzation.

                      +

                      Learn How To Install Xdebug

                      +
                      + \ No newline at end of file diff --git a/cake/tests/lib/templates/footer.php b/cake/tests/lib/templates/footer.php new file mode 100644 index 0000000..63b5b05 --- /dev/null +++ b/cake/tests/lib/templates/footer.php @@ -0,0 +1,37 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?>
                      +
                      + + element('sql_dump'); + ?> +
                      + + \ No newline at end of file diff --git a/cake/tests/lib/templates/header.php b/cake/tests/lib/templates/header.php new file mode 100644 index 0000000..fb098d4 --- /dev/null +++ b/cake/tests/lib/templates/header.php @@ -0,0 +1,125 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + + + + + CakePHP Test Suite 1.3 + + + + +
                      + +
                      +

                      CakePHP Test Suite 1.3

                      \ No newline at end of file diff --git a/cake/tests/lib/templates/menu.php b/cake/tests/lib/templates/menu.php new file mode 100644 index 0000000..c678e49 --- /dev/null +++ b/cake/tests/lib/templates/menu.php @@ -0,0 +1,58 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> +
                      + +
                      +
                      \ No newline at end of file diff --git a/cake/tests/lib/templates/simpletest.php b/cake/tests/lib/templates/simpletest.php new file mode 100644 index 0000000..6523159 --- /dev/null +++ b/cake/tests/lib/templates/simpletest.php @@ -0,0 +1,32 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + +
                      +

                      SimpleTest is not installed

                      +

                      You must install SimpleTest to use the CakePHP(tm) Test Suite.

                      +

                      SimpleTest can be placed in one of the following directories.

                      +
                        +
                      • vendors
                      • +
                      • vendors
                      • +
                      +

                      Download SimpleTest

                      +
                      + \ No newline at end of file diff --git a/cake/tests/lib/templates/xdebug.php b/cake/tests/lib/templates/xdebug.php new file mode 100644 index 0000000..abed004 --- /dev/null +++ b/cake/tests/lib/templates/xdebug.php @@ -0,0 +1,27 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.libs + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +?> + +
                      +

                      Xdebug is not installed

                      +

                      You must install Xdebug to use the CakePHP(tm) Code Coverage Analyzation.

                      +

                      Learn How To Install Xdebug

                      +
                      + \ No newline at end of file diff --git a/cake/tests/lib/test_manager.php b/cake/tests/lib/test_manager.php new file mode 100644 index 0000000..3aff520 --- /dev/null +++ b/cake/tests/lib/test_manager.php @@ -0,0 +1,421 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.cake.tests.lib + * @since CakePHP(tm) v 1.2.0.4433 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +define('CORE_TEST_CASES', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'cases'); +define('CORE_TEST_GROUPS', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'groups'); +define('APP_TEST_CASES', TESTS . 'cases'); +define('APP_TEST_GROUPS', TESTS . 'groups'); + +/** + * TestManager is the base class that handles loading and initiating the running + * of TestCase and TestSuite classes that the user has selected. + * + * @package cake + * @subpackage cake.cake.tests.lib + */ +class TestManager { +/** + * Extension suffix for test case files. + * + * @var string + */ + var $_testExtension = '.test.php'; + +/** + * Extension suffix for group test case files. + * + * @var string + */ + var $_groupExtension = '.group.php'; + +/** + * Is this test an AppTest? + * + * @var boolean + */ + var $appTest = false; + +/** + * Is this test a plugin test? + * + * @var mixed boolean false or string name of the plugin being used. + */ + var $pluginTest = false; + +/** + * Constructor for the TestManager class + * + * @return void + * @access public + */ + function TestManager() { + $this->_installSimpleTest(); + if (isset($_GET['app'])) { + $this->appTest = true; + } + if (isset($_GET['plugin'])) { + $this->pluginTest = htmlentities($_GET['plugin']); + } + } + +/** + * Includes the required simpletest files in order for the testsuite to run + * + * @return void + * @access public + */ + function _installSimpleTest() { + App::import('Vendor', array( + 'simpletest' . DS . 'unit_tester', + 'simpletest' . DS . 'mock_objects', + 'simpletest' . DS . 'web_tester' + )); + require_once(CAKE_TESTS_LIB . 'cake_web_test_case.php'); + require_once(CAKE_TESTS_LIB . 'cake_test_case.php'); + } + +/** + * Runs all tests in the Application depending on the current appTest setting + * + * @param Object $reporter Reporter object for the tests being run. + * @param boolean $testing Are tests supposed to be auto run. Set to true to return testcase list. + * @return mixed + * @access public + */ + function runAllTests(&$reporter, $testing = false) { + $testCases =& $this->_getTestFileList($this->_getTestsPath()); + if ($this->appTest) { + $test =& new TestSuite(__('All App Tests', true)); + } else if ($this->pluginTest) { + $test =& new TestSuite(sprintf(__('All %s Plugin Tests', true), Inflector::humanize($this->pluginTest))); + } else { + $test =& new TestSuite(__('All Core Tests', true)); + } + + if ($testing) { + return $testCases; + } + + foreach ($testCases as $testCase) { + $test->addTestFile($testCase); + } + + return $test->run($reporter); + } + +/** + * Runs a specific test case file + * + * @param string $testCaseFile Filename of the test to be run. + * @param Object $reporter Reporter instance to attach to the test case. + * @param boolean $testing Set to true if testing, otherwise test case will be run. + * @return mixed Result of test case being run. + * @access public + */ + function runTestCase($testCaseFile, &$reporter, $testing = false) { + $testCaseFileWithPath = $this->_getTestsPath() . DS . $testCaseFile; + + if (!file_exists($testCaseFileWithPath) || strpos($testCaseFileWithPath, '..')) { + trigger_error( + sprintf(__("Test case %s cannot be found", true), htmlentities($testCaseFile)), + E_USER_ERROR + ); + return false; + } + + if ($testing) { + return true; + } + + $test =& new TestSuite(sprintf(__('Individual test case: %s', true), $testCaseFile)); + $test->addTestFile($testCaseFileWithPath); + return $test->run($reporter); + } + +/** + * Runs a specific group test file + * + * @param string $groupTestName GroupTest that you want to run. + * @param Object $reporter Reporter instance to use with the group test being run. + * @return mixed Results of group test being run. + * @access public + */ + function runGroupTest($groupTestName, &$reporter) { + $filePath = $this->_getTestsPath('groups') . DS . strtolower($groupTestName) . $this->_groupExtension; + + if (!file_exists($filePath) || strpos($filePath, '..')) { + trigger_error(sprintf( + __("Group test %s cannot be found at %s", true), + htmlentities($groupTestName), + htmlentities($filePath) + ), + E_USER_ERROR + ); + } + + require_once $filePath; + $test =& new TestSuite(sprintf(__('%s group test', true), $groupTestName)); + foreach ($this->_getGroupTestClassNames($filePath) as $groupTest) { + $testCase = new $groupTest(); + $test->addTestCase($testCase); + if (isset($testCase->label)) { + $test->_label = $testCase->label; + } + } + return $test->run($reporter); + } + +/** + * Adds all testcases in a given directory to a given GroupTest object + * + * @param object $groupTest Instance of TestSuite/GroupTest that files are to be added to. + * @param string $directory The directory to add tests from. + * @return void + * @access public + * @static + */ + function addTestCasesFromDirectory(&$groupTest, $directory = '.') { + $manager =& new TestManager(); + $testCases =& $manager->_getTestFileList($directory); + foreach ($testCases as $testCase) { + $groupTest->addTestFile($testCase); + } + } + +/** + * Adds a specific test file and thereby all of its test cases and group tests to a given group test file + * + * @param object $groupTest Instance of TestSuite/GroupTest that a file should be added to. + * @param string $file The file name, minus the suffix to add. + * @return void + * @access public + * @static + */ + function addTestFile(&$groupTest, $file) { + $manager =& new TestManager(); + + if (file_exists($file . $manager->_testExtension)) { + $file .= $manager->_testExtension; + } elseif (file_exists($file . $manager->_groupExtension)) { + $file .= $manager->_groupExtension; + } + $groupTest->addTestFile($file); + } + +/** + * Returns a list of test cases found in the current valid test case path + * + * @access public + * @static + */ + function &getTestCaseList() { + $manager =& new TestManager(); + $return = $manager->_getTestCaseList($manager->_getTestsPath()); + return $return; + } + +/** + * Builds the list of test cases from a given directory + * + * @param string $directory Directory to get test case list from. + * @access protected + */ + function &_getTestCaseList($directory = '.') { + $fileList =& $this->_getTestFileList($directory); + $testCases = array(); + foreach ($fileList as $testCaseFile) { + $testCases[$testCaseFile] = str_replace($directory . DS, '', $testCaseFile); + } + return $testCases; + } + +/** + * Returns a list of test files from a given directory + * + * @param string $directory Directory to get test case files from. + * @access protected + */ + function &_getTestFileList($directory = '.') { + $return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestCaseFile')); + return $return; + } + +/** + * Returns a list of group tests found in the current valid test case path + * + * @access public + * @static + */ + function &getGroupTestList() { + $manager =& new TestManager(); + $return = $manager->_getTestGroupList($manager->_getTestsPath('groups')); + return $return; + } + +/** + * Returns a list of group test files from a given directory + * + * @param string $directory The directory to get group test files from. + * @access protected + */ + function &_getTestGroupFileList($directory = '.') { + $return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestGroupFile')); + return $return; + } + +/** + * Returns a list of group test files from a given directory + * + * @param string $directory The directory to get group tests from. + * @access protected + */ + function &_getTestGroupList($directory = '.') { + $fileList =& $this->_getTestGroupFileList($directory); + $groupTests = array(); + + foreach ($fileList as $groupTestFile) { + $groupTests[$groupTestFile] = str_replace($this->_groupExtension, '', basename($groupTestFile)); + } + sort($groupTests); + return $groupTests; + } + +/** + * Returns a list of class names from a group test file + * + * @param string $groupTestFile The groupTest file to scan for TestSuite classnames. + * @access protected + */ + function &_getGroupTestClassNames($groupTestFile) { + $file = implode("\n", file($groupTestFile)); + preg_match("~lass\s+?(.*)\s+?extends TestSuite~", $file, $matches); + if (!empty($matches)) { + unset($matches[0]); + return $matches; + } + $matches = array(); + return $matches; + } + +/** + * Gets a recursive list of files from a given directory and matches then against + * a given fileTestFunction, like isTestCaseFile() + * + * @param string $directory The directory to scan for files. + * @param mixed $fileTestFunction + * @access protected + */ + function &_getRecursiveFileList($directory = '.', $fileTestFunction) { + $fileList = array(); + if (!is_dir($directory)) { + return $fileList; + } + + $files = glob($directory . DS . '*'); + $files = $files ? $files : array(); + + foreach ($files as $file) { + if (is_dir($file)) { + $fileList = array_merge($fileList, $this->_getRecursiveFileList($file, $fileTestFunction)); + } elseif ($fileTestFunction[0]->$fileTestFunction[1]($file)) { + $fileList[] = $file; + } + } + return $fileList; + } + +/** + * Tests if a file has the correct test case extension + * + * @param string $file + * @return boolean Whether $file is a test case. + * @access protected + */ + function _isTestCaseFile($file) { + return $this->_hasExpectedExtension($file, $this->_testExtension); + } + +/** + * Tests if a file has the correct group test extension + * + * @param string $file + * @return boolean Whether $file is a group + * @access protected + */ + function _isTestGroupFile($file) { + return $this->_hasExpectedExtension($file, $this->_groupExtension); + } + +/** + * Check if a file has a specific extension + * + * @param string $file + * @param string $extension + * @return void + * @access protected + */ + function _hasExpectedExtension($file, $extension) { + return $extension == strtolower(substr($file, (0 - strlen($extension)))); + } + +/** + * Returns the given path to the test files depending on a given type of tests (cases, group, ..) + * + * @param string $type either 'cases' or 'groups' + * @return string The path tests are located on + * @access protected + */ + function _getTestsPath($type = 'cases') { + if (!empty($this->appTest)) { + if ($type == 'cases') { + $result = APP_TEST_CASES; + } else if ($type == 'groups') { + $result = APP_TEST_GROUPS; + } + } else if (!empty($this->pluginTest)) { + $_pluginBasePath = APP . 'plugins' . DS . $this->pluginTest . DS . 'tests'; + $pluginPath = App::pluginPath($this->pluginTest); + if (file_exists($pluginPath . DS . 'tests')) { + $_pluginBasePath = $pluginPath . DS . 'tests'; + } + $result = $_pluginBasePath . DS . $type; + } else { + if ($type == 'cases') { + $result = CORE_TEST_CASES; + } else if ($type == 'groups') { + $result = CORE_TEST_GROUPS; + } + } + return $result; + } + +/** + * Get the extension for either 'group' or 'test' types. + * + * @param string $type Type of test to get, either 'test' or 'group' + * @return string Extension suffix for test. + * @access public + */ + function getExtension($type = 'test') { + if ($type == 'test' || $type == 'case') { + return $this->_testExtension; + } + return $this->_groupExtension; + } +} diff --git a/google4e29e7604bbbbc61.html b/google4e29e7604bbbbc61.html new file mode 100644 index 0000000..e554dd4 --- /dev/null +++ b/google4e29e7604bbbbc61.html @@ -0,0 +1 @@ +google-site-verification: google4e29e7604bbbbc61.html \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e41e66f --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + +Conta bloqueada + + + + + + +Mídia Negócios + + +

                      Conta temporariamente indisponível.

                      + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..9fd5814 --- /dev/null +++ b/index.php @@ -0,0 +1,55 @@ +I6<}xcl zWv&rXNjVLudy*}&CGi#&;AiL4E_EoPOZfcx<-e0GPcX}`#v}am)EFY7H7ck_UCQt) zPO=5=5p&^cI%Vo2HyIVz?z;EMb=EJ+R_jUCR_d#3>z=paZC;%BuhM+f&WBfN@gwTx zqo|*DlX&pc#ARF#i*`IPGpBLc!;Fc~@;pO);n?T>wCr6rcE;o2V85w@y>FAI9tW+1 zpsByMzDy>*@A-`fZ|l?U_v5p8^5>?yHUE|r-ehAR9nRox76^(0qJSvy?iFx5o%iA0 zuS6Cg3Wx&#S^?f4G@LPXSXne%2L{su0P9E_L(CtHT%#R^4l9e8fhk)Gw57_m7|NC- zuN^ORSXs2?q+Ii%+?|!{P?WhluCEQ9RA^B~Q9u+}RDgRwScA|1!bh2cIVplAlMCVo*Ylk@^UdK=Vy8K zDjAoHWRj1vboN^8I<4o`Af1WlMOu&H5&Nht3)m+beLTtQ@oD$&avAME?AhqSlU2_y zqyB!>vyc0aR;w@!!tU4L_PxD>=SS)4!^h^6JS!ROVj{N`&*3wS5H*kJJx!@V?QCDJ z{TrgV_LkOuMaF;5!8souw}AnD+k+e1P>ip^GvFEcqYUu=V4;k$V&hP@4h+%)0Na=r zfz7=H=UBy9v2h3w#JE(TOEubJ7?+NDt8uYnd4@^7;St_x=CHB!A@@@C9MH4Y^OgC56X e@KJmRDgvKn0~jkd4lx7qKLSF7A3Otpm4P2$pO={c literal 0 HcmV?d00001 diff --git a/vendors/shells/tasks/.DS_Store b/vendors/shells/tasks/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ea44dcef5c34422d34a9f46065a2786d10c2f521 GIT binary patch literal 6148 zcmeHKF-`+P474Fgk!VsPwb*H4us>3&xgZtzdIavliIlixmWgLul8o| zBR+r9J^c1NZ0-Q%rGONW0#ZN;k*#EcinfZTA(oPCUfq$idFE)>xHD0ND>*VFwYa9Ft&YBaPhILR7q8$UH i9b?0Gd=o`k*SN;>UN|HM9r>UG^=E*($fUquEARu{9vc4u literal 0 HcmV?d00001 diff --git a/vendors/shells/tasks/.svn/entries b/vendors/shells/tasks/.svn/entries new file mode 100644 index 0000000..b2bd8ba --- /dev/null +++ b/vendors/shells/tasks/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/vendors/shells/tasks +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-08-30T06:36:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/vendors/shells/tasks/.svn/text-base/empty.svn-base b/vendors/shells/tasks/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/vendors/shells/tasks/empty b/vendors/shells/tasks/empty new file mode 100644 index 0000000..e69de29 diff --git a/vendors/shells/templates/.DS_Store b/vendors/shells/templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ea44dcef5c34422d34a9f46065a2786d10c2f521 GIT binary patch literal 6148 zcmeHKF-`+P474Fgk!VsPwb*H4us>3&xgZtzdIavliIlixmWgLul8o| zBR+r9J^c1NZ0-Q%rGONW0#ZN;k*#EcinfZTA(oPCUfq$idFE)>xHD0ND>*VFwYa9Ft&YBaPhILR7q8$UH i9b?0Gd=o`k*SN;>UN|HM9r>UG^=E*($fUquEARu{9vc4u literal 0 HcmV?d00001 diff --git a/vendors/shells/templates/.svn/entries b/vendors/shells/templates/.svn/entries new file mode 100644 index 0000000..34f1a38 --- /dev/null +++ b/vendors/shells/templates/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +7 +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido/trunk/vendors/shells/templates +svn://creditosadphone.com.br/creditosadphone/rastreamentodepedido + + + +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + +aa0e83a5-ca41-43ef-90aa-59005b45e7ad + +empty +file + + + + +2010-08-30T06:36:28.000000Z +d41d8cd98f00b204e9800998ecf8427e +2010-11-18T02:39:20.278914Z +4 +rastreamentodepedido + + + + + + + + + + + + + + + + + + + + + +0 + diff --git a/vendors/shells/templates/.svn/text-base/empty.svn-base b/vendors/shells/templates/.svn/text-base/empty.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/vendors/shells/templates/empty b/vendors/shells/templates/empty new file mode 100644 index 0000000..e69de29